我的随机化脚本的 Unity 2D 问题

Posted

技术标签:

【中文标题】我的随机化脚本的 Unity 2D 问题【英文标题】:Unity 2D trouble with my randomiser script 【发布时间】:2020-04-29 17:56:36 【问题描述】:

我创建了这个脚本来随机生成我的按钮,但不知道如何更改它们单独生成的时间,因为它们都同时生成。我看不到它们,也没有在层次结构中生成它们。


Public class RandomSpawn: MonoBehaviour 

    public GameObject prefab1, prefab2, prefab3, prefab4, prefab5;

    public float spawnRate = 2f;

    float nextSpawn = 0f;

    int whatToSpawn;

    // Update is called once per frame
    void Update() 

        if (Time.time > nextSpawn)
        
            whatToSpawn = Random.Range(1, 6);

            switch (whatToSpawn)
            
                case 1:
                    Instantiate(prefab1, transform.position, Quaternion.identity);
                    break;
                case 2:
                    Instantiate(prefab2, transform.position, Quaternion.identity);
                    break;
                case 3:
                    Instantiate(prefab3, transform.position, Quaternion.identity);
                    break;
                case 4:
                    Instantiate(prefab4, transform.position, Quaternion.identity);
                    break;
                case 5:
                    Instantiate(prefab5, transform.position, Quaternion.identity);
                    break;
            

            nextSpawn = Time.time + spawnRate;
        

我错过了什么?

【问题讨论】:

我建议为此使用协程,因为文档不建议每帧阅读 Time.time。 太棒了,我现在就研究一下。 _t += Time.time; if(_t > spawnRate) //... _t = 0; 试试这个? Tim Chang,我不确定 '_t' 是什么意思,抱歉...你能详细说明一下吗? 【参考方案1】:

使用Time.deltaTime 值, https://docs.unity3d.com/ScriptReference/Time-deltaTime.html

private float _t = 0;
private SpawnRate = 2;
void Update() 
            _t += Time.deltaTime;
            if (_t > SpawnRate)
            
                whatToSpawn = Random.Range(1, 6);

                switch (whatToSpawn)
                
                    case 1:
                        Instantiate(prefab1, transform.position, Quaternion.identity);
                        break;
                    case 2:
                        Instantiate(prefab2, transform.position, Quaternion.identity);
                        break;
                    case 3:
                        Instantiate(prefab3, transform.position, Quaternion.identity);
                        break;
                    case 4:
                        Instantiate(prefab4, transform.position, Quaternion.identity);
                        break;
                    case 5:
                        Instantiate(prefab5, transform.position, Quaternion.identity);
                        break;
                

                _t = 0;
            

【讨论】:

啊,好吧,我明白了,没有使用正确的,谢谢你的帮助。

以上是关于我的随机化脚本的 Unity 2D 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何为在播放模式下实例化并在 Unity 3d 中使用相机位置重新创建的对象添加视差

Unity2D:在订单中禁用实例化的预制件

实例化移动原始对象

Unity实用插件篇 ✨ | 游戏中的求概率插件WeightedRandomization加权随机化算法

Unity实用插件篇 ✨ | 游戏中的求概率插件WeightedRandomization加权随机化算法

javascript 随机化脚本