如何以编程方式将随机精灵分配给游戏对象?

时间:2014-11-10 21:09:03

标签: unity3d 2d sprite unityscript

我有一个每100帧在屏幕上生成游戏对象的功能:

 var trash : Transform ;
 function Update()
 {
      if(count == 1)
      {
         Instantiate(trash,new Vector3(UnityEngine.Random.Range(-3f,3f),UnityEngine.Random.Range(-3f,3f),UnityEngine.Random.Range(-3f,3f)), Quaternion.identity);
      }

     else if(count == 100)
     {
         count = 0;
     }
 }

现在,我希望每个生成的对象都从我的资产中选择一个随机精灵。我想过制作一个精灵数组并从那里挑选,但我不知道该怎么做或者如何将精灵分配给对象。

Anu帮助将非常感谢!

2 个答案:

答案 0 :(得分:0)

好吧,你可以用你自己选择的长度生成一系列精灵:     Sprite [] _sprites = new Sprite [需要的数量]

然后使用resources文件夹和Resources.Load方法(在此处找到:http://docs.unity3d.com/ScriptReference/Resources.Load.html),您可以将所有精灵一个接一个地加载到数组中。然后使用随机数生成器,您可以随机访问精灵。

仍然可能不是最好的方法,但我认为它比预制方法更好,更容易维护,但不同的情况需要不同的方法。

答案 1 :(得分:0)

我知道已经晚了,但是我只是为自己做的,所以我要分享。


基本上-将您的资产放在一个文件夹中,然后从它们中随机选择以分配给您要复制的对象。

  1. Resources下创建一个Assets文件夹。
  2. Resources下为您的相关sprite资产创建另一个子文件夹,将其命名为CookiesImages
  3. 创建您的预制对象,并将其定位在Assets/Prefabs/Resources下(这是您要使用不同资产多次复制的对象)。
  4. 为此预制对象创建脚本。
  5. 创建一个静态Object数组(将容纳精灵)。
  6. 在您的Awake()方法中,通过从资产文件夹中加载所有资源来初始化此Object数组:

    if (objectsArray == null)
    {
        objectsArray= Resources.LoadAll("CookiesImages", typeof(Sprite));
    }
    
  7. Start()方法中,获取随机索引0 --> objectsArray.Length并调用Instantiate创建一个精灵,以将其分配给您的预制对象。

    this.GetComponent<SpriteRenderer>().sprite = Instantiate(objectsArray[index]) as Sprite;
    

一开始,我尝试将其分配给统一UI中的数组变量,但是我意识到,以我描述的方式,它更加灵活。