発射
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単位の速度で飛びます。
チャレンジ
簡単ボールはスペースキーを押して発射するまで、パドルの上に乗っています。
Ballにbool launched;とpublic void Launch(Vector3 direction)を追加します。内容はlaunched = true;とrb.linearVelocity = direction.normalized * speed;です。Update()で、発射済みならreturnし、そうでなければボールをpaddle.position + Vector3.up * 0.5fの位置に置きます。- スペースキーが
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プレイグラウンド