Unity Addexplosionforce在网络管理器上同步



im在一个统一的2个玩家的小3D游戏上工作。游戏概念是一个空间赛车,您必须在其中飞过戒指。另外,我想让玩家能够推动另一个玩家。因此,当他们按下特定的按钮时,他们的宇宙飞船应该发送"冲击波",以击中另一个球员并将他推得一点。我想通过物理学实现这一点。我在没有网络功能的情况下在本地额外场景中对此进行了测试,并且效果很好。

当我想将功能导入真实游戏时,我遇到了一个问题,即效果只是击中本地玩家而不是另一个玩家。另一个只是怪异的落后,没有改变他的位置(在另一个游戏实例中也没有。这就像客户没有得到更改(。

我不得不说,我已经在使用网络经理,而" WASD"的正常运动都适用于两个玩家。

遵循我正在使用的代码(这只是标准示例(:

Vector3 explosionPos = transform.position;
Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);
foreach (Collider hit in colliders)
{
   Rigidbody rb = hit.GetComponent<Rigidbody>();
   if (rb != null)
   rb.AddExplosionForce(power, explosionPos, radius, 3.0F);
}

有人知道,如果我必须为网络添加东西吗?

尝试创建一个将使用您提供的代码运行[clientrpc]函数的[命令]函数。它应该看起来像这样:

[Command]
void CmdOnExplosion(float power, Vector3 explosionPos, float radius, float upwardsMod)
{
    RpcExplode(power, explosionPos, radius, upwardsMod);
}
[ClientRpc]
void RpcExplode(float power, Vector3 explosionPos, float radius, float upwardsMod)
{
    Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);
    foreach (Collider hit in colliders)
    {
        Rigidbody rb = hit.GetComponent<Rigidbody>();
        if (rb != null)
        {
            rb.AddExplosionForce(power, explosionPos, radius, 3.0F);
        }
    }
}

最新更新