Unity C# 血条脚本功能正常却触发空引用错误求助
问题分析与解决
错误原因
你遇到的Object reference not set to an instance of an object空引用异常,根源是TakeDamage方法中访问了未初始化的对象成员。具体指向第61行的stats.Armor.GetValue()代码,可能的两种情况:
stats变量未在Unity编辑器中赋值:作为public字段,你需要将带有CharacterStats组件的对象拖入HealthBar的stats属性栏;stats已赋值,但stats.Armor本身是null:比如CharacterStats类中Armor属性未被正确实例化。
你提到调用TakeDamage时功能符合预期却报错,大概率是代码逻辑中某些分支偶然避开了空引用,但核心的对象未初始化问题依然存在。
修复方案
检查Inspector赋值
选中挂载HealthBar脚本的对象,在Inspector面板中确认stats字段已拖入正确的CharacterStats实例。添加空值保护逻辑
修改TakeDamage方法,先判断对象是否为空再执行后续逻辑,避免触发异常:void TakeDamage(int damage) { // 先校验stats和Armor是否有效 if (stats != null && stats.Armor != null) { if (stats.Armor.GetValue() <= damage) { damage -= stats.Armor.GetValue(); damage = Mathf.Clamp(damage, 0, int.MaxValue); slider.value -= damage; } } else { // 无护甲时直接扣除对应血量 slider.value -= damage; } if (slider.value <= 0) { Dead(); } }校验CharacterStats类
打开CharacterStats脚本,确认Armor属性已被正确初始化:如果Armor是自定义类,要确保它在CharacterStats的Start/Awake方法中被实例化,或者通过Inspector完成赋值。
内容的提问来源于stack exchange,提问作者SwimmingYoshi
相关产品推荐
相关产品推荐

