2Dのプレイヤーキャラをキー操作で左右に移動させます。
簡易版
- キー操作用スクリプトを作成。
- キャラオブジェクトに「Rigidbody2D」を追加。
- キー操作用スクリプトをキャラオブジェクトにアタッチ。
- 必要なら「メインカメラ」をキャラオブジェクトの「子」にして追尾させる。
スクリプトについて
キー操作スクリプト
「←」「→」もしくは「a」「d」キーでの操作を可能とする、新規スクリプトを作成します。
ファイル名は任意です。今回は「PlayerControler2D」としました。
using UnityEngine;
public class PlayerControler2D : MonoBehaviour
{
public float speed = 5f;
private Rigidbody2D rb;
void Start()
{
rb = GetComponent();
}
void FixedUpdate()
{
float move = Input.GetAxisRaw(“Horizontal”);
rb.velocity = new Vector2(move * speed, rb.velocity.y);
}
}
「Update」と「FixedUpdate」について
キャラ移動時には「Update関数」を使わずに「FixedUpdate関数」を使うほうが良いらしいので、詳しく記載。
移動時にワープしてしまうかもしれないという問題があるためだとかなんとか。
- Update
呼び出しタイミング: フレームごとに1回呼び出されます。
ゲームのフレームレートによって呼び出し頻度が変わります。- 用途:ユーザー入力の処理、非物理的なオブジェクトの更新、アニメーションなど、フレームレートに依存する処理に適しています。
- 特徴:不定期で、フレームごとの時間間隔が一定ではないため、物理演算には不向きです。
- FixedUpdate
呼び出しタイミング: 固定のタイムステップごとに呼び出されます。
デフォルトでは、0.02秒ごと(50回/秒)に呼び出されます。- 用途:物理演算(Rigidbodyの操作など)、一定のタイミングが求められる処理に適しています。
- 特徴:一定の時間間隔で呼び出されるため、物理演算において安定したシミュレーションが可能です。
キー操作でオブジェクトを移動させる場合、物理演算を用いることが一般的です。
Rigidbodyを使用している場合、FixedUpdateのほうが適しています。
- 物理演算の一貫性
FixedUpdateは一定の時間間隔で呼び出されるため、物理演算が安定し、予測可能になります。
これにより、オブジェクトの動きが滑らかになります。 - 衝突判定の安定性
物理エンジンの衝突判定もFixedUpdateと同期しているため、移動や衝突の処理が一貫して行われます。
「GetKey」と「GetAxis(GetAxisRaw)」について
キー操作での「キー入力設定」の違いも知っておいた方が良いみたいなので、詳しく記載。
「Input Manager」(ゲームパッドなど外部入力デバイス用)パッケージを使用していると仮定しています。
- GetKey
- キーボードの特定のキーに直接マッピングされる。
- 特定のキー入力をチェックする必要があるときに便利。
- GetAxis(GetAxisRaw)
- Input Managerで定義された仮想軸にマッピングされる。
- キーボード、ジョイスティック、ゲームパッドなど、さまざまな入力デバイスに対応可能。
例えば「Horizontal」や「Vertical」といった軸は、キーボードの矢印キーやWASD、ジョイスティックのスティック入力に対応できます。 - プロジェクト全体での入力設定の管理が簡単になり、必要に応じてキーの割り当てを変更することも容易です。
- GetAxis
入力の変化を滑らかにするための補間が行われます。
これにより、例えば、ゲームキャラクターの動きが滑らかになります。 - GetAxisRaw
補間が行われず、入力値がそのまま使用されます。
素早い反応が求められる場面ではこちらが適しています。
Rigidbody 2D を追加
動かしたいオブジェクト(プレイヤーキャラ)にコンポーネントを追加します。
「Add Component」>「Rigidbody 2D」
必要に応じて「重力」などの設定を変更しておきます。
スクリプトをアタッチ
作成したスクリプト「PlayerControler2D」をプレイヤーキャラにアタッチします。
「Speed」フィールドにて、移動速度を調整できます。
テストプレイ1
キー移動はできていますが、カメラが追尾していません。
ステージが画面より広い場合、カメラを追尾させましょう。
キャラにカメラを追尾させる
カメラ追尾のもっとも簡単な方法は「プレイヤーキャラ」と「メインカメラ」を親子関係にすることです。
「Main Camera」を「プレイヤーキャラ」(親)にドラッグして入れ子状態(子)にします。
これだけで上下左右の移動に追尾してくれるようになります。
※ジャンプしたときにカメラを上下させたくない場合などは、スクリプトなどで制御する必要があります。
コメント