Unity 2D中‘Rigidbody2D’无‘Static’定义错误的修复方法
- 开发Unity 2D项目时,编写脚本后Unity报错无法运行,VS Studio无任何错误提示
- 初始错误信息:
Assets\scripts\VidaPlayer.cs(25,34): error CS0117: 'Rigidbody2D' does not contain a definition for 'Static'
- 涉及的脚本代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LifePlayer : MonoBehaviour { private Animator anim; private Rigidbody2D rb; private void Start() { anim = GetComponent<Animator>(); rb = GetComponent<Rigidbody2D>(); } private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Trap")) { Death(); } } private void Death() { rb.bodyType = Rigidbody2D.Static;//<-- 错误出现位置 anim.SetTrigger("death"); } }
- 移除所有与
rb相关的代码后,出现新错误:
NullReferenceException: Object reference not set to an instance of an object
UnityEditor.Graphs.Edge.WakeUp () (at <8e8a32ebae4d4c768ca69b7e552734c1>:0)
UnityEditor.Graphs.Graph.DoWakeUpEdges (System.Collections.Generic.List1[T] inEdges, System.Collections.Generic.List1[T] ok, System.Collections.Generic.List`1[T] error, System.Boolean inEdgesUsedToBeValid) (at <8e8a32ebae4d4c768ca69b7e552734c1>:0)
UnityEditor.Graphs.Graph.WakeUpEdges (System.Boolean clearSlotEdges) (at <8e8a32ebae4d4c768ca69b7e552734c1>:0)
UnityEditor.Graphs.Graph.WakeUp (System.Boolean force) (at <8e8a32ebae4d4c768...
修复CS0117错误
Rigidbody2D的刚体类型枚举属于RigidbodyType2D类,而非Rigidbody2D本身。修改Death方法中的代码:
private void Death() { rb.bodyType = RigidbodyType2D.Static; anim.SetTrigger("death"); }
同时确认挂载该脚本的游戏对象上已添加Rigidbody2D组件,否则Start方法中GetComponent<Rigidbody2D>()会返回null,后续调用rb的属性会触发空引用异常。
修复NullReferenceException错误
该错误由Unity编辑器的可视化图形节点(如动画状态机)存在无效连线导致,与脚本修改无关,可通过以下步骤解决:
- 打开项目中所有动画控制器(Animator Controller),检查状态机内的连线是否存在断开、指向不存在状态的情况,重新连接或删除无效连线
- 清理编辑器缓存:点击菜单栏
File -> Clear Editor Cache,随后重启Unity - 若使用了其他可视化图形工具(如行为树插件),同步检查其中的节点连接是否正常
内容的提问来源于stack exchange,提问作者D_G

