Menu
CoddyTech

アリーナ

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

この章では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を開始します。InspectorでPlayerスクリプトにaccel(18)とtopSpeed(6)を設定します。プレイヤーの質量は2で、摩擦のないマテリアルを使用し、残り4つのスクリプトは今のところ空のままにします。

  • Startで、RigidbodyのlinearDampingをaccel / topSpeedに設定し、プレイヤーの速度が約topSpeedで頭打ちになるようにします。
  • 物理演算の各ステップで、矢印キーを使ってプレイヤーを動かします。左右はx軸方向、上下はz軸方向に、ForceMode.Accelerationと加速度accelを使って力を加えます。
  • 矢印キーの方向を正規化し、斜め移動が直線移動より速くならないようにします。

Playを押してアリーナ内を滑るように移動し、次にCheckを押します。

自分で試してみよう

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()
    {
        // 減衰を設定してから、矢印キーでプレイヤーを動かす
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

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