[Unity] 3D 퍼즐 플랫포머 게임 개발-1

Connected Brain·2025년 3월 12일

Unity 3D를 활용한 Dungeon 만들기

필수요소

  1. 퍼즐 디자인
  2. 플레이어 캐릭터 및 컨트롤
  3. 퍼즐 해결 시스템
  4. 장애물 및 트랩
  5. 목표 지점
  6. 게임 진행 상태 및 저장
  7. 사운드 및 음악

트러블 슈팅

  • 지난 3D 던전 만들기에서 문제가 되었던 부분을 이번에도 비슷한 요소를 팀에서 담당하게 되면서 해결할 수 있었다.
private void LateUpdate()
{
    isFPSMode = inputHandler.cameraChange;

    if (inputHandler.mouseDelta != prevMouseDelta)
    {
        cameraCurRot.x += inputHandler.mouseDelta.x * lookSentitivity;
        cameraCurRot.y += inputHandler.mouseDelta.y * lookSentitivity;

        if (isFPSMode)
            FPSCameraLook();
        else
            TPSCameraLook();

        prevMouseDelta = inputHandler.mouseDelta;
    }

    
}
  • 지난 프로젝트에서 카메라를 조작할 때, 마우스가 가만히 있어도 현재 위치값이 입력되어 화면이 회전하는 문제를 해결하기 위해, 이전과 마우스 위치가 바뀌지 않았을 때는 움직이지 않도록 하는 것을 추가했어야 했다.
InputAction lookAction = playerActionMap.FindAction("Mouse");
lookAction.performed += context => mouseDelta = context.ReadValue<Vector2>().normalized;
lookAction.canceled += context => mouseDelta = Vector2.zero;
  • 그러나 이번에는 마우스도 다른 키와 동일하게 입력이 없을 때는 0 벡터를 입력하게 할 수 있다는 것을 알게 되어 이 문제를 수정할 수 있었다.

  • 이전에는 이를 마우스를 이동시키는 부분에서 조작해야 해서 카메라가 플레이어를 따라가야하는 로직은 마우스의 변동과 관계없이 적용되어야하므로 이를 분리하는 등의 행동이 필요했는데 이제 그럴 필요가 없어졌다.

void Look()
{
    float mouseX = inputHandler.mouseDelta.x * Time.deltaTime * cameraSensitivity;
    float mouseY = inputHandler.mouseDelta.y * Time.deltaTime * cameraSensitivity;

    camRotY += mouseX;
    camRotX -= mouseY;

    camRotX = Mathf.Clamp(camRotX, minRotX, maxRotX);

    camera.transform.position = fpsCameraTransform.position;
    camera.transform.rotation = Quaternion.Euler(camRotX, camRotY, 0);
    transform.rotation = Quaternion.Euler(0, camRotY, 0);
}
  • 최종적으로 보다 깔끔한 1인칭 카메라 로직을 만들 수 있었다.
    그러나 지금 InputAction을 C# event Invoker로 만들어 두었는데 이것이 다른 환경에서는 작동하지 않아 이에 대한 수정이 필요할 것으로 보인다.

0개의 댓글