Unity C#调用AddForce报空引用错误 悬浮车无法正常悬浮
错误原因
你遇到的NullReferenceException是因为代码中声明的私有NiceCar(也就是Rigidbody的别名)类型变量carMain没有被初始化赋值,运行时处于空引用状态,调用AddForce方法时就会触发空引用异常。
修复方案
你可以选择以下任意一种方式给carMain赋值:
- 方式一:自动挂载获取当前物体的Rigidbody组件
在Awake或者Start生命周期方法中添加获取组件的逻辑,代码如下:
注意要先给你的悬浮车物体挂载void Awake() { // 尝试从当前挂载脚本的物体上获取Rigidbody组件 carMain = GetComponent<NiceCar>(); // 可以加个校验,没有组件的时候主动抛出明确提示,方便排查 if(carMain == null) { Debug.LogError("当前物体没有挂载Rigidbody组件,请检查!", gameObject); } }Rigidbody组件,否则还是会取不到值。 - 方式二:把
carMain改成public变量,在Inspector面板手动拖拽赋值
把原来的private NiceCar carMain;改成public NiceCar carMain;,回到Unity编辑器,选中挂载了HoverMotor脚本的物体,把带Rigidbody的车物体拖到Inspector面板对应carMain的参数槽即可。
额外优化建议
- 你代码里用到了别名
using NiceCar = UnityEngine.Rigidbody;,如果团队没有特殊要求的话,直接用Rigidbody写可读性会更高,也方便后续其他开发者理解代码。 - 调用
carMain.AddForce之前可以加一层非空判断,避免极端情况还是触发空引用:if(carMain != null) { carMain.AddForce(appliedHoverForce, ForceMode.Acceleration); }
内容的提问来源于stack exchange,提问作者Breadzilla
相关产品推荐
相关产品推荐

