【问题标题】:Instantiating in Unity在 Unity 中实例化
【发布时间】:2017-08-04 16:16:47
【问题描述】:

基本上我已经制作了一个非常简单的游戏,它会掉块,我有基本的 C# 知识,但我自己无法真正弄清楚我将如何去做。基本上,我在中间、左侧和右侧放置了 3 个街区,这是你必须避免的。我制作了一个实例化脚本,在 1 到 4 秒内随机在每个生成位置生成它们,但有时它会意外生成所有 3 个!我只需要检查一下左右是否已经生成了 2,然后不要在中间生成一个,反之亦然。你们能帮帮我吗?谢谢!顺便说一句,这是我当前的生成脚本。

     public GameObject spawn;
     private float spawnTime;

     void Start()
     {  
         spawnTime = Random.Range(1, 5);
         Invoke("Spawn", spawnTime); 
     }

     void Spawn()
     {
         spawnTime = Random.Range(1, 5);
         Instantiate(spawn, transform.position, Quaternion.identity);
         Invoke("Spawn", spawnTime);   
     } 

编辑:

using UnityEngine;

公共类 randomSpawner : MonoBehaviour {

public GameObject spawn;
private float spawnTime = 1;


void Start()
{
    if (GameObject.FindGameObjectsWithTag("Cube").Length < 2)
    {
        spawnTime = Random.Range(1, 3);
        Invoke("Spawn", spawnTime);

    }
}


void Spawn()
{
    if (GameObject.FindGameObjectsWithTag("Cube").Length < 2)
    {
        spawnTime = Random.Range(1, 3);
        Instantiate(spawn, transform.position, Quaternion.identity);
        Invoke("Spawn", spawnTime);

    }
}

}

【问题讨论】:

  • 这个脚本是否附加到正在生成的块上?
  • @CNuts 不是,但现在我已经将它应用到每个正在生成的 Cube 上,它会在它们掉落时将它们相互叠加生成哈哈。
  • 我将在自己生成的立方体中添加一个销毁脚本,如果超过 2 个则将其销毁,也许这会解决问题,我会回复。
  • 这确实有效,但我认为你的方法会更好,我弄清楚为什么它不起作用,有一次 Unity 崩溃了,它没有将我的标签保存在我的 Cube 对象上!哈哈哈!但现在实际上它们只生成一次,然后就再也不会生成了。
  • 那是因为您需要在 if 语句之外拨打invoke 的电话,就像我在回答中给出的示例一样。

标签: c# unity3d


【解决方案1】:

你可以在你的块上添加一个标签,比如说Block,然后在实例化之前你做GameObject.FindGameObjectsWithTag("Block");这将返回一个数组,然后你只需验证该数组的长度。

void Spawn()
{
    if(GameObject.FindGameObjectsWithTag("Block").Length < 2){
        Instantiate(spawn, transform.position, Quaternion.identity);
    }
    spawnTime = Random.Range(1, 5);
    Invoke("Spawn", spawnTime);   
} 

您还可以有一个 static 变量,在生成块时递增,在销毁块时递减。

【讨论】:

  • 哇,这比我想象的要简单得多,谢谢你的帮助!
  • 其实我现在遇到了一个错误,它说 GameObject 不包含长度的定义。编辑:我修复了它,这是一个简单的错误,我不熟悉统一 api,犯了我一生中最简单的错误哈哈抱歉打扰,感谢您的帮助!
  • @enyap 你确定你使用的是FindGameObjectsWithTag 而不是FindWithTag
  • 我忘记了我使用 FindGameObjectWithTag 的“s”,但无论如何,这个脚本仍然允许生成超过 2 个,我尝试了一堆不同的变量和比较,由于某种原因它允许 3要生成,但是如果我将其设置为 0 则不允许生成任何内容,这没有任何意义。我不知道发生了什么
  • @enyap 你能编辑你的问题并显示你的脚本在更改后的样子吗?
猜你喜欢
  • 1970-01-01
  • 2016-11-04
  • 2019-08-07
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多