在Prefab中更改精灵

时间:2014-04-22 07:23:55

标签: c# unity3d

我有一类管理游戏的用户界面。

public class GameManager : MonoBehaviour {
    ArrayList sprites;
    // Use this for initialization
    void Start () {
        sprites = new ArrayList();
        sprites.Add(Resources.Load("bettle", typeof(Sprite)));
        sprites.Add(Resources.Load("donut", typeof(Sprite)));
        sprites.Add(Resources.Load("icecream", typeof(Sprite)));
        sprites.Add(Resources.Load("letter", typeof(Sprite)));
        sprites.Add(Resources.Load("paper", typeof(Sprite)));
        sprites.Add(Resources.Load("papercup", typeof(Sprite)));
        sprites.Add(Resources.Load("puzzle", typeof(Sprite)));
        sprites.Add(Resources.Load("sock", typeof(Sprite)));
        sprites.Add(Resources.Load("tag", typeof(Sprite)));
        sprites.Add(Resources.Load("underwear", typeof(Sprite)));

        for(int x = 0; x < 5; x++) {
            for(int y = 0; y < 5; y++) {
                GameObject go = Resources.Load("ItemPrefab") as GameObject;
                go.GetComponent<SpriteRenderer>().sprite = sprites[Random.Range(0, sprites.Count)] as Sprite;
                float fx = -2 + 1f * x;
                float fy = -2 + 1f * y;
                go.transform.position = new Vector3(fx, fy, 0);

                Instantiate(go);
            }
        }
    }
}

我使用上面的代码在屏幕上多次实例化Prefab。预制件包含SpriteRenderer,默认情况下,精灵设置为&#34;标签&#34; (只是一个名字)。

如上所示,我从ArrayList获得了一个随机精灵,并设置了SpriteRenderer的精灵值。但是在屏幕上,精灵仍然是&#34;标记&#34;。

我错过了什么?

注意:

  • ArrayList中的精灵已成功加载
  • 在运行时/编译时没有显示错误

1 个答案:

答案 0 :(得分:1)

当你实例化时,你会得到一份你正在通过的预制件的新副本。

尝试在实例化返回的对象上设置精灵,而不是在预装重新加载。

for(int x = 0; x < 5; x++) {
   for(int y = 0; y < 5; y++) {
        GameObject go = Resources.Load("ItemPrefab") as GameObject;

        go = Instantiate(go) as GameObject;

        go.GetComponent<SpriteRenderer>().sprite = sprites[Random.Range(0, sprites.Count)] as Sprite;
        float fx = -2 + 1f * x;
        float fy = -2 + 1f * y;
        go.transform.position = new Vector3(fx, fy, 0);
    }
}

我所做的是改变Instantiate返回的对象的位置。