【问题标题】:SetActive GameObject to true not working in Unity 5SetActive GameObject 为 true 在 Unity 5 中不起作用
【发布时间】:2017-09-11 23:20:00
【问题描述】:

好吧,我与 unity 5 合作。我正在创建与其他对象交互的对话。当玩家靠近对象时,我按回车键进行交互。

开始的面板对话框被禁用 setActive(false)。

当玩家靠近其他物体并按下回车键和面板 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 ());

        }

    }

【问题讨论】:

  • 它没有显示,因为if (thirdpersoncontroller.transform.position.z &gt; 37.6 &amp;&amp; thirdpersoncontroller.transform.position.z &lt; 38.8) 可能是假的。如果为假,if (Input.GetKeyDown (KeyCode.Return)) { 将无法执行,因此Panel.SetActive(true); 将不会被执行。我建议你使用Debug.Log来验证我刚才所说的。
  • 验证有效,这是真的……这没有问题。问题是当我尝试 setactive(true) 时。

标签: c# unity3d gameobject


【解决方案1】:

有四种可能的原因(有解决办法)

  1. 你的这个条件不成立

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

条件后记录,如果为真且问题依旧存在,则

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

  2. 是否还有其他脚本不会使面板停用?如果它也不正确

  3. 那么,最后的问题是Panel 是非活动游戏对象的子对象。你也可以查看SetActive的Unity文档

请注意,游戏对象可能因为父对象不活动而处于不活动状态。

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

【讨论】:

    【解决方案2】:

    2 个解决方案:

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

    第二个选项: 确保 UI 元素在画布中,面板是否也是画布?使用 UI 你必须使用 .enabled = ,而不是 SetActive

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 2014-08-14
      • 2015-10-25
      • 1970-01-01
      相关资源
      最近更新 更多