はじめに
Unityでゲームを開発していると、キャラクターに階段をスムーズに駆け上がらせたいと思うことがよくあります。UnityのCharacterControllerコンポーネントを使えば、コードを書くことなく、簡単にこれを実現できます。この記事では、UnityのCharacterControllerを使用してオブジェクトが階段をかけ上がる方法を、初心者でも理解できるように解説します。
CharacterControllerの基本
まず、Unityのプロジェクトにキャラクターを用意しましょう。キャラクターには「CharacterController」コンポーネントを追加します。CharacterControllerは、キャラクターの移動や衝突判定を簡単に管理できる強力なツールです。この記事ではcapsuleとSphireを使用してキャラクターを作成しました。Sphireをcapsuleの子オブジェクトにして正面がどこか分かるようにしておきます。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-07_172827.png)
階段の準備
階段をキャラクターが駆け上がるためには、階段にも適切な設定が必要です。階段を構成する各ステップには、Collider(衝突判定)が適用されていることを確認してください。これにより、キャラクターと階段が物理的に反応し合います。この記事では2つのキューブを新規作成し、階段になるように配置しました。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-07_172111.png)
プレイヤーのスクリプト
このスクリプトはUnityのCharacterController
コンポーネントを使用して、プレイヤーのキャラクターを操作するためのものです。キャラクターは左右の矢印キー(またはA、Dキー)を使って回転し、上下の矢印キー(またはW、Sキー)を使って前後に移動します。このコードは、特に3Dゲームでキャラクターの基本的な動きを実装する際に役立ちます。
public float speed = 3.0f;
: キャラクターの前後移動の速度を設定します。public float rotateSpeed = 3.0f;
: キャラクターの左右の回転速度を設定します。
Update
メソッド:
CharacterController controller = GetComponent<CharacterController>();
: ゲームオブジェクトにアタッチされたCharacterController
コンポーネントを取得します。transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);
: 水平方向(左右キーまたはA、Dキー)の入力を受け取り、それに基づいてキャラクターをY軸を中心に回転させます。rotateSpeed
は回転の速さを調整します。Vector3 forward = transform.TransformDirection(Vector3.forward);
: キャラクターの前方向を取得します。float curSpeed = speed * Input.GetAxis("Vertical");
: 垂直方向(上下キーまたはW、Sキー)の入力を受け取り、それにspeed
を乗算して現在の移動速度を計算します。controller.SimpleMove(forward * curSpeed);
: 計算された速度でキャラクターを前方に移動させます。SimpleMove
は自動的に重力の影響を加えるため、キャラクターが地面に接触しているかのように振る舞います。
このスクリプトを使用するには、まずUnityエディタ内でキャラクターにCharacterController
コンポーネントを追加し、その後このスクリプトをキャラクターにアタッチしてください。これで、キーボードの入力に応じてキャラクターを動かすことができるようになります。
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public float speed = 3.0f;
public float rotateSpeed = 3.0f;
void Update()
{
CharacterController controller = GetComponent<CharacterController>();
// 左右キー Yを軸として回転
transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);
// 上下キー 前後移動
Vector3 forward = transform.TransformDirection(Vector3.forward);
float curSpeed = speed * Input.GetAxis("Vertical");
controller.SimpleMove(forward * curSpeed);
}
}
スムーズに移動する
CharacterControllerを使って階段をスムーズに駆け上がるためのキーは、「Slope Limit」と「Step Offset」の設定です。CharacterControllerのインスペクターからこれらの値を調整しましょう。
- Slope Limit: 斜面を登れる最大角度を指定します。階段をスムーズに上がるためには、この値を実際の階段の角度に合わせるか、それよりも少し大きめに設定すると良いでしょう。
- Step Offset: キャラクターが乗り越えられる階段の高さを指定します。階段の高さに合わせてこの値を調整しましょう。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-07_174016.png)
実際に動かしてみる
設定が完了したら、ゲームを実行してキャラクターを動かしてみましょう。
改善案
- キャラクターが階段を登る際に自然に見えるように、アニメーションを適切に調整しましょう。
- キャラクターが階段を駆け上がる速度を調整することで、ゲームの難易度を微調整できます。
- Unityの物理エンジンとCharacterControllerの相互作用により、時には意図しない動きが生じることがあります。そのため、階段の設計やキャラクターの移動ロジックを微調整することが重要です。
まとめ
UnityのCharacterControllerを使用することで、階段をスムーズに駆け上がるキャラクターを簡単に作成できます。この記事で紹介したステップを試しながら、あなたのゲームに最適な設定を見つけてください。Unityでのゲーム開発は試行錯誤の過程です。さまざまな設定を試して、最高のゲーム体験を作り出しましょう。