将 Active GameObject 设置为 true 在 Unity 5 中不起作用

SetActive GameObject to true not working in Unity 5

好吧,我使用 unity 5。我正在创建对话以与其他对象交互。当玩家靠近物体时,我按 return 键进行交互。

启动面板对话框已禁用 setActive(false)。

当玩家靠近其他物体并按下return键和面板setActive(true)时,方法更新,但此面板未启用,我不知道为什么。请帮助。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

[RequireComponent(typeof(Text))]
public class Dialogue : MonoBehaviour
{   

    private Text _textComponent;

    public string[] DialogueStrings;

    public float SecondsBetweenCharacters = 0.15f;
    public float CharacterRateMultiplier = 0.5f;

    public KeyCode DialogueInput = KeyCode.Return;

    private bool _isStringBeingRevealed = false;
    private bool _isDialoguePlaying = false;
    private bool _isEndOfDialogue = false;

    public GameObject ContinueIcon;
    public GameObject StopIcon;
    public GameObject Panel;


    //Vector3 ThirdPersonController = GameObject.Find("ThirdPersonController").transform.position;
    public GameObject thirdpersoncontroller;



    // Use this for initialization
    void Start ()
    {
        _textComponent = GetComponent<Text>();
        _textComponent.text = "";
        Panel.SetActive(false);
        HideIcons();




    }

    // Update is called once per frame
    void Update () 
    {


        if (thirdpersoncontroller.transform.position.z > 37.6 && thirdpersoncontroller.transform.position.z < 38.8) {

            if (Input.GetKeyDown (KeyCode.Return)) {

                Panel.SetActive(true);

                if (!_isDialoguePlaying) {

                    _isDialoguePlaying = true;
                    StartCoroutine (StartDialogue ());

        }

    }

可能有四种原因(附解决方法)

  1. 您的条件不成立

    thirdpersoncontroller.transform.position.z > 37.6 && thirdpersoncontroller.transform.position.z < 38.8

条件后记录,如果为真且问题仍然存在,

  1. 检查您的函数 (StartDialogue ()) 是否突然停用您的面板。 (如果也不是这样的话)

  2. 是否有任何其他脚本不会使面板停用?如果它也不是真的

  3. 那么,最后的问题是 Panel 是未激活的 GameObject 的子对象。您还可以查看 SetActive

  4. 的 Unity 文档

Note that a GameObject may be inactive because a parent is not active.

注意:此类问题是基于调试的(这就是为什么我以调试的方式回答你)我强烈建议你学习调试技巧,以便成为一名成功的程序员。

2 个解决方案:

您是否将此脚本放入 UI / GameObject 本身?对我来说有时它不起作用,因为它会自行禁用,脚本的 none 将起作用(即使您尝试将其设置为 active 回到 true)

第二个选项: 确保 UI 元素在 canvas 中,还有面板是 canvas 吗?使用 UI 你必须使用 .enabled = ,而不是 SetActive

希望对您有所帮助:)