Поймай бонус
Урок 15 из 19 курса Игра в Unity: арканоид на Coddy.
Бонус сам обнаруживает столкновение: его триггерный коллайдер касается коллайдера платформы, и оба тела кинематические — этого достаточно для OnTriggerEnter. Он также падает мимо мяча, поэтому сначала проверяет тег.
Перечисление задаёт виды бонусов, а каждый префаб настраивается отдельно в Inspector, поэтому один скрипт подходит для обоих:
public enum Kind { Wide, Multiball }
public Kind kind;
if (kind == Kind.Multiball) Debug.Log("Three balls");other.GetComponent<Paddle>() находит скрипт Paddle на объекте, которого коснулся бонус. Пока что широкий бонус только выводит сообщение; в следующем уроке платформа будет увеличиваться.
Задание
СложноПоймай подставкой падающее усиление.
- В
PowerUpдобавьpublic enum Kind { Wide, Multiball }иpublic Kind kind;(для каждого префаба задаётся его тип). - Добавь
OnTriggerEnter(Collider other): выходи из метода, еслиother.CompareTag("Paddle")возвращает false; широкое усиление вызываетother.GetComponent<Paddle>().Widen();, затемDestroy(gameObject); - В
Paddleдобавьpublic void Widen(), который пока выводит в журналWide paddle.
Нажми «Играть» и поймай зелёное усиление: оно исчезнет, а в Console появится Wide paddle. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
using UnityEngine.InputSystem;
public class Paddle : MonoBehaviour
{
public float speed = 14f;
public float wallX = 8f; // внутренние поверхности боковых стенок находятся на координатах -wallX и 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);
}
}
Все уроки раздела Игра в Unity: арканоид
Потренируйтесь самостоятельно: Песочница Unity