Menu
CoddyTech

アリーナ

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 59/71。

この章では「Arena Escape」を作ります。壁に囲まれたアリーナでハンターをかわしながら、次々と押し寄せるハンターの波を切り抜けます。3回攻撃を受けるとゲームオーバーになり、最後のウェーブが終わると出口が開きます。ゲームは最初からプロジェクトにある5つのスクリプトで構成されています。Player、Hunter、Spawner、Health、Exitです。最後の4つは今のところ空で、各レッスンで1つずつ作成します。

プレイヤーは自分で設定する速度ではなく力で移動するため、ハンターからのノックバックが移動に加わり、打ち消されません。押すだけでは速度がいつまでも上がってしまうので、linearDampingによって各ステップで速度が少しずつ減ります。一定の力で押し続けると、最高速度はおよそ加速度を減衰値で割った値に落ち着きます。このホバーソリは、Spaceキーを押している間、前方に進みます。

[SerializeField] private float accel = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.linearDamping = 2f;
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
    }
}

加速度が12、減衰値が2の場合、ソリの最高速度は毎秒およそ6ユニットです。Spaceキーを離すと、減衰によってソリはいつまでも滑り続けるのではなく、停止します。ForceMode.Accelerationは質量を無視するため、重いソリも軽いソリとまったく同じように加速します。ソリのコライダーには摩擦のないPhysicsMaterialが設定されています。減衰に加えて床との摩擦もあると、最高速度はさらに低くなります。

challenge icon

チャレンジ

中級

Arena Escapeを開始して、力を使ってプレイヤーを滑らせましょう。

  1. Start()内で、GetComponentの行の後にrb.linearDamping = accel / topSpeed;を設定し、速度がtopSpeed付近で落ち着くようにします。
  2. FixedUpdate()内で、new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"))を作成します。
  3. そのnormalizedにaccelを掛けた値を、ForceMode.Accelerationを指定してrb.AddForceに渡します。

「プレイ」を押して、アリーナを滑り回りましょう。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float accel = 18f;
    [SerializeField] private float topSpeed = 6f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // 減衰を設定してから、矢印キーでプレイヤーを動かす
    }
}

物理演算とゲームプレイのすべてのレッスン

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