UnityException:不允许从 MonoBehaviour 构造函数调用 RandomRangeInt,请在 Awake 或 Start 中调用它

问题描述 投票:0回答:1

在我的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
中评论了代码也对我不起作用。

我发现的来源之一:

c# unity-game-engine random
1个回答
0
投票
当前代码中的任何内容都不会立即引发该错误,您是否保存了更改并清除了控制台中以前的错误?

此外,当前的代码没有按照您的预期进行操作。如果初始生成的随机值为 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 :)
    
© www.soinside.com 2019 - 2024. All rights reserved.