Update call for Multiple GUIText fails

I need to create a GUIText everytime a player makes a correct move. Once the GUIText is created I need to move it to the top of the screen (Some what like bubbles). I have been able to create and move the GUIText. But whenever a new GUIText is created the previous ones stop updating and the GUIText doesnt move. I have been struggling to get it working for the past couple of days.

I am calling the initGuiText() inside OnCollisionEnter2d of another gameobject’s script.

Here is a screenshot of how it appears.

35843-guitextissue.png

Is there a better way to implement what I am trying to achieve?

Here is my code :

#pragma strict

public class invokePlusOne extends MonoBehaviour{
var guiTextPrefab : GameObject;
var newGui : GameObject;

function initGuiText(colObj : Color32, pos :Vector3){	

	newGui = GameObject.Instantiate(guiTextPrefab,Vector3(0,0,0),Quaternion.identity);

    newGui.name="guiText"+i;
	newGui.guiText.text = "+1";
	newGui.guiText.color=colObj;
	newGui.guiText.fontSize=Screen.height/20;

             //I do this to create GUIText at 4 different positions.
		 if(pos.x > 0){newGui.guiText.transform.position = Vector3(0.85,0.5,0.0); }
 		if(pos.x < 0){newGui.guiText.transform.position = Vector3(0.15,0.5,0.0); }
 		if(pos.y > 0){newGui.guiText.transform.position = Vector3(0.5,0.75,0.0); }
  	   if(pos.y < 0){newGui.guiText.transform.position = Vector3(0.5,0.25,0.0); }
}

function Update(){
	if(newGui!=null){
	moveUp();
 	}
}

function moveUp(){
 	while(newGui.guiText.pixelOffset.y < 1000){
 		newGui.guiText.pixelOffset.y += 0.5*(Time.deltaTime);
 		yield;
 	}
 }
}

Thanks in advance. :slight_smile:

You need to store a list of all of your created GUITexts and then use a loop to move them all up. I can show you the code in C#.

List<GameObject> newGUIElements = new List<GameObject>();

void initGuiText(Color32 colObj, Vector3 pos){
    // Do your own code here as written
    newGUIElements.Add(newGUI);
}

 void Update(){
     foreach (GameObject oldGUI in newGUIElements){
         moveUp(oldGUI);
     }
 }
 
 void moveUp(GameObject oldGUI){
    oldGui.guiText.pixelOffset.y += 0.5*(Time.deltaTime);
 }

Note you could make this more efficient by storing GUITexts in the list instead of GameObjects

This is not the way I would structure it. I would add a component to each GUIText that moves it up.