使用预制件更改Unity3d Sprite

时间:2017-08-21 17:21:49

标签: unity3d themes 2d sprite switching

我有一个关于如何在运行时为一堆对象更改spirte图像的问题。

所以我做了一个小型赛车2d游戏,因此你可以选择不同的主题。您可以在集成菜单中使用此选项(不是单独的场景)。

我的问题: 我可以在运行时轻松切换精灵吗?我为每个轨道元素制作了预制件 - 我更改了这些预制件的精灵,但是在重新加载场景后,更改才会显示。所以我需要避免这种情况。

有人有解决方案或暗示我怎么能这样做?

提前致谢!

代码:

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 () {

}

}

1 个答案:

答案 0 :(得分:0)

您可以在以下几行中执行某些操作,以便在运行时从资源文件夹中交换精灵。

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