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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:42:02