我正在尝试创建一个Pinata游戏对象,当点击突发并给出可变数量的礼物游戏对象时,其中包含各种图像和行为。
我也不确定这个统一词汇是什么,以便在统一文档中查找。
任何人都可以帮我一把吗?谢谢!
答案 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
希望这会引导你朝着正确的方向前进。