Unity使用Tooltip时崩溃,报NullReferenceException问题求助
排查Tooltip脚本的NullReferenceException错误
以下是针对你代码中可能触发空引用错误的核心排查点及解决方法:
1. ToolTipManager静态实例_instance为空
当ToolTip脚本调用ToolTipManager._instance.SetAndShowToolTip(message)时,若_instance未被正确赋值,会直接触发崩溃。可能原因及解决:
- 场景中无挂载ToolTipManager的GameObject:确保场景内存在且仅存在一个带有ToolTipManager组件的对象。
- 多实例导致唯一实例被销毁:你的Awake逻辑会销毁重复的ToolTipManager对象,但如果第一个实例被意外禁用(Awake仍会执行,但后续若实例被销毁),会导致
_instance为空。需保证唯一的ToolTipManager对象处于激活状态,且未被误删。
2. textComponent未在Inspector赋值
SetAndShowToolTip和HideToolTip方法直接访问textComponent.text,若该变量未绑定场景中的TextMeshProUGUI组件,会触发空引用:
- 解决:选中挂载ToolTipManager的GameObject,在Inspector面板将场景中的TextMeshProUGUI对象拖入
textComponent字段。
3. cam变量未赋值
Update方法中调用cam.ScreenToWorldPoint时,若cam未绑定相机组件,会触发错误:
- 解决:在Inspector将主相机拖入
cam字段;或在Start方法中自动获取主相机(需给主相机添加MainCamera标签),修改代码:void Start() { Cursor.visible = true; gameObject.SetActive(false); if(cam == null) cam = Camera.main; }
4. 额外防御性修改(避免崩溃)
在调用前添加空值检查,即使变量未赋值也不会直接崩溃,方便排查:
- 修改ToolTip脚本:
private void OnMouseEnter() { if(ToolTipManager._instance != null) { ToolTipManager._instance.SetAndShowToolTip(message); } } private void OnMouseExit() { if(ToolTipManager._instance != null) { ToolTipManager._instance.HideToolTip(); } } - 修改ToolTipManager的Update方法:
void Update() { if(cam != null) { transform.position = cam.ScreenToWorldPoint(Input.mousePosition); } }
内容的提问来源于stack exchange,提问作者Bunnly
相关产品推荐
相关产品推荐

