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

Unity提示对象引用未设置错误,已声明变量仍触发NullReferenceException

问题描述

Unity开发过程中触发NullReferenceException(对象引用未设置为对象实例)报错,报错定位在代码第14、26行,已在第8行声明对应变量但依然触发报错。

HealthPoint类定义代码

using UnityEngine;

public class HealthPoint
{
    public float max;
    public float min = 0;
    public float current;
}

触发报错的Obstacle类代码

using UnityEngine;

public class Obstacle : MonoBehaviour
{
    [SerializeField] private float MaxHp = 100;
    [SerializeField] private float MinHp = 0;

    private HealthPoint hp;

    SpriteRenderer spriteRenderer;

    private void Start()
    {
        hp.max = MaxHp;
        hp.min = MinHp;
        hp.current = MaxHp;
    }

    public void GotHit(float HitPoint)
    {
        hp.current -= 20;
    }

    private void Update()
    {
        float color = (int)(hp.current / 100);
        spriteRenderer.color = new Color(color, color, color);
    }
}

问题根源

引用类型变量仅声明未初始化,默认值为null,调用null对象的属性/方法就会触发对象引用不存在报错:

  • 自定义类HealthPoint是引用类型,仅声明private HealthPoint hp未创建实例
  • SpriteRenderer组件未通过GetComponent获取挂载在当前GameObject上的实例

修复后完整代码

using UnityEngine;

public class Obstacle : MonoBehaviour
{
    [SerializeField] private float MaxHp = 100;
    [SerializeField] private float MinHp = 0;

    private HealthPoint hp;
    private SpriteRenderer spriteRenderer;

    private void Start()
    {
        spriteRenderer = gameObject.GetComponent<SpriteRenderer>();
        hp = new HealthPoint();

        hp.max = MaxHp;
        hp.min = MinHp;
        hp.current = MaxHp;
    }

    public void GotHit(float HitPoint)
    {
        hp.current -= HitPoint;
    }

    private void Update()
    {
        float color = hp.current / 100;
        spriteRenderer.color = new Color(color, color, color);
    }
}

修复点说明

  • 新增hp = new HealthPoint()创建HealthPoint类实例
  • 新增spriteRenderer = gameObject.GetComponent<SpriteRenderer>()获取当前物体上的SpriteRenderer组件实例
  • 修复GotHit方法逻辑,将固定扣20改为使用传入的HitPoint参数
  • 移除Update方法中多余的int强制转换,避免颜色值被截断为0或1,实现血量对应的灰度渐变效果

内容的提问来源于stack exchange,提问作者semih yılmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:30:01