You need to enable JavaScript to run this app. Unity Mirror客户端无法执行伤害Command 仅主机端正常问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Unity Mirror客户端无法执行伤害Command 仅主机端正常问题求助

问题根因
  • 标记[Command]特性的函数执行逻辑为客户端发起调用、服务端实际运行,你在客户端本地点击敌人后给enemy字段赋值的操作仅存在于客户端本地,没有同步到服务端对应的玩家实例上,因此服务端侧的enemy始终为null,伤害逻辑自然无法触发。
  • 移除enemy != null校验后,服务端执行CmdDamage时会触发空引用异常,直接触发连接断开逻辑。
修复方案
  1. 修改CmdDamage函数,将目标敌人作为参数传递:
    继承自NetworkBehaviour的类型可以直接作为Command的参数传递,引擎会自动处理网络对象的映射,无需手动传递对象ID。
[Command]
private void CmdDamage(EnemyScript targetEnemy)
{
    if(targetEnemy != null)
        targetEnemy.TakeDamage(5);
}
  1. 修改BasicAttack方法,调用时传入本地选中的敌人:
    额外加一层本地非空判断,避免未选中敌人时触发空报错。
private void BasicAttack()
{
    if(enemy == null) return;
    float dist = Vector3.Distance(enemy.transform.position, transform.position);
    if(dist < 2.5f)
    {
        GetComponent<NetworkAnimator>().SetTrigger(Animator.StringToHash("sword slash"));
        CmdDamage(enemy);
        timer = timerMax;
    }
}
额外优化建议

你当前选中敌人后直接调用enemy.target.SetActive(true)仅会在本地显示选中标记,如果需要所有客户端都能看到选中状态,建议在EnemyScript中新增[ServerRpc]标记的同步方法来控制target的显隐,避免多端状态不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 11:54:04