【3D】2Dキャラ・キー操作移動(左右)【Unity6】

unity技術

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」を「プレイヤーキャラ」(親)にドラッグして入れ子状態(子)にします。

これだけで上下左右の移動に追尾してくれるようになります。
ジャンプしたときにカメラを上下させたくない場合などは、スクリプトなどで制御する必要があります。

コメント