設定: 初めてマルチプレイヤー ゲームを作成したところ、奇妙な問題が発生しました。プレイヤーが弾丸を撃って殺し合う戦車ゲームです
問題: クライアントが移動中に発砲すると、弾丸が少し遅れてスポーンするように見え、プレイヤーが弾丸と衝突します。
問題は、プレイヤー自体がローカルであり、弾丸がネットワーク上で生成されていることです (遅延の原因となっています)。
注: ホスト プレーヤーにはこの問題はありません。したがって、これは何らかの形でネットワークに関連しています。
弾丸をクライアント プレーヤーと同期するにはどうすればよいですか?
private void Fire(){
// Set the fired flag so only Fire is only called once.
m_Fired = true;
CmdCreateBullets ();
// Change the clip to the firing clip and play it.
m_ShootingAudio.clip = m_FireClip;
m_ShootingAudio.Play ();
// Reset the launch force. This is a precaution in case of missing button events.
m_CurrentLaunchForce = m_MinLaunchForce;
}
[Command]
private void CmdCreateBullets()
{
GameObject shellInstance = (GameObject)
Instantiate (m_Shell, m_FireTransform.position, m_FireTransform.rotation) ;
// Set the shell's velocity to the launch force in the fire position's forward direction.
shellInstance.GetComponent<Rigidbody>().velocity = m_CurrentLaunchForce * m_FireTransform.forward;
NetworkServer.Spawn (shellInstance);
}