使用最后添加的GameObject到数组/列表

时间:2017-04-12 14:46:07

标签: c# arrays list unity3d

我在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);
}

2 个答案:

答案 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

注意当项目被添加(推送)到堆栈然后从堆栈中删除(弹出)时,您将首先将最后一项添加到堆栈中。

A useful link on how to use stacks