Cosmic Strike
 
Cargando...
Buscando...
Nada coincide
PlayerController.cs
Ir a la documentación de este archivo.
1
8
9using UnityEngine;
10
15[RequireComponent(typeof(Rigidbody2D))]
16public class PlayerController : MonoBehaviour
17{
18 // ========== PARÁMETROS DE MOVIMIENTO ==========
19
23 [Header("Ajustes de movimiento")]
24 [Tooltip("Velocidad de traslación")]
25 public float speed = 5f;
26
27 // ========== PARÁMETROS DE ALABEO (ROTACIÓN SUAVE) ==========
28
33 [Header("Ajustes de alabeo")]
34 [Tooltip("Ángulo máximo de alabeo (grados)")]
35 public float maxRollAngle = 20f;
36
40 [Tooltip("Velocidad de interpolación del alabeo")]
41 public float rollSpeed = 5f;
42
43 // ========== VARIABLES INTERNAS ==========
44
48 private Rigidbody2D rb;
49
53 private Transform myTransform;
54
58 private Camera myCamera;
59
63 private float targetRoll = 0f;
64
68 private void Awake()
69 {
70 myTransform = transform;
71 myCamera = Camera.main;
72 }
73
77 void Start()
78 {
79 rb = GetComponent<Rigidbody2D>();
80 }
81
86 void Update()
87 {
88 // 1) Calcula dirección de movimiento unitaria
89 Vector2 currentDir = GetDirection();
90
91 // 2) Mueve y clampa posición dentro de viewport
92 ClampFinalPosition(currentDir);
93
94 // 3) Calcula y aplica alabeo según la componente X
95 // Desactivado actualmente por decisión de diseño
96 // HandleRoll(currentDir.x);
97 }
98
103 private void ClampFinalPosition(Vector2 currentDir)
104 {
105 myTransform.Translate(currentDir * (speed * Time.deltaTime), Space.World);
106
107 Vector3 vp = myCamera.WorldToViewportPoint(myTransform.position);
108 vp.x = Mathf.Clamp(vp.x, 0.04f, 0.96f);
109 vp.y = Mathf.Clamp(vp.y, 0.08f, 0.94f);
110
111 myTransform.position = myCamera.ViewportToWorldPoint(vp);
112 }
113
118 private Vector2 GetDirection()
119 {
120 float h = Input.GetAxis("Horizontal");
121 float v = Input.GetAxis("Vertical");
122 return new Vector2(h, v).normalized;
123 }
124
130 private void HandleRoll(float horizontalInput)
131 {
132 // Invertimos signo si quieres que alabeo a la izquierda incline a la izquierda
133 targetRoll = -horizontalInput * maxRollAngle;
134
135 // Interpolamos la rotación actual hacia la rotación objetivo
136 Quaternion currentRot = myTransform.rotation;
137 Quaternion desiredRot = Quaternion.Euler(0f, targetRoll, 0f);
138
139 myTransform.rotation = Quaternion.RotateTowards(
140 currentRot,
141 desiredRot,
142 rollSpeed * Time.deltaTime * maxRollAngle
143 );
144 }
145}
Componente que permite mover un jugador en 2D a través de entrada de usuario (WASD o flechas),...
void Awake()
Inicializa las referencias de transform y cámara al momento de despertar el objeto.
float speed
Velocidad de desplazamiento del jugador en unidades por segundo.
void ClampFinalPosition(Vector2 currentDir)
Traslada al jugador en la dirección indicada y lo mantiene dentro de los márgenes visibles del viewpo...
float targetRoll
Ángulo de rotación objetivo en el eje Z para el alabeo.
float rollSpeed
Velocidad a la que se interpola la rotación hacia el ángulo deseado.
void HandleRoll(float horizontalInput)
Aplica una rotación visual suave (alabeo) en el eje Z según la dirección horizontal del jugador....
Vector2 GetDirection()
Lee la entrada del jugador (teclas WASD o flechas) y devuelve un vector normalizado de dirección.
Camera myCamera
Referencia a la cámara principal, usada para limitar el movimiento del jugador en pantalla.
Transform myTransform
Transform local del jugador, cacheado para optimizar acceso.
float maxRollAngle
Ángulo máximo de inclinación visual (roll) en grados. Representa cuánto puede inclinarse el objeto la...
void Start()
Obtiene la referencia al Rigidbody2D al comenzar el juego.
void Update()
Lógica principal de movimiento. Se ejecuta en cada frame. Calcula dirección, aplica desplazamiento y ...
Rigidbody2D rb
Referencia al Rigidbody2D del jugador (necesario para la física, aunque aquí no se usa movimiento por...