アリーナ
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が設定されています。床との摩擦も減衰に加わると、最高速度はさらに低くなります。
チャレンジ
中級プレイヤーを操作して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()
{
// 減衰を設定してから、矢印キーでプレイヤーを動かす
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。