【问题标题】:Activating and deactivating game objects in unity统一激活和停用游戏对象
【发布时间】:2017-05-20 17:43:09
【问题描述】:

因此,您将在下面找到一段简短的 sn-p 代码。这段代码的作用是它允许玩家按下“p”键来暂停游戏,当这种情况发生时,一个 gui 会弹出,玩家的外观和移动控制被禁用。我的问题是停用和重新激活 gui,因为它是一个游戏对象。它可以让我停用它,但是当我尝试激活它时,我得到一个错误。

代码:

    UnityEngine.Component walkScriptOld = GameObject.FindWithTag ("Player").GetComponent ("CharacterMotor");
    UnityEngine.Behaviour walkScript = (UnityEngine.Behaviour)walkScriptOld;
    UnityEngine.GameObject guiMenu = GameObject.FindWithTag ("Canvas");
    if ((Input.GetKey ("p")) && (stoppedMovement == true)) {
        stoppedMovement = false;
        walkScript.enabled = true;
        guiMenu.SetActive(true);
    } else if ((Input.GetKey ("p")) && (stoppedMovement == false)) {
        stoppedMovement = true;
        walkScript.enabled = false;
        guiMenu.SetActive(false);
    }

错误:

NullReferenceException: Object reference not set to an instance of an object MouseLook.Update () (at Assets/Standard Assets/Character Controllers/Sources/Scripts/MouseLook.cs:44)

【问题讨论】:

  • 看起来停用正在破坏实例guiMenu。您应该检查当您将属性 SetActive 设置为 false 时是否会发生这种情况。
  • @Verhaeren 我查了一下,它说的是当你关闭游戏对象时,它会关闭所有对象脚本,并且不再调用更新。它说您可以激活和停用游戏对象,但如何?
  • 我现在能做的最好的事情就是支持您的问题,以便其他愿意提供帮助的人更容易看到它。现在我不知道。
  • 我只是关闭了控制 gui 是否可见的画布组件
  • 很高兴为您工作!

标签: c# unity3d


【解决方案1】:

您在此处提供的代码似乎在更新中。所以每帧都会找到并存储 guiMenu 对象。

您要做的是将对象缓存在 Awake 或 Start 函数中,其余代码将正常工作。另请注意,缓存始终是一种很好的做法。

    //This is the Awake () function, part of the Monobehaviour class
    //You can put this in Start () also
    UnityEngine.GameObject guiMenu;  
    void Awake () {
        guiMenu = GameObject.FindWithTag ("Canvas");
    }

    // Same as your code
    void Update () {
        if ((Input.GetKey ("p")) && (stoppedMovement == true)) {
            stoppedMovement = false;
            walkScript.enabled = true;
            guiMenu.SetActive(true);
        } else if ((Input.GetKey ("p")) && (stoppedMovement == false)) {
            stoppedMovement = true;
            walkScript.enabled = false;
            guiMenu.SetActive(false);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    相关资源
    最近更新 更多