Menu
CoddyTech

パワーアップをキャッチ

Coddyの「Unityゲーム:ブロック崩し」コースのレッスン 15/19。

パワーアップは自分でキャッチを検知します。トリガーコライダーがパドルのコライダーに触れ、両方のボディがキネマティックであれば、OnTriggerEnterが呼び出されます。またボールをすり抜けて落ちるため、まずタグを確認します。

enumで種類を定義し、各プレハブでインスペクターから種類を設定するので、1つのスクリプトで両方に対応できます。

public enum Kind { Wide, Multiball }
public Kind kind;

if (kind == Kind.Multiball) Debug.Log("Three balls");

other.GetComponent<Paddle>()は、パワーアップが触れたオブジェクトにあるPaddleスクリプトを見つけます。現時点では、幅を広げる場合はログを出すだけです。次のレッスンでパドルを大きくします。

challenge icon

チャレンジ

難しい

パドルで落下してくるパワーアップをキャッチします。

  1. PowerUpにpublic enum Kind { Wide, Multiball }とpublic Kind kind;を追加します(各プレハブでkindを設定します)。
  2. OnTriggerEnter(Collider other)を追加します。other.CompareTag("Paddle")でない場合はreturnします。Wideの場合はother.GetComponent<Paddle>().Widen();を呼び出し、その後Destroy(gameObject);を実行します。
  3. Paddleに、今のところWide paddleをログに出力するpublic void Widen()を追加します。

「プレイ」を押して緑色のパワーアップをキャッチします。消えて、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プレイグラウンド