【问题标题】:Simple error in code saying "NullReferenceException" in代码中的简单错误说“NullReferenceException”
【发布时间】:2019-07-28 03:50:06
【问题描述】:

我按照 Brackeys 的“如何制作视频游戏”教程进行了一些更改,但仍然复制了他所做的大部分内容。在我复制了他的碰撞代码后(第 9 集),当我的玩家撞上另一辆车时,我收到了一个错误,提示“Null Reference Exception”。

我尝试在网上查找解决方案并确保我做对了,但是这一切都令人困惑和 idk。

using UnityEngine;

public class ColiisionScript : MonoBehaviour
{

    public forward movement;

    void OnCollisionEnter(UnityEngine.Collision collisionInfo)
    {
        if (collisionInfo.gameObject.tag == "StrangerThings")
        {
            GetComponent<forward>().enabled = false;                         
            FindObjectOfType<GameManager>().EndGame(); 
        }
    }
}

我希望我的游戏在玩家撞到障碍物或另一辆车后几秒钟重新开始,但游戏暂停并告诉我出现错误。

【问题讨论】:

  • GetComponent 和 FindObjectOfType 都可能找不到任何符合其条件的内容。此时您编写了 null.enabled 或 null.EndGame() 虽然 null 是正确的类型,但在不是实例的对象上调用实例函数仍然不是一个非常明智的命令。
  • 这个错误发生在哪一行?以及您采取了哪些步骤来排除故障?你做了研究很酷,但你做了什么调试?你确认你得到空引用的对象确实存在吗?

标签: c# unity3d


【解决方案1】:

将 GetComponent 和 FindObjectOfType 调用分别放入 Forward 和 GameManager 变量中。

forward f = GetComponent<forward>();
GameManager gm = FindObjectOfType<GameManager>();

然后在调用函数之前检查它们是否有值。

if(f != null)
  f.enabled = false;

if(gm != null)
  gm.EndGame();

//or a trick to shorten the code ?

gm?.EndGame();

【讨论】:

    猜你喜欢
    • 2014-08-16
    • 2011-09-21
    • 2017-06-07
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多