Spawn sprite行动

时间:2017-03-09 14:29:48

标签: unity3d instantiation

我正在尝试创建一个Pinata游戏对象,当点击突发并给出可变数量的礼物游戏对象时,其中包含各种图像和行为。

我也不确定这个统一词汇是什么,以便在统一文档中查找。

任何人都可以帮我一把吗?谢谢!

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。 简单的方法是使用Object.Instantiate,Object Instantiation是你所追求的词汇。 这将创建预定义Unity对象的副本,这可以是游戏对象或从UnityEngine.Object派生的任何其他对象,请查看文档以获取更多信息https://docs.unity3d.com/ScriptReference/Object.Instantiate.html

在您的情况下,您的Pinata将有一个预制件阵列或列表。这些预制件由您创建,每个预制件具有特定的行为和精灵。当Pinata爆发时,您可以在Pinata周围的随机位置实例化随机预制件,直至您如何定位这些对象。

这些方面的东西应该可以解决问题:

class Pinata : Monobehaviour 
{
    public GameObject[] pickupPrefabs;         

    public int numberOfItemsToSpawn;     //This can be random      

    //any other variables that influence spawning

    //Other methods 

    public void Burst() 
    {
        for(int i = 0; i < numberOfItemsToSpawn; i++)
        {
             //Length - 1 because the range is inclusive, may return 
             //the length of the array otherwise, and throw exceptions 

             int randomItem = Random.Range(0, pickupPrefabs.Length - 1);

             GameObject pickup = (GameObject)Instantiate(pickupPrefabs[randomItem]);

             pickup.transform.position = transform.position;

             //the position can be randomised, you can also do other cool effects like apply an explosive force or something 


        }
    }
}

请记住,如果你想让游戏保持一致,那么每个行为预制都会有自己的预定义精灵,这不会被随机化。随机化的唯一事情就是产卵和定位。

如果您确实想要为行为随机化精灵,那么您必须将其添加到Pinata类:

       public class Pinata : Monobehaviour
       {
          //An array of all possible sprites
          public Sprite[] objectSprites;

          public void Burst()
          {
              //the stuff I mentioned earlier

             int randomSprite = Random.Range(0, objectSprites.Length - 1); 

             SpriteRenderer renderer = pickup.GetComponent<SpriteRenderer>();
             //Set the sprite of the renderer to a random one
             renderer.sprite = objectSprites[randomSprite];

             float flip = Random.value;

             //not essential, but can make it more random
             if(flip > 0.5)
             {
                  renderer.flipX = true;
             } 
          }
      }

您可以随机使用Unity随机需要https://docs.unity3d.com/ScriptReference/Random.html

希望这会引导你朝着正确的方向前进。