Menu
CoddyTech

パドル

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

このコースでは、3DのBrick Breakerを作ります。パドル、跳ね返るボール、ブロックの壁、ライフ、レベル、パワーアップを備えたゲームです。すべてのオブジェクトは、zが0のx-y平面上を動きます。スクリプトのPaddle、Ball、Brick、GameManager、PowerUpは、今のところスタブです。「プレイ」を押すとゲームが実行され、「確認」を押すと採点されます。

パドルにはキネマティックRigidbodyがあり、FixedUpdate()内でrb.MovePositionを使って動かすため、物理演算はパドルの動きを認識します。キネマティックボディは壁を通り抜けるため、スクリプトで壁の内側に留めます。中心を壁の位置でクランプすると、パドルの半分が壁に入り込んでしまいます。制限位置は、壁の位置から幅の半分を差し引いた値です。壁が-6と6にあり、パドルの幅が2の場合は、次のようになります。

float half = 2f / 2f;
target.x = Mathf.Clamp(target.x, -6f + half, 6f - half);
rb.MovePosition(target);

中心は-5から5の間に保たれるため、パドルの端は壁の位置でぴったり止まります。毎ステップtransform.localScale.xから幅を読み取ることで、パドルが大きくなっても制限位置は正しく保たれます。

challenge icon

チャレンジ

簡単

パドルを壁の間で動かしましょう。

  1. Paddle の FixedUpdate() で、左矢印キーまたは A キーを押している間は float input を -1、右矢印キーまたは D キーを押している間は 1、それ以外は 0 にします。
  2. Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime; を計算します。
  3. float half = transform.localScale.x / 2f; として、target.x を -wallX + half と wallX - half の間に制限し、その後 rb.MovePosition(target); を実行します。

「プレイ」を押して、両方の壁まで滑らせてみましょう。パドルはそれぞれの壁で止まります。その後、「確認」を押します。

自分で試してみよう

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()
    {
        // 矢印キーまたは A キーと D キーで移動し、壁の間にとどまる。
    }
}

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

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