【Unity】CharacterControllerで接地判定のサンプル

UnityのCharacterControllerは、キャラクターの移動や衝突判定を簡単に処理することができます。キャラクターが設置されているかどうかを判定するには、以下のようにCharacterController.isGroundedプロパティを使用します。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private CharacterController controller;
    private Vector3 playerVelocity;
    private bool groundedPlayer;
    private float playerSpeed = 2.0f;
    private float jumpHeight = 1.0f;
    private float gravityValue = -9.81f;

    private void Start()
    {
        controller = gameObject.GetComponent<CharacterController>();
    }

    void Update()
    {
        groundedPlayer = controller.isGrounded;
        if (groundedPlayer && playerVelocity.y < 0)
        {
            playerVelocity.y = 0f;
        }

        Vector3 move = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        controller.Move(move * Time.deltaTime * playerSpeed);

        if (move != Vector3.zero)
        {
            gameObject.transform.forward = move;
        }

        // ジャンプ処理
        if (Input.GetButtonDown("Jump") && groundedPlayer)
        {
            playerVelocity.y += Mathf.Sqrt(jumpHeight * -3.0f * gravityValue);
        }

        playerVelocity.y += gravityValue * Time.deltaTime;
        controller.Move(playerVelocity * Time.deltaTime);
    }
}

この例では、CharacterControllerコンポーネントを使用して、プレイヤーの移動とジャンプを制御しています。CharacterController.isGroundedプロパティを使用して、キャラクターが設置されているかどうかを判定しています。設置されている場合は、playerVelocity.yを0にリセットします。また、Input.GetButtonDown("Jump")メソッドを使用して、ジャンプボタンが押されたときにジャンプ処理を行います。playerVelocity.yに計算されたジャンプ力を加え、gravityValueで重力をかけることで、自然なジャンプを実現しています。

以上が、CharacterControllerで設置判定を行うサンプルの説明です。このように、CharacterControllerを使用することで、簡単にキャラクターの移動や衝突判定を実現することができます。

Unity,学習

Posted by hidepon