2015-02-12 6 views
1

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

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

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

+0

Я знаю, что это для Unity3D, но, возможно, это может помочь вам с вашей проблемой: http://stackoverflow.com/questions/24899481/how-to-load-scripts-materials-on-gameobject-in-runtime-in -unity3d/24901026 # 24901026 –

ответ

0

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

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

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 
    } 
} 
+1

Я сам пришел к почти идентичному решению, я сделал список Vector3 (публичный статический список координат = новый список ();) заполнителей и изменил foreach на a, так что я могу читать оба списки с тем же итератором. – wantsToLearnAndroid

0

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

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

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

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

+0

Использование prefabs этот путь для меня довольно чужой вещи. Спасибо за код, я буду тестировать и практиковать с ним :) – wantsToLearnAndroid

+0

Это довольно просто. Вы должны попробовать учебники. Это облегчит вашу жизнь. Удачи! –

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