Unity の FPS プレーヤーにしゃがみを追加する
しゃがみ メカニズムを追加すると、特に一人称ゲームやステルスベースのゲームで没入感が深まり、ゲームプレイに戦術的な深みがもたらされます。Unity FPS コントローラー チュートリアルに基づいて構築されたこのガイドでは、Unity にスムーズなしゃがみ機能を追加する方法を紹介します。
前提条件
- Unity interface に関する基本的な知識。
- Unity 'CharacterController' の理解。
- Unity FPS コントローラー チュートリアルの FPS コントローラー スクリプト。
ステップ
- Unity FPS コントローラー チュートリアルの 'SC_FPSController' という名前の class に、しゃがむことを処理する次の変数を追加します。
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;
質問:
- しゃがんでいるときのカメラの遷移に 'Vector3.Lerp()' を使用するのはなぜですか?: 'Vector3.Lerp()' 関数は、2 つのベクトル間を滑らかに補間するために利用されます。この文脈では、カメラが突然スナップするのではなく、立った位置としゃがんだ位置の間を流動的に移行できるようになります。
- 'crouchTransitionSpeed'? の役割は何ですか?: 'crouchTransitionSpeed' は、しゃがんだカメラ位置と立っているカメラ位置の間の移行速度を決定します。値が大きいほど、遷移が速くなります。
- しゃがむキーをカスタマイズすることはできますか?: もちろんです。現在、しゃがみキーは 'C' ('KeyCode.C') に設定されています。しゃがみキーを調整するには、任意の 'KeyCode' に置き換えてください。
結論
Unity にスムーズにしゃがむメカニズムを組み込むと、コライダー サイズとカメラの位置の両方を調整する必要があり、プレイヤーの没入感を大幅に高めることができます。このガイドでは、これを自然で流動的な移行で実現する方法を提供します。