Estoy haciendo un juego 3D muy simple en Unity donde tengo este transbordador espacial que puedo moverme en el espacio alrededor de asteroides y puedo disparar cuando presiono/sostengo el botón del mouse. Estoy haciendo esto creando una instancia de una esfera en la posición de transformación del "Emisor" y luego simplemente aplicando una Fuerza hacia adelante a ese objeto de bala. Todo funciona bien, pero lo único que no me gusta y tampoco sé cómo solucionarlo es cómo las balas mantienen su posición al disparar y mover el mouse de izquierda a derecha, en lugar de mantener una línea perfectamente recta en todo momento. .
Así es como se ve cuando estoy disparando y moviendo mi cámara al mismo tiempo:
Captura de pantalla durante la captura
Aquí hay un gif para una mejor visualización.
En este momento parece que estoy orinando láseres, lo cual nunca es bueno. Intenté hacer que la velocidad de la bala fuera mucho más rápida, pero luego las balas se vuelven cada vez más difíciles de ver y no se ven tan bien.
Este es el código por el cual estoy disparando las balas:
private void Fire() { GameObject bullet = Instantiate(laserPrefab); GameObject bullet2 = Instantiate(laserPrefab); Physics.IgnoreCollision(bullet.GetComponent<Collider>(), shuttleCollider.GetComponent<Collider>()); Physics.IgnoreCollision(bullet2.GetComponent<Collider>(), shuttleCollider.GetComponent<Collider>()); bullet.transform.position = laserEmitter.position; bullet2.transform.position = laserEmitter2.position; /*Vector3 rotation = bullet.transform.rotation.eulerAngles; Vector3 rotation2 = bullet2.transform.rotation.eulerAngles; bullet.transform.rotation = Quaternion.Euler(rotation.x, transform.eulerAngles.y, rotation.z); bullet2.transform.rotation = Quaternion.Euler(rotation2.x, transform.eulerAngles.y, rotation2.z);*/ bullet.GetComponent<Rigidbody>().AddForce(laserEmitter.forward * laserSpeed, ForceMode.Impulse); bullet2.GetComponent<Rigidbody>().AddForce(laserEmitter.forward * laserSpeed, ForceMode.Impulse); StartCoroutine(DestroyBulletAfterTime(bullet, bulletDeathTime, bullet2)); }No se preocupe por las líneas comentadas, solo estaba jugando tratando de ver si puedo hacer que funcione. El tiro se comporta igual con o sin esas líneas comentadas.
Por supuesto, un sistema basado en proyectiles se comportará y se verá como un sistema de proyectiles.
Si desea un comportamiento láser, use un LineRenderer. Raycast donde debe terminar su línea láser (ya sea la distancia máxima del láser o el punto de golpear un objeto dentro del alcance).
Si no le gusta el aspecto "estático", cambie el material de LineRenderer a algo que cambie con el tiempo (busque sombreadores/efectos de LineRenderer).