Unity の FPS プレーヤーにしゃがみを追加する

しゃがみ メカニズムを追加すると、特に一人称ゲームやステルスベースのゲームで没入感が深まり、ゲームプレイに戦術的な深みがもたらされます。Unity FPS コントローラー チュートリアルに基づいて構築されたこのガイドでは、Unity にスムーズなしゃがみ機能を追加する方法を紹介します。

前提条件

ステップ

public bool isCrouching = false;
public float crouchHeight = 0.5f;
public float crouchSpeed = 3.5f;
public float crouchTransitionSpeed = 10f;
private float originalHeight;
public float crouchCameraOffset = -0.5f;
private Vector3 cameraStandPosition;
private Vector3 cameraCrouchPosition;
  • 'Start()' メソッドを変更して、'CharacterController' の元の高さを保存し、カメラの位置を設定します。
void Start()
{
    characterController = GetComponent<CharacterController>();
    originalHeight = characterController.height;

    // Define camera positions for standing and crouching
    cameraStandPosition = playerCamera.transform.localPosition;
    cameraCrouchPosition = cameraStandPosition + new Vector3(0, crouchCameraOffset, 0);

    // Lock cursor
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = false;
}
  • 'Update()' メソッドで、しゃがみキーが押されたことを確認し、'isCrouching' 変数を切り替えます。
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • 前のブロックの外側で、しゃがんだ状態と立っている状態の間のカメラの位置のスムーズな移行を実装します。
if (isCrouching)
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraCrouchPosition, crouchTransitionSpeed * Time.deltaTime);
}
else
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraStandPosition, crouchTransitionSpeed * Time.deltaTime);
}
  • 現在の状態に基づいてプレーヤーの移動速度を調整します。
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

質問:

  1. しゃがんでいるときのカメラの遷移に 'Vector3.Lerp()' を使用するのはなぜですか?: 'Vector3.Lerp()' 関数は、2 つのベクトル間を滑らかに補間するために利用されます。この文脈では、カメラが突然スナップするのではなく、立った位置としゃがんだ位置の間を流動的に移行できるようになります。
  2. 'crouchTransitionSpeed'? の役割は何ですか?: 'crouchTransitionSpeed' は、しゃがんだカメラ位置と立っているカメラ位置の間の移行速度を決定します。値が大きいほど、遷移が速くなります。
  3. しゃがむキーをカスタマイズすることはできますか?: もちろんです。現在、しゃがみキーは 'C' ('KeyCode.C') に設定されています。しゃがみキーを調整するには、任意の 'KeyCode' に置き換えてください。

結論

Unity にスムーズにしゃがむメカニズムを組み込むと、コライダー サイズとカメラの位置の両方を調整する必要があり、プレイヤーの没入感を大幅に高めることができます。このガイドでは、これを自然で流動的な移行で実現する方法を提供します。

おすすめの記事
Unity FPS コントローラー
Unity の 2D プラットフォーマー キャラクター コントローラーにダブル ジャンプ サポートを追加する
Unity モバイル タッチ コントロールの作り方
キャラクター コントローラー Unity でリジッドボディをプッシュする機能を追加する方法
Unity 用プレーヤー 3D および 2D ウォール ジャンプ チュートリアル
Unity のキャラクター コントローラーに移動プラットフォームのサポートを追加する方法
Unity の宇宙船コントローラー