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

Unity C#跨脚本添加浮点数遇空引用异常求助

解决Unity中C#脚本的NullReferenceException问题

嘿,我来帮你搞定这个报错!先给你拆解下这个问题到底出在哪,再给你修复方案。

首先,理解报错的意思

你看到的 NullReferenceException: Object reference not set to an instance of an object 其实是说:你尝试去访问一个还没被实例化的对象引用——简单说就是某个脚本变量是null(空的),但你却想用它的属性或方法,自然就报错了。

从报错行号来看,问题出在Resources.cs的第42行(Die()方法里),而这个方法是在第22行的Update()里被调用的。结合你的需求(从一个脚本向另一个脚本加浮点数),大概率是你要访问的另一个脚本的引用没正确赋值。

常见错误场景&修复方案

假设你的脚本大概是这样的(新手常犯的错误写法):

using UnityEngine;

public class Resources : MonoBehaviour
{
    // 声明了另一个脚本的变量,但没赋值
    private AnotherScript targetScript;

    void Update()
    {
        Die();
    }

    void Die()
    {
        // 第42行:这里直接访问targetScript的浮点数,导致空引用报错
        targetScript.resourceValue += 5.0f;
    }
}

下面给你两种靠谱的修复方式:

方式1:在Inspector面板手动赋值

这种方法简单直观,适合固定的脚本引用:

using UnityEngine;

public class Resources : MonoBehaviour
{
    // 把变量设为public,这样就能在Unity编辑器里看到它
    public AnotherScript targetScript;

    void Update()
    {
        Die();
    }

    void Die()
    {
        // 先检查引用是否为空,避免报错
        if (targetScript != null)
        {
            targetScript.resourceValue += 5.0f;
        }
        else
        {
            Debug.LogError("targetScript引用为空!请在Inspector面板中拖入挂载了AnotherScript的GameObject");
        }
    }
}

操作步骤:

  1. 确保AnotherScript已经挂载到某个GameObject上
  2. 选中挂载了Resources脚本的GameObject,在Inspector面板找到Target Script字段
  3. 把挂载了AnotherScript的GameObject拖入这个字段即可

方式2:通过代码动态获取引用

如果需要在运行时自动找到目标脚本,可以用这种方法:

using UnityEngine;

public class Resources : MonoBehaviour
{
    private AnotherScript targetScript;

    void Awake()
    {
        // 情况1:两个脚本在同一个GameObject上
        targetScript = GetComponent<AnotherScript>();

        // 情况2:目标脚本在其他GameObject上(比如名字叫"ResourceHolder"的对象)
        // targetScript = GameObject.Find("ResourceHolder").GetComponent<AnotherScript>();
    }

    void Update()
    {
        Die();
    }

    void Die()
    {
        if (targetScript != null)
        {
            targetScript.resourceValue += 5.0f;
        }
        else
        {
            Debug.LogError("找不到AnotherScript组件!请检查是否正确挂载,或者GameObject名字是否正确");
        }
    }
}

问题根源总结

你之所以报错,核心原因就是你声明了另一个脚本类型的变量,但没有给它赋值——既没在编辑器里手动拖入引用,也没通过代码获取到有效的组件实例,导致变量是null,当你尝试用它的浮点数变量时,就触发了空引用异常。

额外提醒几个注意点:

  • 脚本文件名必须和类名完全一致(比如AnotherScript.cs的类名必须是AnotherScript)
  • 尽量在Awake()或Start()里完成引用的初始化,避免在Update()里重复获取
  • 如果目标GameObject可能被销毁,每次访问前都要检查引用是否有效

内容的提问来源于stack exchange,提问作者user9608906

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:42:35