如何使用 C# 在运行时在 Unity (2D) 中创建随机游戏对象?

How do I create random game objects at runtime in Unity (2D) using C#?

我是初学者,没有任何 Unity 经验。我一直在阅读教程和观看视频,但似乎找不到我要找的东西。

如何使用每隔几秒更改一次的随机对象创建 3x3 网格?

例如:

Click this to see what the grid looks like and how it should look after a few seconds

从空游戏对象制作一个变换数组并将它们放置在您的平面中(它可以是您从顶部看它的立方体)然后使用 Coroutine 每 X 秒调用一个方法并进行随机化您可以使用 Fisher Yates shuffle 随机化生成点的顺序,然后将它们分配给您的游戏对象

public class game{
     public GameObject[] points;
      public GameObject[] objs;

      void Start()
     {
         StartCoroutine(YourFunctionName());
     }
     IEnumerator YourFunctionName()
     {
         while(true)
         {
             randomPlacer();
             yield return new WaitForSeconds(3);
         }
     }



    void randomPlacer()
    {
       RandomizeArray();
       //assign all  new positions to your objects
    }

    public void RandomizeArray(GameObject[] arr)
    {
        for (var i = arr.length - 1; i > 0; i--) {
            var r = Random.Range(0,i);
            var tmp = arr[i];
            arr[i] = arr[r];
            arr[r] = tmp;
        }
    }
}

1) 创建一个 public 变量并在检查器中将要创建的对象(项目面板中的预制件)分配给它(在将脚本拖到对象上之后) 例如 public GameObject variable_name

2) 对您正在使用的所有不同对象继续执行此操作(如果您有大量对象,我建议您使用列表)

3) 创建一个迭代结构,例如一个 for 循环,每说 2 秒调用一次,它使用随机数生成器(所有方块都在 1 到 9 之间),例如 Random rnd = new Random(); int square_position = rnd.Next(1, 9);

4)使用函数Instantiate()在该位置生成对象 例如 Instantiate(GameObect_variable_name) 并使用变换函数将其移动到正确的位置

为了进一步阅读,我建议:

http://docs.unity3d.com/Manual/CreateDestroyObjects.html http://docs.unity3d.com/ScriptReference/Transform.html