【问题标题】:Change sprite in Prefab在 Prefab 中更改精灵
【发布时间】:2019-03-17 03:21:46
【问题描述】:

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

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,默认情况下,sprite 设置为“tag”(只是一个名称)。

正如您在上面看到的,我从ArrayList 中获取了一个随机精灵并设置了SpriteRenderer 的精灵值。但在屏幕上,精灵仍然是“标签”。

我错过了什么?

注意:

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

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    当您实例化时,您将获得您正在传递的预制件的新副本。

    尝试在 Instantiate 返回的对象上设置精灵,而不是在您正在加载的预制件上。

    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 返回的对象的位置。

    【讨论】:

    • 谢谢。然而,屏幕上显示的游戏对象仍然看起来像“标签”,虽然我看到精灵的值被更改为“标签”以外的不同精灵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多