Unity 3D战斗系统敌人触发攻击日志但玩家未受伤害问题求助
故障排查及修复方案
最可能的原因:EnemyScript中_player字段未正确赋值
你当前代码仅在Awake中获取了玩家的Transform组件用于导航,没有对MovementController类型的_player字段赋值,导致伤害方法实际没有作用到正确的玩家实例上,两种修复方案:
- 方案1:手动在Inspector面板中,将场景里的玩家游戏对象拖到敌人组件的
_player参数槽位中 - 方案2:修改
EnemyScript的Awake方法,自动获取玩家的血量控制组件,修改后代码如下:
void Awake() { GameObject playerObj = GameObject.FindGameObjectWithTag("Player"); target = playerObj.GetComponent<Transform>(); // 新增行:自动获取玩家身上的MovementController组件赋值给_player _player = playerObj.GetComponent<MovementController>(); timeBtwAttack = startTimeBtwAttack; }
其他排查方向
如果按上述方案修改后问题仍存在,按以下步骤逐一排查:
- 在
PlayerTakeDamage方法中添加日志输出,确认方法是否被调用、生命值是否正常扣除:
public void PlayerTakeDamage(int damage) { currentHealth -= damage; // 新增日志,验证生命值变化 Debug.Log($"玩家受到伤害,当前生命值:{currentHealth}"); healthBar.SetHealth(currentHealth); }
- 如果日志输出正常、数值正确扣除,但血条无变化:说明
HealthBarScript的SetHealth方法逻辑存在问题,检查该脚本的实现即可 - 如果没有对应日志输出:确认
_player是否绑定到了其他带MovementController组件的非玩家对象上 - 检查是否有其他并行运行的脚本在修改玩家的
currentHealth值,比如持续回血逻辑恰好抵消了敌人伤害 - 确认玩家对象的Tag确实设置为了
Player,且场景中只有一个Tag为Player的对象
内容的提问来源于stack exchange,提问作者zielu
相关产品推荐
相关产品推荐

