【发布时间】:2022-12-31 01:53:08
【问题描述】:
假设我有两个脚本:
- 生成管理器
- 敌人
在SpawnManager 中,我有函数SpawnEnemyWave 应该实例化 3 个敌人,如果随机数生成器低于 5,那么其中一个应该有更高的移动速度,另一个根本不应该移动。
在SpawnManager:
bool toughEnemy = true;
int waveNumber = 3;
float randomNumber = Random.Range(0, 10);
void Start()
{
SpawnEnemyWave(waveNumber);
}
void SpawnEnemyWave(int enemiesToSpawn)
{
float randomNumber = Random.Range(0, 10);
print(randomNumber);
for (int i = 0; i < enemiesToSpawn; i++)
{
if ((randomNumber < 5) && toughEnemy)
{
print("Tough");
Instantiate(enemyPrefab, GenerateSpawnPosition(), enemyPrefab.transform.rotation);
toughEnemy = false; //I make sure there is only one tough enemy per wave
}
else
{
print("Weak");
Instantiate(enemyPrefab, GenerateSpawnPosition(), enemyPrefab.transform.rotation);
}
}
}
在 Enemy 中,我正在检查 toughEnemy 变量是否设置为 true 以在实例化之前修改敌人的速度,我将这些 if 语句放在 start 函数中,因为我认为敌人被实例化的时间是叫。
void Start()
{
spawnManager = GameObject.Find("Spawn Manager").GetComponent<SpawnManager>();
if (spawnManager.toughEnemy)
{
speed = 1;
print("Speed " + speed);
}
else
{
speed = 0;
print("Speed " + speed);
}
}
问题是,当日志中的随机数为 0 时,我看到了这个......
- 随机数:0
- 艰难(for循环中的i为0)
- 弱(for循环中的i为1)
- 弱(for循环中的i为2)
- 速度0
- 速度0
- 速度0
而我所期待的是如下所示,因为我在实例化敌人之前首先修改了 SpawnManager 脚本中的变量。
- 随机数:0
- 艰难(for循环中的i为0)
- 速度 1
- 弱(for循环中的i为1)
- 速度0
- 弱(for循环中的i为2)
- 速度0
我在这里错过了什么?
【问题讨论】:
-
你为什么还要通过经理填充
ToughEnemy?强不强,敌人自己不应该知道吗?只是一个旁... -
@MakePeaceGreatAgain 你是对的,这更有意义。
标签: c# unity3d variables objectinstantiation