2017-08-21 4 views
0

Ich habe eine Frage darüber, wie man Spirte Bilder während der Laufzeit für eine Reihe von Objekten ändern.Unity3d Sprite Änderung mit Prefabs

Also habe ich ein kleines Racer 2d Spiel gemacht, und deshalb können Sie verschiedene Themen wählen. Sie haben diese Option in einem integrierten Menü (keine separate Szene).

Meine Frage: Kann ich die Sprites während der Laufzeit einfach wechseln? Ich habe Prefabs für jedes Track-Element gemacht - und ich habe die Sprites dieser Prefabs geändert, aber die Änderung wird erst sichtbar, nachdem die Szene neu geladen wurde. Also würde ich das vermeiden müssen.

Hat jemand eine Lösung oder einen Hinweis, wie ich das tun könnte?

Vielen Dank im Voraus!

Code:

public class Background_Controller : MonoBehaviour { 
public Camera mainCamera; 
public Color colorNormal; 

public GameObject[] Prefabs; 

public Sprite[] normalSprites; 
public Sprite[] tronSprites; 

// Use this for initialization 
void Awake() { 

    SwitchBackgroundFunction(); 

} 


public void SwitchBackground(string Theme) 
{ 

    switch(Theme) 
    { 

     case "GreenHell": 
      PlayerPrefs.SetString("Theme", "Normal"); 

      break; 

     case "NeonCity": 
      PlayerPrefs.SetString("Theme", "Tron"); 

      break; 

    } 

    SwitchBackgroundFunction(); 

} 

private void SwitchBackgroundFunction() 
{ 
    int prefabCount = Prefabs.Length; 

    if (PlayerPrefs.GetString("Theme") == "Normal") 
    { 
     mainCamera.backgroundColor = colorNormal; 

     for (int i = 0; i <= prefabCount - 1; i++) 
     { 
      Prefabs[i].GetComponent<SpriteRenderer>().sprite = normalSprites[i]; 
     } 
    } 
    if (PlayerPrefs.GetString("Theme") == "Tron") 
    { 
     mainCamera.backgroundColor = Color.black; 

     for (int i = 0; i <= prefabCount - 1; i++) 
     { 
      Prefabs[i].GetComponent<SpriteRenderer>().sprite = tronSprites[i]; 
     } 
    } 

} 


// Update is called once per frame 
void Update() { 

} 

}

+0

Hallo, du musst deinen Code posten, damit die Leute nicht etwas posten, das du ausprobiert hast. Bearbeiten Sie Ihre Frage, fügen Sie das Sprachtag und dann den Code hinzu, den Sie verwenden, um den Sprite zu ändern. – Programmer

+0

Ich füllte einfach die vorgefertigten Objekte in das GameObject Prefabs Array, auch die verschiedenen Sprites meines Themes Sprite Sheets in normalSprites/tronSprites Array. Und weil ich so viele Objekte in meiner Szene platziert habe (Kacheln mit einer Menge an Assets, die geändert werden müssten), würde ich die Sprites der Prefabs ändern, die Objekte sind darauf ausgerichtet, alle auf einmal zu ändern. – IDK

Antwort

0

Sie können entlang der folgenden Zeilen etwas tun aus Ihrer Ressourcen-Ordner während der Laufzeit in einem Sprite zu tauschen.

Sprite spr; 
spr = Resources.Load<Sprite>("mysprite"); //insert name and file path to sprite within Resources folder 
GetComponent<SpriteRenderer>().sprite = spr;