在我的Unity项目中,我试图制作一个功能,每5秒生成一个随机数,如果数字等于6,就会产生一个敌人。我尝试使用 UnityEngine.Random.Range(1,7) 生成数字,但我不断收到以下错误:
UnityException:不允许从 MonoBehaviour 构造函数(或实例字段初始值设定项)调用 RandomRangeInt,请改为在 Awake 或 Start 中调用它。从游戏对象“enemySpawn”上的 MonoBehaviour“spawnEnemy”调用。 这是代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class spawnEnemy : MonoBehaviour
{
public GameObject enemyPrefab;
public float spawnEnemySpeed = 5.0f;
private float spawnTimer = 0.0f;
int rng = 0;
void Start()
{
rng = UnityEngine.Random.Range(1,7);
Debug.Log(rng);
}
void Update()
{
spawnTimer += Time.deltaTime;
if (spawnTimer >= spawnEnemySpeed && rng == 6)
{
Instantiate(enemyPrefab, transform.position, transform.rotation);
spawnTimer = 0.0f;
rng = UnityEngine.Random.Range(1,7);
Debug.Log(rng);
}
}
}
我找不到这个问题的解决方案,我找到的大多数资料都说在
Start()
和Awake()
中编写代码,但即使我在Update
中评论了代码也对我不起作用。
我发现的来源之一:
此外,当前的代码没有按照您的预期进行操作。如果初始生成的随机值为 6,则您仅运行更新循环逻辑。
当前代码应如下所示:
public GameObject enemyPrefab;
public float spawnEnemySpeed = 5.0f;
private float spawnTimer = 0.0f;
int rng = 0;
void Start()
{
rng = UnityEngine.Random.Range(1, 7);
Debug.Log(rng);
}
void Update()
{
spawnTimer += Time.deltaTime;
if (spawnTimer >= spawnEnemySpeed)
{
spawnTimer = 0.0f;
rng = UnityEngine.Random.Range(1, 7);
if (rng == 6)
{
Instantiate(enemyPrefab, transform.position, transform.rotation);
}
Debug.Log(rng);
}
}
```
Hope it helps :)