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

时间:2015-10-17 03:02:43

标签: c# unity3d scripting

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

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

例如:

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

2 个答案:

答案 0 :(得分:1)

1)创建一个公共变量并在检查器中将要创建的对象(来自项目面板的预制件)分配给它(在将脚本拖到对象上之后) 例如      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

答案 1 :(得分:0)

从空游戏对象制作一系列变换并将它们放在你的平面上(它可以是你从顶部看它的立方体)然后每隔X秒使用Coroutine调用一个方法,你可以随机化使用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;
        }
    }
}