2016-08-21 1 views
0

Я много искал, но не смог найти решение, поэтому, пожалуйста, помогите. В целом, что я пытаюсь сделать, так это то, как вы можете видеть в упрощенном скрипте, который я создал массив (у него есть три элемента, каждый из которых является родителем его дочерние объекты), а затем случайным образом создавая экземпляры этих элементов. Что я хочу, так это то, что первый экземпляр должен произойти над объектом, уже находящимся в сцене, но затем второй объект должен создавать экземпляр над предыдущим экземпляром объекта, а третий - вторым экземпляром, и поэтому на. Теперь, что я думаю, я хочу, чтобы определить, если экземпляр (, если это невозможно, мы можем поставить экземпляр в отдельной функции и проверить, произошло это или нет, но я не понимаю, как поставить одну из этих двух проверок если условие) произошло или нет, то есть условие для оператора 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); 
    } 

`

ответ

0

Если вам необходимо получить ссылку на последний реализованным объект, Instantiate keyworked возвращает объект, который был создан. Вы можете передать его в GameObject.

Это должно выглядеть примерно так:

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; 
      } 
     } 
    } 
} 

К сожалению, вы не должны даже получить ссылку, чтобы увеличить у-поз следующего GameObject. Вы можете создать значение, которое вы увеличиваете каждый раз при нажатии клавиши z.

Я понятия не имею, что LastRedgeSet и FixedRedges являются лишь чем-то нижним, должны делать работу.

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) 
    } 
} 
+0

спасибо большое за ваше решение, я попробовал его, и он работает хорошо, но проблема проблема ... Поскольку объекты в массиве имеют разную длину, поэтому объект создается друг на друга, но высота увеличивается ... чтобы встретить эта проблема, я хотел бы создать объект выше ранее созданного объекта для того, что я использовал переменную lastredgeset redgeset, на самом деле является именем объектов ... Используя ваше первое решение, вы получаете ошибку, которая не может преобразовать объект в gameobject PLZ help немного больше – Momin

+0

@Momin ** «Поскольку объекты в массиве имеют разную длину, поэтому объект создается друг на друга, но высота увеличивается **« Теперь я полностью понимаю проблему. Исправлена ​​проблема. Используйте первый код в моем ответе. Я тестировал его, и он работает. Если ваша проблема решена, не забудьте принять ответ. Кроме того, я исправил некоторые другие проблемы. При использовании массива не переустанавливайте его. Это не должно быть «Random.Range (0, 3)]». Это должно быть «Random.Range (0, RedgeSets.Length)]». – Programmer

+1

спасибо, что ответили еще раз, к счастью, я получил еще одно решение до вашего ответа, но это тоже будет работать, и я буду использовать его ... примет как ответ :) – Momin

0

Я чувствую, что вам нужен LinkedList<GameObject>.

Я действительно не понимаю, что вы хотите проверить, но что бы вы ни делали, может быть, вы поймете все это после того, как я расскажу о том, как работают связанные списки.

Во-первых, вы должны заменить массив со связанным списком:

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

Если вы хотите создать экземпляр новую вещь, звоните AddLast:

RedgeSets.AddLast(...); 

Вы можете получить доступ к последним, что вы инстанцированный например:

LastRedgeSet = RedgeSets.Last.Value; 

Подробнее о связанных списках here.

Я действительно не понимаю, что вы хотите проверить. Может быть, вы хотите выполнить какой-то код всякий раз, когда создается новая вещь? Тогда вам стоит заглянуть в событияhere.

+0

спасибо за ваше предложение ... к счастью, я нашел отличный способ, который отлично работает с маленькими изменения в моем коде – Momin

0

Существует еще один способ, 1) Вы можете использовать многомерный массив A [я] [J], я = магазины Всех объектов & J- хранит все от 0, когда хранения объекта в массиве A [я] [J] , , когда вы создаете экземпляр объекта, тогда в этом индексе массива A [i] [j] измените значение j 0 на 1.

2) другой способ проверить, если (ABJ == NULL) { не инстанциирован} еще {инстанциирован} Это может работы.Если работает ответ на этот ответ.

+0

спасибо за ответ. К сожалению, я нашел другой способ, который работает идеально с небольшими изменениями – Momin

Смежные вопросы