Unity: получить позицию последнего клонированного экземпляра объекта

Я пытаюсь создать бесконечную землю для Android с помощью Unity. Попытка использовать пул объектов для достижения повторения земли, но это оказывается немного сложно. Я могу заставить свою землю создавать экземпляры и создавать клоны по оси X.

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

Нужно ли мне работать с родителем преобразования? Правильно ли я отношусь к этому?

Код ниже.

public class InfiniteGround : MonoBehaviour
{
    public Transform ground1Obj;
    private int count;
    private Vector3 lastPosition;
   
    void Start()
    {
        count = 0;
        for (int i = 0; i < 10; i++)
        {
            Instantiate(ground1Obj, new Vector3(i * 100f, 0, 0), Quaternion.identity);
            count++;
            if (count == 10)
            {
                lastPosition = ground1Obj.position;
                Debug.Log("Last Position: " + lastPosition);
            }
                
        }

    }
}

person Oran C    schedule 24.06.2020    source источник


Ответы (2)


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

  • Если игрок движется вперед, создайте новую землю перед ним и уничтожьте старую землю позади него.
  • Если игрок движется назад, создайте новую землю позади него и уничтожьте старую землю перед ним.

Если вы хотите изменить свой код. Я бы:

  1. Например, измените имя функции (InstantiateFloor), потому что вы хотите вызывать ее более одного раза в начале
  2. Вызов функции в зависимости от позиции игрока (как описано выше)
  3. Просто создайте 1 большую часть пола (вместо 10 меньших) и займите позицию этой
person MathewHD    schedule 24.06.2020
comment
От 0 до 9 есть 10 итераций, поэтому он должен войти в if stament :) - person Delunado; 24.06.2020
comment
Да, поймите это сейчас, извините, мб, соответственно отредактировал мой ответ, надеюсь, теперь это поможет: D - person MathewHD; 24.06.2020
comment
Самый простой ответ часто лучший ответ, спасибо. Я слишком усложняю то, как я это кодирую. 10 было просто жестко запрограммированным числом для тестирования. Гигантские куски земли встанут на место :) - person Oran C; 25.06.2020

Почему бы не использовать Gameobject, возвращаемый экземпляром?

GameObject newObject = Instantiate(ground1Obj, new Vector3(i * 100f, 0, 0), Quaternion.identity);
count++;

if (count == 10)
    {
        lastPosition = newObject .position;
        Debug.Log("Last Position: " + lastPosition);
    }
person Hagi    schedule 24.06.2020