Menu
CoddyTech

発射

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

プレイヤーがボールを打ち出すまで、ボールはパドルの上で待機します。それまでは、Update()が毎フレームボールをパドルの上に移動させるため、パドルの移動に合わせてボールも動き、boolでボールが飛び出したかどうかを記録します。

void Update()
{
    if (launched) return;
    transform.position = paddle.position + Vector3.up * 0.5f;
}

ボールのRigidbodyには重力がないため、一度速度を設定すれば、まっすぐ飛び続けます。wasPressedThisFrameがtrueになるのはキーが押されたフレームだけなので、Update()内で読み取ります。どの方向にも正確な速度で飛ばすには、.normalizedで方向の長さを1にしてから、速度を掛けます。new Vector3(3f, 4f, 0f).normalized * 10fなら、1秒あたり10単位の速度で飛びます。

challenge icon

チャレンジ

簡単

ボールはスペースキーを押して発射するまで、パドルの上に乗っています。

  1. Ballにbool launched;とpublic void Launch(Vector3 direction)を追加します。内容はlaunched = true;とrb.linearVelocity = direction.normalized * speed;です。
  2. Update()で、発射済みならreturnし、そうでなければボールをpaddle.position + Vector3.up * 0.5fの位置に置きます。
  3. スペースキーがwasPressedThisFrameのとき、Launch(new Vector3(0.3f, 1f, 0f))を呼び出します。

「プレイ」を押してパドルを動かし、その後スペースキーを押します。ボールは上に飛び、最初の壁で止まります(跳ね返る動きは次に追加します)。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    // 次に、Spaceで打ち出すまで、ボールはパドルの上に乗ったままにします。
}

Unityゲーム:ブロック崩しのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド