Lou*_*ong 1 .net c# mono unity-game-engine
在 Unity 中,NullReferenceException 仅记录错误,不会将 IDE 踢入调试模式。有时,游戏很难重现 100% 发生错误的相同环境。
组件变量通过unity编辑器序列化暴露出来,设计者经常忘记赋值,导致组件的成员变量为NULL的情况。
由于 Unity 的特殊情况,NullReferenceException 是最常见的异常,我正在尝试探索如何让异常立即变得更加明显。
NullReferenceException 消息非常没有帮助。对我来说,当我看到 NullReferenceException 时,我什至不知道哪个变量是 NULL。
player.GetComponent<Movement>().AnothingVariable.CallFunction() // NullReferenceException, which part caused it?
Run Code Online (Sandbox Code Playgroud)
当前错误消息:
NullReferenceException: Object reference not set to an instance of an object
Run Code Online (Sandbox Code Playgroud)
理想的错误消息:
NullReferenceException: Trying to access CallFunction in type Movement, in GameObject "Player" from component "Controller".
Run Code Online (Sandbox Code Playgroud)
如果异常没有帮助,通常意味着一行中有太多命令。一个简单的解决方案是将代码拆分为更多行,使用临时变量来存储每个成员调用(函数、属性或字段)的结果。
这可能不会造成性能损失。编译器和 JiT 编译器应该能够注意到这些变量很大程度上“无用”,并在发布版本期间将其删除。您可以获得更好的可读性和可调试性的代码,几乎没有任何损失。