我在Unity中使用C#。我在数组中有3个不同的GameObject
,我想使用if语句将最后生成/添加的对象添加到列表中:If object 1 spawned then ...
我该如何工作?这是代码:
public GameObject[] arrows;
public float interval = 5;
private List<GameObject> myObjects = new List<GameObject>();
// Use this for initialization
void Start()
{
InvokeRepeating("SpawnArrow", 0f, interval);
}
void SpawnArrow()
{
if (myObjects.Count > 0)
{
Destroy(myObjects.Last());
myObjects.RemoveAt(myObjects.Count - 1);
}
GameObject prefab = arrows[UnityEngine.Random.Range(0, arrows.Length)];
GameObject clone = Instantiate(prefab, new Vector3(0.02F, 2.18F, -1), Quaternion.identity);
myObjects.Add(clone);
}
答案 0 :(得分:2)
首先开始为随后的逻辑(你的if语句)保留随机整数的值:
void SpawnArrow()
{
if (myObjects.Count > 0)
{
Destroy(myObjects.Last());
myObjects.RemoveAt(myObjects.Count - 1);
}
// Here hold up the value to use in your if statement
int randomIndex = UnityEngine.Random.Range(0, arrows.Length);
GameObject prefab = arrows[randomIndex];
GameObject clone = Instantiate(prefab, new Vector3(0.02F, 2.18F, -1), Quaternion.identity);
myObjects.Add(clone);
// your if statement
if ( randomIndex == 1 )
{
// your logic
}
}
答案 1 :(得分:2)
您可能希望使用Stacks。这是一个后进先出数据结构的示例,如果您想要这样做,这听起来很完美:
使用它产生/添加到列表中的最后一个对象
使用堆栈的示例:
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Stack stack = new Stack();
stack.Push("First Item");
stack.Push("Second Item");
Console.WriteLine(stack.Pop());
Console.WriteLine(stack.Pop());
Console.ReadKey();
}
}
}
输出:
Second Item
First Item
注意当项目被添加(推送)到堆栈然后从堆栈中删除(弹出)时,您将首先将最后一项添加到堆栈中。