如何从同一数组中先前实例化的对象上方的数组中实例化对象?

how to instantiate an object from an array above the previously instantiated object from the same array?

我搜索了很多但无法找到解决方案,所以请 help.Basically 我正在尝试做的是,正如您在简化脚本中看到的那样,我已经制作了一个数组(它包含三个项目和一个每个都是其子对象的父项)然后实例化这些项目 randomly.What 我想要的是第一个实例化应该出现在场景中已经存在的对象之上,然后第二个对象应该在前一个实例化对象之上实例化,第三个实例化一个在第二个实例之上,依此类推。现在我想我想要的是一种方法来确定是否实例化(如果这不可能,那么我们可以将实例化放在一个单独的函数中并检查是否发生了但我不知道如何放置这两个检查是否条件 ) 是否发生,这是 if 语句的条件,如果是,那么我需要对发生的最后一个实例化的引用,这样我就可以把它等于 lastRedgeSet。请帮助并建议更好的方法(如果有的话) `

 public GameObject[] RedgeSets;
 private GameObject LastRedgeSet;
 public GameObject FixedRedges;
 private Object myist;
 void Start () {
     LastRedgeSet = FixedRedges;
     }

 void Update () {
     // if(instantiate happened or no Condition here){
     //LatRedgeSet = (refrence to last instantiated object required  here) }
     Vector3 LastRedgeSetPos = LastRedgeSet.transform.position;
     Vector3 addheight = new Vector3 (0, 5, 0);
     if (Input.GetKeyDown (KeyCode.Z)) {
         Instantiate (RedgeSets [UnityEngine.Random.Range (0, 3)], LastRedgeSetPos + addheight, Quaternion.identity);
     }

`

如果您需要获取对最后一个实例化对象的引用,实例化关键字 returns 已创建的对象。您可以将其转换为游戏对象。

它应该看起来像这样:

public class Test: MonoBehaviour
{
    public GameObject[] RedgeSets;
    private GameObject lastInstanceObj;
    bool firstRun = true;

    void Update()
    {
        Vector3 addheight = new Vector3(0, 5, 0);
        if (Input.GetKeyDown(KeyCode.Z))
        {
            if (firstRun)
            {
                lastInstanceObj = Instantiate(RedgeSets[UnityEngine.Random.Range(0, RedgeSets.Length)], addheight, Quaternion.identity) as GameObject;
                firstRun = false;
            }
            else
            {
                lastInstanceObj = Instantiate(RedgeSets[UnityEngine.Random.Range(0, RedgeSets.Length)], lastInstanceObj.transform.position + addheight, Quaternion.identity) as GameObject;
            }
        }
    }
}

不幸的是,您甚至不需要获取引用来增加下一个游戏对象的 y-pos。您可以创建一个每次按 z 键时递增的值。

我不知道 LastRedgeSetFixedRedges 是什么,但下面的内容应该可以完成工作。

public GameObject[] RedgeSets;
private Object myist;

const float incrementAmount = 5;
float currentIncremenet;

void Start()
{
    currentIncremenet = incrementAmount;
}

void Update()
{
    Vector3 addheight = new Vector3(0, currentIncremenet, 0);
    if (Input.GetKeyDown(KeyCode.Z))
    {
        Instantiate(RedgeSets[UnityEngine.Random.Range(0, 3)], addheight, Quaternion.identity);
        currentIncremenet += incrementAmount; //Inrement the next Y axis(Increments by 5)
    }
}

我觉得你需要一个 LinkedList<GameObject>

我不太明白你想检查什么,但不管怎样,也许我讲完链表的工作原理你就会明白了。

首先,你应该用链表替换你的数组:

public LinkedList<GameObject> RedgeSets = new LinkedList<GameObject>();

当你想实例化一个新事物时,调用AddLast:

RedgeSets.AddLast(...);

您可以像这样访问最后实例化的内容:

LastRedgeSet = RedgeSets.Last.Value;

了解有关链表的更多信息here

不太明白你要检查什么。也许您想在实例化新事物时执行一些代码?那么你也许应该看看 events here.

还有一种方法, 1) 你可以使用多维数组A[i][j],i= stores All object & j- stores all by 0 当我们在数组A[i][j]中存储Object时。 然后实例化对象时,在数组 A[i][j] 的那个索引处,将 j 的值从 0 更改为 1.

2) 另一种方法是检查 if( abj==null) {未实例化} 别的 {实例化} 它可能 work.If 它可以回复这个答案。