【问题标题】:Instantiate UI Image Not working实例化 UI 图像不起作用
【发布时间】:2016-03-07 20:15:25
【问题描述】:

我正在尝试在 unity 5 中实例化 UI 图像以显示玩家的健康状况。我使用 for 循环为玩家剩余的每 10 个生命值生成一个新的生命值块图像。但是,我无法让图像实际显示在屏幕上(它在我设置预制件时有效,但一旦我尝试通过代码实例化它,它就会消失)。代码尚未完成,因为目前我知道所有图像将堆叠在一起而不是连续堆叠(这将是完成的结果),但我想确保我可以让图像实际显示首先,在更进一步之前。任何帮助将不胜感激!

须知: 玩家生命值设置为 100, 每个图标的生命值设置为 10, 我正在使用预制件(仅在我的画布中包含 UI 图像组件的健康状况。

代码:

using UnityEngine.UI;

public class GameController : MonoBehaviour {

    public GameObject player;
    public int playerStartingHealth;

    public Image healthBarGreen;
    public int healthPerIcon;

    void Start () {
        score = 0;
        UpdateScore ();

        AddPlayerHealth (playerStartingHealth / healthPerIcon);

        StartCoroutine (spawnWaves ());
    }

    public void AddPlayerHealth (int n) {
        for (int i =0; i < n; i++) {
            Instantiate(healthBarGreen.gameObject);
        }
    }
}

【问题讨论】:

  • 这是二维的吗?如果是,请尝试查看您的图像生成的方向,它可能会以错误的方式生成(生成时与您的相机成 90 度角),因此不会显示图像! :)
  • 是的,这是 2d。我已经尝试过了,但没有运气,我还尝试过使用空游戏对象的变换位置并将新的健康图标设置为变换位置和旋转,但它仍然不显示:/
  • 试试Instantiate(healthBarGreen); 而不是Instantiate(healthBarGreen.gameObject);
  • 还是不行。似乎根本没有实例化该对象。将游戏退出最大化后,我可以看到它在播放过程中没有出现在场景层次结构中。
  • 嗯。如果它没有实例化,那么我唯一可以建议的是你的 for 循环可能有问题(看起来没有问题)。我建议使用Debug.Log() 调试你的代码,尤其是在那个循环中,以及看看你是否可以在不同的地方或完全不同的对象实例化该对象:)

标签: user-interface unity3d instantiation unity5


【解决方案1】:

有点死灵,但这篇文章在谷歌搜索这个主题上很受欢迎。解决方案:

Image newImage = Instantiate(prefabImage, Vector3.zero, Quaternion.identity);
newImage.transform.SetParent(canvas.transform, false);
newImage.rectTransform.anchoredPosition = Vector3.zero; // your new position here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多