You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:22:52