unity tutorial online español c# networking unity3d unity3d-unet

c# - tutorial - Jugador chocando con una bala cuando se mueve-Unity UNET



unity multiplayer tutorial español (2)

Lo solucioné de la siguiente manera. si alguien puede mirar para confirmar mi respuesta, sería bueno.

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() { RpclocalBullet (); } [ClientRpc] private void RpclocalBullet(){ 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 = 25f * m_FireTransform.forward; }

Configuración : Creando mi primer juego multijugador y encontrándome con un problema extraño. es un juego de tanque donde los jugadores pueden disparar balas y matarse unos a otros

Problema : cuando el cliente dispara mientras se mueve , la bala parece engendrar con un pequeño retraso que hace que el jugador colisione con la bala.

El problema parece ser que el jugador en sí es local y la bala se genera en la red (lo que está causando el retraso)

Nota : El reproductor de host no tiene este problema, por lo tanto, está relacionado de alguna manera con la red.

¿Cómo puedo sincronizar la viñeta con el reproductor del cliente?

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


¿Las reglas de tu juego deben servir para que el tanque de un jugador pueda dispararse a sí mismo?

Si no, una solución simple es hacer que el colisionador del proyectil ignore su colisionador cuando se activa:

Transform bullet = Instantiate(bulletPrefab) as Transform; Physics.IgnoreCollision(bullet.GetComponent<Collider>(), GetComponent<Collider>());