私はUnityの2人のプレーヤーのための少しの3D-Gameに取り組んでいます。ゲームのコンセプトは、リングを飛ぶ必要があるスペース競争です。追加機能として、私はプレーヤーに他のプレーヤーを押す能力を与えたいと思う。だから、彼らが特定のボタンを押すと、彼らの宇宙船は、他のプレーヤーに当たって少し戻ってくる「衝撃波」を送るべきです。私はこれをPhysics.OverlapSphereとAddExplosionForce関数で実現したかったのです。 ネットワークの機能を持たないローカルの追加シーンでこれをテストしたところ、とてもうまく機能しました。Unity AddExplosionForceはネットワークマネージャーと同期します
私は実際のゲームにこの機能をインポートしたかったので、このエフェクトがローカルプレイヤーに当たっただけで、他のプレイヤーには当てられないという問題があります。もう1つは変わっているだけで、彼のポジションは変わっていません(他のゲームでもそうではありません)。
私はすでにNetwork Managerを使用していますが、「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);
}
誰かが知っている、私はネットワークの事のために追加する必要が何かありますか?
物理学を計算する権威者がなければ、達成しようとしている効果が非常に難しいと感じています。ネットワークの待ち時間のために、プレイヤー1(能力を起動する)はプレイヤー2がプレイヤー2とは異なる場所にいると見なします。その爆発をプレイヤー2に送信すると、異なる量の力が適用されますゲームのデシンクとあなたはラバーバンディングを取得します。どのクライアントが正しいですか?プレーヤー2のクライアントは常にプレーヤー2の位置が正しいですか?プレイヤー1は能力を使用しているためですか? – Draco18s