语境
在Unity中,NullReferenceException仅记录错误,不会将IDE踢入调试模式。对于游戏而言,有时很难为漏洞在100%的时间内重新创建相同的环境。
组件变量被序列化并通过统一编辑器公开,设计人员经常忘记分配值,从而导致组件的成员变量为NULL的情况。
由于Unity的特殊情况,NullReferenceException是最常见的异常,我正在尝试探索使异常立即显现的方法。
题
NullReferenceException消息超级无用。对我来说,当我看到NullReferenceException时,我什至不知道哪个变量为NULL。
player.GetComponent<Movement>().AnothingVariable.CallFunction() // NullReferenceException, which part caused it?
当前错误消息:
NullReferenceException: Object reference not set to an instance of an object
理想错误消息:
NullReferenceException: Trying to access CallFunction in type Movement, in GameObject "Player" from component "Controller".
最佳答案
如果异常没有帮助,那通常意味着一行中有太多命令。一个简单的解决方案是使用临时变量存储每个成员调用(函数,属性或字段)的结果,将代码分成更多行。
那可能不会造成性能损失。编译器和JiT编译器应该能够注意到这些变量在很大程度上是“无用的”,并在发行版本期间将其删除。您可以获得更好的可读性和可调试代码,几乎没有惩罚。
关于c# - 如何重写NullReferenceException行为以获得更好的信息错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48044565/