добавление GameObject во время выполнения

Это может показаться глупым вопросом, но я застрял с ним. У меня есть GameObjects в списке (List<GameObject>), и я хочу добавить их во время выполнения сцены, предварительно в заранее определенные места (например, заполнители или что-то в этом роде). Что было бы хорошим способом сделать это? Я искал в сети, но не могу найти ничего, что могло бы решить эту проблему. Это мой код до сих пор:

public static List<GameObject> imglist = new List<GameObject>();
private Vector3 newposition;
public static GameObject firstGO;
public GameObject frame1;//added line

void Start (){
newposition = transform.position;
firstGO = GameObject.Find ("pic1");
frame1 = GameObject.Find ("Placeholder1");//added line

//this happens when a button is pressed
imglist.Add(firstGO);
foreach(GameObject gos in imglist ){
            if(gos != null){
                print("List: " + gos.name);
                try{
                    //Vector3 temp = new Vector3 (0f, 0f, -5f);
                    Vector3 temp = new Vector3( frame1.transform.position.x, frame1.transform.position.y, -1f);//added line
                    newposition = temp;
                    gos.transform.position += newposition;
                    print ("position: " + gos.transform.position);
                }catch(System.NullReferenceException e){}
            }
        }
}

Как я могу разместить фотографии (5) на предопределенных местах?

//----------------

РЕДАКТИРОВАТЬ: теперь я могу поместить 1 изображение в заполнитель (прозрачный png). По какой-то причине z-значение идет повсюду, поэтому его нужно принудительно установить на -1f, но это нормально. Я добавляю в список изображения из других сцен и их может быть 1-5 штук. Нужно ли помещать заполнители в другой список или массив? Я немного потерялся здесь.


person wantsToLearnAndroid    schedule 12.02.2015    source источник
comment
Я знаю, что это для Unity3D, но, возможно, это поможет вам решить вашу проблему: stackoverflow.com/questions/24899481/   -  person Nahuel Ianni    schedule 12.02.2015


Ответы (3)


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

Заполните оба списка из инспектора.

public List<GameObject> imglist = new List<GameObject>();
public List<Transform> imgPositions = new List<Transform>();


void Start()
{
    for(var i = 0 i < imglist.Count; ++i)
    {
        imglist[i].transform.position = imgPositions[i].position
    }
}
person Miron Alex    schedule 13.02.2015
comment
Я сам пришел к почти идентичному решению, я сделал список Vector3 (общедоступные статические координаты List‹Vector3› = новый список‹Vector3›();) заполнителей и изменил foreach на for, чтобы я мог читать оба списка с помощью тот же итератор. - person wantsToLearnAndroid; 15.02.2015

Если вы уже создали 5 новых объектов, вы можете просто сделать то же, что и здесь: http://unity3d.com/learn/tutorials/modules/beginner/scripting/invoke в InvokeScript

foreach(GameObject gos in imglist)
{
    Instantiate(gos, new Vector3(0, 2, 0), Quaternion.identity);
}
person Thomas Lindvall    schedule 12.02.2015

В общем, лучший способ - создать префабы для ваших объектов, передав их в качестве параметра и создав экземпляр при необходимости (Начать в вашем случае). Это распространенный случай, но, возможно, у вас немного по-другому.

Это пример передачи массива префабов и создания одного объекта для каждого в массиве:

public GameObject prefabs[];
List<GameObject> objects = new List<GameObject>();

void Start() {
    for(GameObject prefab in prefabs) {
        GameObject go = Instantiate(prefab, Vector3.zero, Quaternion.identity) as GameObject; // Replace Vector3.zero by actual position

        objects.Add(go); // Store objects to access them later: total enemies count, restart game, etc.
    }
}

Если вам нужно несколько экземпляров для одного и того же префаба (например, несколько врагов или предметов), просто адаптируйте код выше.

person Juanjo Vega    schedule 13.02.2015
comment
Использование префабов таким образом мне пока чуждо. Спасибо за код, я буду тестировать и практиковаться с ним :) - person wantsToLearnAndroid; 15.02.2015
comment
Это довольно просто. Вы должны попробовать учебники. Это сделает вашу жизнь проще. Удачи! - person Juanjo Vega; 15.02.2015