【问题标题】:GameObject doesn't appear after it disappears in UnityGameObject在Unity中消失后不出现
【发布时间】:2018-04-18 02:13:46
【问题描述】:

我是 Unity 和 C# 的初学者。我尝试构建一个基本游戏,当按下一个键时,GameObject 在场景中的存在会被切换。当我按下“空格”时,游戏对象确实消失了,但当我再次按下同一个键时它永远不会出现。以下是代码。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class NewBehaviourScript : MonoBehaviour {
        private GameObject aj;
        private bool flag = true;

        void Start () {
            aj = GameObject.FindGameObjectWithTag("robo");
        }

        void Update () {
            if (Input.GetKey(KeyCode.Space))
            {
                flag = !flag;
                aj.SetActive(flag);
            }
        }
    }

请告诉我错误在哪里。

【问题讨论】:

  • 假设此脚本在游戏对象上,您在停用游戏对象时禁用正在运行的脚本。你应该把这个脚本放在某种管理器上,这样它就不会在游戏对象被禁用时被禁用。
  • 它有效。我创建了一个父游戏对象并将当前游戏对象添加到它。但是我注意到 GameObject 闪烁,并且它并不总是在我按下键后立即消失并出现,关于为什么会发生这种情况的任何建议?
  • 因为您正在检查每一帧要按下的空间,所以它试图每帧翻转它。请改用Input.GetKeyDown(KeyCode.Space))。这只会检查它被推送的第一帧。
  • 它帮助我解决了这个问题。我可以将您的评论作为我发布的问题的答案吗?
  • 我会把它作为答案发布,给我几分钟 :) 编辑:作为答案发布

标签: c# unity3d


【解决方案1】:

将此作为未来观众的答案:

游戏对象没有重新出现的主要原因是当您关闭该对象时,附加到它的脚本也被禁用。为了解决这个问题,您必须在另一个对象上使用脚本来禁用它。我通常使用一个管理器对象,它只是一个带有脚本的空游戏对象。

您的代码中的第二个问题是您在更新中使用if(Input.GetKey(KeyCode.Space)),它将尝试在每一帧中更改它。将其更改为 if(Input.GetKeyDown(KeyCode.Space)) 以使其仅在按下的第一帧时为真。

【讨论】:

    【解决方案2】:

    从第一眼看,代码似乎是正确的,我能弄清楚的唯一问题是你禁用了放置脚本的对象或其父对象,因此脚本不会第二次执行。

    附:我建议您不要使用那个“标志”变量,而是使用 GameObject.activeSelf 属性会更精确。

    【讨论】:

    • 我使用 aj.SetActive(true) 修改了代码。现在可以了。
    猜你喜欢
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2019-09-01
    • 1970-01-01
    • 2017-02-19
    • 2020-03-08
    相关资源
    最近更新 更多