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);
}
}
}