Unity의 FPS 플레이어에 크라우칭 추가하기

웅크리기 메커니즘을 추가하면 몰입도를 높이고 특히 1인칭 및 잠입 기반 게임에서 게임플레이에 전술적 깊이를 제공할 수 있습니다. Unity FPS 컨트롤러 튜토리얼을 기반으로 이 가이드에서는 Unity에 부드러운 웅크리기 기능을 추가하는 방법을 보여줍니다.

전제 조건

단계

  • Unity FPS Controller 튜토리얼의 '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;

질문:

  1. 웅크리고 있는 동안 카메라 전환에 'Vector3.Lerp()'을 사용하는 이유는 무엇입니까?: 'Vector3.Lerp()' 기능은 두 벡터 사이를 부드럽게 보간하는 데 사용됩니다. 이러한 맥락에서 카메라가 갑자기 스냅되는 대신 서 있는 위치와 웅크린 위치 사이를 유동적으로 전환할 수 있습니다.
  2. 'crouchTransitionSpeed'?의 역할은 무엇입니까? 'crouchTransitionSpeed'은 웅크린 카메라 위치와 서 있는 카메라 위치 사이의 전환이 얼마나 빨리 이루어지는지를 결정합니다. 값이 높을수록 전환 속도가 빨라집니다.
  3. 크라우치 키를 맞춤 설정할 수 있나요?: 물론이죠. 현재 웅크리기 키는 'C'('KeyCode.C')으로 설정되어 있습니다. 크라우칭 키를 조정하려면 원하는 'KeyCode'로 교체하세요.

결론

콜라이더 크기와 카메라 위치를 모두 조정하는 부드러운 웅크리기 메커니즘을 Unity에 통합하면 플레이어 몰입도를 크게 높일 수 있습니다. 이 가이드에서는 자연스럽고 유동적인 전환을 통해 이를 달성하는 방법을 제공했습니다.

추천 기사
유니티 FPS 컨트롤러
캐릭터 컨트롤러 Unity에서 강체를 푸시하는 기능을 추가하는 방법
Unity용 플레이어 3D 및 2D 벽 점프 튜토리얼
Unity 모바일 터치 컨트롤을 만드는 방법
Unity용 2D 캐릭터 컨트롤러
Unity용 헬리콥터 컨트롤러
Unity의 2D 플랫폼 게임 캐릭터 컨트롤러에 이중 점프 지원 추가