※Character Controllerでキャラクターを実際に動かす方法は、このページで解説しています。
Character Controller の各プロパティの動作を確認するため、
CapsuleにCharacter Controllerをアタッチし、キーボードで操作できるようにしています。
また、Capsuleには以下のコードのスクリプトをアタッチしています。
using UnityEngine;
public class SampleScript : MonoBehaviour
{
public float moveSpeed = 5.0f; // 移動速度
public float jumpHeight = 2.0f; // ジャンプの高さ
public float gravity = -9.81f; // 重力
private CharacterController controller; // CharacterControllerコンポーネント
private Vector3 velocity; // 速度
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// 地面との接触判定
bool isGrounded = controller.isGrounded;
// 水平方向の移動
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
// 移動ベクトルを計算 (右方向 * x + 前方向 * z)
Vector3 move = transform.right * x + transform.forward * z;
// CharacterControllerを使って移動
controller.Move(move * moveSpeed * Time.deltaTime);
// ジャンプ処理
if (isGrounded)
{
if (Input.GetButtonDown("Jump"))
{
// ジャンプ速度を計算
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}
}
// 重力を適用
velocity.y += gravity * Time.deltaTime;
if (isGrounded && velocity.y < 0)
{
// 速度をリセット
velocity.y = -2f;
}
// CharacterControllerを使って移動 (重力による落下)
controller.Move(velocity * Time.deltaTime);
}
}
ここから、プロパティの解説です。
Character Controller が登れる坂道の最大角度を設定します。この角度を超えると、Character Controller は坂道を登らなくなります。
例:30度に傾いている床に対してSlope Limit を 20 (赤) と 45 (黒) に設定した場合
Character Controller が自動的に乗り越えられる段差の最大高さを設定します。
例:Step Offset を 1 (赤) と 0.3 (黒) に設定した場合
Character Controller の表面から衝突判定に使用される領域の距離を設定します。Skin Width が小さいと、Character Controller が壁にめり込む可能性があります。また、大きすぎると、狭い場所を通り抜けられなくなることがあります。
例:Skin Width を 1 (赤) と 0.08 (黒) に設定した場合
Character Controller が移動する最小距離を設定します。この距離よりも小さい移動は無視されます。
例:Min Move Distance を 0.2 (赤) と 0.001 (黒) に設定した場合
Character Controller の中心位置を設定します。Character Controller の高さを調整する際に使用します。
例:Center を (0, 1, 0) (赤) と (0, 0, 0) (黒) に設定した場合
Character Controller の半径を設定します。Character Controller の幅を調整する際に使用します。
例:Radius を 1 (赤) と 0.5 (黒) に設定した場合
Character Controller の高さを設定します。
例:Height を 3 (赤) と 2 (黒) に設定した場合
Character Controller が地面に接地しているかどうかを示す読み取り専用のプロパティです。ジャンプ処理などに使用します。
例:接地判定を利用してジャンプ処理を実装した場合