2016-11-16 1 views
0

Aufgrund eines Tag/Nachtzyklus in meinem Spiel muss ich die Farbe einer Rauchvorstufe während der Spielzeit entsprechend der Spielzeit ändern, aber es fällt mir schwer herauszufinden, wie ich sie mehrmals ändern kann.Ändern der Fertigstartfarbe während der Spielzeit

Mein Skript funktioniert gut, um das Prefab mit der Startfarbe, die ich will, zu instanziieren, aber ich bin nicht in der Lage, es danach wieder zu ändern.

Dies ist mein Code:

class Smoke1 : MonoBehaviour 
{ 
    public GameObject myPrefab; 
    public static GameObject newSmoke; 
    public GameObject canvasObject; 

void Start() 
     { 
     GameObject newSmoke = Instantiate(myPrefab, new Vector3(397, -394, 90), Quaternion.Euler(-90, 0, 0)) as GameObject; 
     newSmoke.transform.SetParent(canvasObject.transform, false); 
     newSmoke.transform.localScale = new Vector3(1, 1, 1); 

     newSmoke.GetComponent<ParticleSystem>().startColor = Color.red;   
     } 

    void Update() 
     { 
     if (TimeManager.gametimeDecimal < 6.0m)  
      newSmoke.GetComponent<ParticleSystem>().startColor = Color.blue; 

     if (TimeManager.gametimeDecimal >= 6.0m && TimeManager.gametimeDecimal <= 8.0m) 
      newSmoke.GetComponent<ParticleSystem>().startColor = Color.yellow; 

     if (TimeManager.gametimeDecimal > 8.0m && TimeManager.gametimeDecimal < 19.0m) 
      newSmoke.GetComponent<ParticleSystem>().startColor = Color.green; 
     } 

Und das ist meine Hierarchie: enter image description here

Als ich die Startfarbe der Inspektor beim Spielen Trog es funktioniert manuell ändern, aber ich kann nicht verstehen, wie man um mein Skript dazu zu bringen, es zu tun.

Können Sie mir einen Rat geben?

Danke!

+0

Haben Sie den Wert von 'TimeManager.gametimeDecimal' zurück checked:

So die erste Zeile Ihres Start sollte dies geändert werden? (mit Debug.Log) – Hellium

Antwort

2

Sie haben die Variable 'newSmoke' erneut in Ihrer Startmethode definiert. Wenn Sie also ein Objekt instanziieren, wird es nicht in die statische Variable, sondern in eine lokale Variable mit dem gleichen Namen eingefügt.

newSmoke = Instantiate(myPrefab, new Vector3(397, -394, 90), Quaternion.Euler(-90, 0, 0)) as GameObject; 
Verwandte Themen