Unity image.enabled = false不起作用

时间:2018-03-24 03:20:32

标签: c# unity3d

我尝试将enabled设置为true,将SetActive(true)设置为显示Gameover图像。但是,它们都不起作用。我声明了一个公共图像gameOverImage,并将Start()中的gameOverImage.enabled设置为false。

enter image description here

private void Start()
{
     gameOverImage.enabled = false;
}

然后在我的一个功能中,我把:

public void killAt(Vector2 loc)
{
    foreach (GameObject obj in setup.GetActive())
    {
        if (obj.GetComponent<PieceInfo>().GetLocation() == loc)
        {
            if (obj.GetComponent<PieceInfo>().GetPieceType() == 'G')
            {
                gameOver = true;
                gameOverImage.enabled = true;
                Debug.Log("?????");
            }
            setup.deactivate(obj);
            break;
        }
    }
}

控制台确实有?????已记录,但游戏视图中未显示gameOverImage。游戏结束了因为我再也无法点击我的游戏了。有任何想法吗?我也试过UI文本。它不起作用。

enter image description here

1 个答案:

答案 0 :(得分:1)

在Unity中,为了激活一个对象,你需要在场景中拥有它。如果场景中不存在GameObject,或者在您的情况下,包含图像的UI元素不在您的场景中SetActive(true) or Enabled = true将不会有任何效果。您需要instantiate该对象。让它存在于你的世界中。

预制件可用于存储可在游戏中多次使用但在场景中不存在的常见配置,这就是您必须实例化它们的原因。

对于您的GameOver Image,您有几个选项,最简单的是:

using UnityEngine;
using UnityEngine.UI;
public class EnableUI : MonoBehaviour {
    public Image GameOverImage;
    // Use this for initialization
    void Start () {
        GameOverImage.gameObject.SetActive(false);
    }

    // Update is called once per frame
    void Update () {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            GameOverImage.gameObject.SetActive(true);
        }
    }
}

如果要实例化它:

using UnityEngine;
public class EnableUI : MonoBehaviour {
    // This is a prefab that is canvas with your game over image nested as a child image UI under it
    public GameObject GameOverObject;
    // Use this for initialization
    void Start () { }

    // Update is called once per frame
    void Update () {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(GameOverObject);
        }
    }
}