23 [Header(
"Movimiento Errático")]
24 [Tooltip(
"Velocidad de movimiento en unidades/segundo")]
30 [Tooltip(
"Tiempo en segundos entre cambios de dirección")]
35 [Header(
"Límites de Viewport (0–1)")]
40 [Tooltip(
"Margen horizontal mínimo (viewport x)")]
46 [Tooltip(
"Margen horizontal máximo (viewport x)")]
53 [Tooltip(
"Margen superior máximo (viewport y)")]
58 [Header(
"Rotación Suavizada")]
64 [Tooltip(
"Velocidad angular (grados/seg) para rotación progresiva")]
108 timer += Time.deltaTime;
120 bool hitSide = vp.x <=
minX || vp.x >=
maxX;
121 bool hitTop = vp.y >=
maxY;
123 if (hitSide || hitTop)
129 vp.x = Mathf.Clamp(vp.x,
minX,
maxX);
131 myTransform.position =
myCamera.ViewportToWorldPoint(vp);
144 float angleRad = Random.Range(0f, 360f) * Mathf.Deg2Rad;
145 moveDirection =
new Vector2(Mathf.Cos(angleRad), Mathf.Sin(angleRad)).normalized;
155 if (dir.sqrMagnitude < 0.001f)
return;
158 float targetAngle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - 90f;
159 Quaternion targetRot = Quaternion.Euler(0f, 0f, targetAngle);
162 myTransform.rotation = Quaternion.RotateTowards(
Componente que aplica movimiento errático con rotación suave a un objeto. Cambia de dirección al azar...
void AlignRotation(Vector2 dir)
Rota el objeto suavemente para que su eje "up" apunte en la dirección indicada. Usa Quaternion....
Transform myTransform
Referencia local al Transform del objeto (para optimizar acceso repetido).
float timer
Cronómetro interno que controla cuándo cambiar la dirección de movimiento.
float speed
Velocidad de desplazamiento del objeto, medida en unidades de Unity por segundo.
void Update()
Método que se ejecuta en cada frame. Controla el movimiento, cambio de dirección, detección de colisi...
Camera myCamera
Referencia a la cámara principal, usada para convertir entre mundo y viewport.
void Start()
Método de inicialización de Unity. Se ejecuta al comenzar la escena o activar el objeto.
float minX
Límite izquierdo en coordenadas normalizadas de pantalla (0 = borde izquierdo, 1 = borde derecho).
void PickNewDirection()
Selecciona una nueva dirección aleatoria en el plano XY. El ángulo se elige en un rango completo de 3...
float maxX
Límite derecho en coordenadas normalizadas de pantalla.
float maxY
Límite superior en coordenadas normalizadas (1 = parte superior de la pantalla). Si se supera,...
float changeInterval
Intervalo en segundos tras el cual el objeto elige una nueva dirección aleatoria.
Vector2 moveDirection
Dirección actual de movimiento del objeto, como vector normalizado.
float rotationSpeed
Velocidad máxima a la que puede girar el objeto para alinearse con su nueva dirección,...