十字キー操作で、オブジェクトを簡単に動かせるスクリプトは、以前の記事で作ってみました。
今回は、CharacterControllerを使用して、オブジェクトが階段をかけ上れるように動きをつけてみましょう。
このように、階段にぶつかっても上っていく動きです。
関連記事:
CharacterController.Moveによるジャンプ移動
進行方向へ回転するプレーヤー操作1
進行方向へ回転するプレーヤー操作2
乗れば下降していく床
徐々に加速、減速する自然な動き
キャラクターコントローラーに発射機能
CharacterControllerの衝突判定
階段の用意
まずは階段のオブジェクトを用意しましょう。
平面オブジェクト、2つのキューブを新規作成します。
1つ目のキューブの位置はXYZすべて0にしました。
2つ目のキューブの位置は、Yを0.5、Zを1に変更。
わかりやすいように、床をグレーに、階段を黒に着色しました。
CharacterControllerを使う
続いて、カプセルを作成し、階段の前に配置します。
カプセルに、CharacterControllerを追加します。
コンポーネントを追加 > 物理 > キャラクターコントローラー
方向をわかりやすくするために、Sphereを取り付けます。
Sphereを作成してから、Capsuleの中にドラッグ&ドロップしましょう。
Sphereのスケールをすべて0.5にします。
カプセルのZ方向に、Sphereを埋め込みます。
これでカプセルの前面が確認しやすくなりました。
SimpleMoveを使って動かす
このままプレイしても、カプセルは動きません。
カプセルの動作させるには、スクリプトが必要です。
CapsuleMove.csを作成し、Capsuleに追加しましょう。
CapsuleMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CapsuleMove : 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); } } |
ゲームプレイしてみましょう。
左右キーで回転、上下キーで前後移動します。(WASDキーでも操作可能。)
カプセルが動きましたが、階段を上ることができません。
階段のキューブは、高さが0.5あります。
CharacterControllerの「ステップオフセット」を0.5に変更しましょう。
これで、階段を上ることができました。
CharacterControllerを使用した場合、リジッドボディは効かないため、通常は重力的なものをスクリプトで作らないといけません。
今回使用したSimpleMoveでは、重力が自動的に加えられます。
SimpleMoveはジャンプの動きはありませんが、フィールド内を簡単に動かしていく際に便利な機能です。
関連記事:
CharacterController.Moveによるジャンプ移動
進行方向へ回転するプレーヤー操作1
進行方向へ回転するプレーヤー操作2
乗れば下降していく床
徐々に加速、減速する自然な動き
キャラクターコントローラーに発射機能
CharacterControllerの衝突判定