Search code examples
c#unity-game-enginegameobjectunity3d-2dtools

adding GameObject at runtime


This may seem like a stupid question but I'm stuck with it. I have GameObjects in a list (List<GameObject>) and I want to add them on the scene runtime, prefarbly on predefined places (like placeholders or something). What would be a good way to do it? I've been searching the net but can't really find anything that would solve this. This is my code so far:

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){}
            }
        }
}

How can I place the pics (5) on the predefined spots?

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

EDIT: Now I can place 1 image to a placeholder (transparent png). For some reason z-value goes all over the place so it needs to be forced to -1f but that's OK. I add the images to the list from other scenes and there can be 1-5 of them. Do I need to put the placeholders in another list or array? I'm a bit lost here.


Solution

  • I don't really understand what you're trying to do, but if I'm correct and you have a list of objects, and you know where you want to move them at runtime, just make two lists, one containing the objects and one containing transforms of empty game-objects in the scene placed at those predefined positions, and match them at runtime.

    Populate both lists from the inspector.

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