Установка: Создание моей первой многопользовательской игры и запущенная странная проблема. это танк игра, в которой игроки могут стрелять пулями и убивать друг другаИгрок, столкнувшийся с пулей при движении - Unity UNET
Проблема: Когда клиент стреляет во время движения, пуля, кажется, икру с небольшой задержкой, которая приводит к тому, игрок столкнется с пулей.
Проблема, кажется, что сам игрок является локальным и пуля в настоящее время породило в сети (что вызывает задержку)
Примечания: Ведущий игрок не имеет эта проблема, поэтому она как-то связана с сетью.
Как я могу синхронизировать пулю с клиентом?
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);
}
Если снаряд создается на стороне сервера, он должен всегда быть впереди игрок (в евро), однако проблема вызвана коллайдером игрока, пересекающий модель к тому времени, игрок получает положение снаряда информация право? Это потому, что вы используете клиентское столкновение с ударом столкновения? –
Это точно верно, и обнаружение столкновения Hit происходит на стороне клиента. – Rana