Atrapa un potenciador
Lección 15 de 19 del curso Juego en Unity: Rompe ladrillos de Coddy.
Una mejora detecta la captura por sí misma: su collider de activación toca el collider de la paleta, y ambos cuerpos son cinemáticos, lo cual basta para OnTriggerEnter. También pasa de largo la pelota, así que primero comprueba la etiqueta.
Un enum nombra los tipos, y cada prefab configura el suyo en el Inspector, así que un solo script sirve para ambos:
public enum Kind { Wide, Multiball }
public Kind kind;
if (kind == Kind.Multiball) Debug.Log("Three balls");other.GetComponent<Paddle>() encuentra el script Paddle en el objeto que tocó la mejora. Por ahora, Wide solo registra un mensaje; en la próxima lección la paleta crecerá.
Desafío
DifícilAtrapa con la paleta una mejora que cae.
- En
PowerUp, añadepublic enum Kind { Wide, Multiball }ypublic Kind kind;(cada prefab establece su tipo). - Añade
OnTriggerEnter(Collider other): retorna a menos que se cumplaother.CompareTag("Paddle"); una mejora Wide llama aother.GetComponent<Paddle>().Widen();y después aDestroy(gameObject); - En
Paddle, añadepublic void Widen(), que por ahora registraWide paddle.
Pulsa «Jugar» y atrapa una verde: desaparece y la consola muestra Wide paddle. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
using UnityEngine.InputSystem;
public class Paddle : MonoBehaviour
{
public float speed = 14f;
public float wallX = 8f; // las caras interiores de las paredes laterales están en -wallX y wallX
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float input = 0f;
if (Keyboard.current.leftArrowKey.isPressed || Keyboard.current.aKey.isPressed) input -= 1f;
if (Keyboard.current.rightArrowKey.isPressed || Keyboard.current.dKey.isPressed) input += 1f;
Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
float halfWidth = transform.localScale.x / 2f;
target.x = Mathf.Clamp(target.x, -wallX + halfWidth, wallX - halfWidth);
rb.MovePosition(target);
}
}
Todas las lecciones de Juego en Unity: Rompe ladrillos
Practica por tu cuenta: Playground de Unity