2017-08-21 3 views
0

J'ai une question sur la façon de changer les images spirale pendant l'exécution pour un tas d'objets.Unity3d Sprite change avec des préfabriqués

Donc j'ai fait un petit jeu de course 2d, et donc vous pouvez choisir différents thèmes. Vous avez cette option dans un menu intégré (pas une scène séparée).

Ma question: Puis-je changer les sprites facilement pendant l'exécution? J'ai fait des préfabriqués pour chaque élément de piste - et j'ai changé les sprites de ces préfabriqués, mais le changement n'est visible qu'après le rechargement de la scène. Donc, je devrais éviter cela.

Est-ce que quelqu'un a une solution ou un indice comment je pourrais faire cela?

Merci d'avance!

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

Salut, vous devez poster votre code afin que les gens ne publieront pas quelque chose que vous avez essayé. Modifiez votre question, ajoutez la balise de langue, puis le code que vous utilisez pour modifier le Sprite. – Programmer

+0

J'ai simplement rempli les objets préfabriqués dans le tableau GameObject Prefabs, ainsi que les sprites différend de ma feuille de sprites Themes dans le tableau normalSprites/tronSprites. Et parce que j'ai tellement d'objets placés dans ma scène (tuiles avec un tas d'éléments qui devraient être changés) que je voudrais changer les sprites des préfabriqués, les objets dépendent de changer tout à la fois. – IDK

Répondre

0

Vous pouvez faire quelque chose le long des lignes suivantes pour échanger dans un sprite à partir de votre dossier de ressources lors de l'exécution.

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