2016-08-15 4 views
0

Ich bin ein Neuling in C# und Unity, aber ich frage mich, ob es möglich ist, einen Text zu instanziieren, so dass sein Inhalt einem String-Array entspricht, das vom Inspektor bearbeitet wurde?Instantiierte Textklone mit unterschiedlichen Eigenschaften?

Was ich meine ist, wie:

Text (Hallo) TextClone1 (Es) TextClone2 (Wie geht's) TextClone3 (Auf Wiedersehen)

Und der Text (Inhalt) direkt vom Inspektor editierbar sein, so dass es am Ende wie mehrere Nachrichten von Facebook aussehen würde, einer unter dem anderen.

Der Code, den ich bisher habe, ist die folgende:

public class Wait : MonoBehaviour { 

    private int i = 0; 
    public string[] message; 
    public float t; 

    [SerializeField] 
    private Text toText; 

    public IEnumerator Message(float waitTime = 2f) 
    { 
     toText.text = message[i]; 
     i++; 
     waitTime = t; 
     yield return new WaitForSeconds(waitTime); 

    } 

    void Start() 
    { 
     StartCoroutine(startMessage()); 
    } 

    IEnumerator startMessage() 
    { 
     yield return StartCoroutine(Message(i)); 
     yield return StartCoroutine(Message(i)); 
     yield return StartCoroutine(Message(i)); 
     yield return StartCoroutine(Message(i)); 
    } 
+0

Ich denke, Sie gut tun. Was ist ein Problem mit dem angegebenen Code? –

+0

Nun, ich möchte das Textobjekt instanziieren, so dass das String-Array wie folgt entspricht: Array [i] = Text [i] – Sciencephile

+0

Und Ihr Code tut dies nicht? –

Antwort

2

diesen Code Versuchen:

public Transform containor; // Assign a UI Object like panel to this variable. This will hold all text objects. 
public Text textPrefab; // save a UI object (with a text component attached) as prefab in project and then assign it to this variable from inspector. 
public string[] array = new string[10]; // can set values from editor/inpector window 

int i = 0; 

IEnumerator Start() 
{ 
    foreach (var item in array) 
    { 
     yield return StartCoroutine(ShowMessage()); 
    } 
} 

IEnumerator ShowMessage() 
{ 
    yield return new WaitForSeconds(i); 
    Text newText = Instantiate<GameObject>(textPrefab.gameObject).GetComponent<Text>(); 
    newText.text = array[i]; 
    newText.transform.SetParent(containor); 
    i++; 
} 
+0

Funktioniert gut! Vielen Dank! Jetzt muss ich herausfinden, wie die Textklone unter den vorherigen erscheinen. – Sciencephile

+0

Verwenden Sie VerticalLayoutGroup: https://docs.unity3d.com/Manual/script-VerticalLayoutGroup.html –

Verwandte Themen