Character Controllerを使わずにキャラクターを動かす
Unityにはプレーヤーの制御を行う方法がいくつかあります。
Character Controllerとは、Rigid Bodyつまり物理特性を使わずにキャラクターを動かすことを可能にしたものです。
今回は、これを使わずにプレーヤーを動かす方法を考えたいと思います。
SceneとPlayerの配置
次の図のようなSceneを作ります。
PLayer GameObject
Playerの[inspector]->[Add Component]->[Physics]->[Rigidbody]でRigidbody Componentを付けます。
このままだと……
このように転倒してしまいます。なので、Rigidbody ComponentのConstraintsのFreeze RotationのX, Y, Zにチェックを入れます。
ついでにAngular Dragの値も0にしておきましょう。
ここらへんの設定はUnity - マニュアル: Rigidbodyを参考にしてください。
PlayerControllerScript.cs
なお、Rigidbodyと絡める際は、FixedUpdate関数内に記述したほうが良いです。
タイマーもTime.deltaTimeではなく、Time.fixedDeltaTimeを使います。
イベント関数の実行順に関してはUnity - マニュアル: イベント関数の実行順
using UnityEngine; public class PlayerControllerScript : MonoBehaviour { public float speed = 5f; public float rotateSpeed = 120f; void FixedUpdate() { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); Vector3 velocity = new Vector3(0, 0, v); // キャラクターのローカル空間での方向に変換 velocity = transform.TransformDirection(velocity); // キャラクターの移動 transform.localPosition += velocity * speed * Time.fixedDeltaTime; // キャラクターの回転 transform.Rotate(0, h * rotateSpeed * Time.fixedDeltaTime, 0); } }
結果
上記のScriptをPlayer GameObjectにアタッチします。
また、Rigidbodyで動かしているのでこんなこともできます。