我有一类管理游戏的用户界面。
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
中的精灵已成功加载答案 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返回的对象的位置。