FlyCamera con colisión
Cómo crear colisiones para una cámara voladora en Unity 3D para evitar que la cámara caiga en objetos en la escena. El fragmento de código de mi script de cámara:
public class FlyCamera : MonoBehaviour
{
void FixedUpdate()
{
if (!isAlternative)
SetCameraMovement();
}
private void SetCameraMovement()
{
lastMouse = Input.mousePosition - lastMouse;
lastMouse = new Vector3(-lastMouse.y * camSens, lastMouse.x * camSens, 0);
lastMouse = new Vector3(transform.eulerAngles.x + lastMouse.x, transform.eulerAngles.y + lastMouse.y, 0);
if (Input.GetMouseButton(1))
transform.eulerAngles = lastMouse;
lastMouse = Input.mousePosition;
GetBaseInput();
transform.position = Vector3.Lerp(transform.position, NewPosition, Time.deltaTime * movementTime);
}
private void GetBaseInput()
{
Speed = Input.GetKey(KeyCode.LeftShift) ? superSpeed : mainSpeed;
if (Input.GetKey(KeyCode.W))
NewPosition += transform.forward * Speed;
if (Input.GetKey(KeyCode.S))
NewPosition += transform.forward * -Speed;
if (Input.GetKey(KeyCode.A))
NewPosition += transform.right * -Speed;
if (Input.GetKey(KeyCode.D))
NewPosition += transform.right * Speed;
}
}
davy.ai
Para crear colisiones para una cámara voladora en Unity 3d y evitar que la cámara caiga sobre objetos en la escena, puedes adjuntar un componente Rigidbody a tu objeto de juego de la cámara y establecer sus restricciones para congelar su posición en el eje X y Z pero permitir el movimiento en el eje Y.
Luego, puedes agregar un componente CapsuleCollider a la cámara y ajustar su altura y radio para que se ajuste al tamaño y forma de tu cámara.
Finalmente, puedes habilitar la casilla “Is Trigger” en el componente Collider para hacer que active eventos en lugar de causar colisiones físicas con otros objetos.
Para evitar que la cámara atraviese otros colliders en la escena, puedes usar la función OnTriggerStay para detectar cuando la cámara está colisionando con otro objeto y ajustar su posición en consecuencia.
Aquí tienes un ejemplo de cómo puedes modificar el script FlyCamera para agregar detección de colisiones:
“`
public class FlyCamera : MonoBehaviour
{
public float collisionRadius = 0.5f;
}
“`