- 개요
키를 입력하여 메인 메뉴와 게임 메뉴를 전환하고 메뉴에 따라 카메라의 시점을 전환한다
또, 카메라에 흔들거림 효과를 추가하여 충격을 받는 듯한 시각 효과를 연출한다
- 애셋 작업
1) InputAction 애셋

위와 같이 OpenMenu 액션 + OpenGame 액션 + TestShake 액션을 추가한다
숫자키 1번 + 숫자키 2번 + V 키로 액션을 실행하며 TestShake 액션은 흔들거림 효과를 재생한다
- 스크립트 작업
1) CameraEffect 클래스

카메라의 시각효과를 담당하는 CameraEffect 클래스를 생성한다
위와 같이 멤버변수를 구성한다
- Menu View 멤버변수 : 메인 메뉴에서의 카메라 시점과 관련된 멤버변수
- Game View 멤버변수 : 게임에서의 카메라 시점과 관련된 멤버변수
- Screenshake Settings 멤버변수 : Range 속성을 사용하여 랜덤한 흔들림 효과를 적용하는 멤버변수
- camController 멤버변수 : 카메라에서 사용중인 CameraController 컴포넌트

Awake 함수를 위와 같이 구성하여 camController 멤버변수의 값을 설정한다

ChangePositionAndRotation 코루틴 함수를 구현하여 메뉴에 따라 카메라의 시점을 변경한다
해당 코루틴 함수를 호출하여 인자로 받은 duration 시간 동안 부드럽게 카메라의 시점을 전환한다
카메라를 이동시키기 전에 delay만큼 대기한 후에, CameraController 컴포넌트를 비활성화한다
이후, while 루프를 사용하여 보간을 통해 카메라의 위치와 회전을 변경한다
이후 CameraController 컴포넌트에서 필요한 함수를 호출하여 정보를 동기화하고 활성화한다

ScreenshakeFX 코루틴 함수를 구현하여 카메라의 흔들거림 효과를 연출한다
while 루프를 통해 매 프레임마다 CameraController의 SetShakeOffset 함수를 호출하여 흔들거림 효과를 연출한다
이후 SetShakeOffset 함수에 원점 벡터를 넘겨주어 값을 원상복구한다

코루틴 함수들을 호출하는 함수들을 위와 같이 구현하였다
SwitchToMenuView 함수를 호출하여 카메라의 시점을 메뉴에 맞게 전환한다
SwitchToGameView 함수를 호출하여 카메라의 시점을 게임에 맞게 전환한다
ScreenShake 함수를 호출하여 카메라의 흔들거림을 연출한다

키를 입력하여 Action이 발동되면 호출하는 콜백 함수들을 위와 같이 구현한다
각각 OpenMenu 액션 + OpenGame 액션 + TestShake 액션에 연결되는 콜백 함수들이다

Start 함수를 위와 같이 구현하여 초기에는 메뉴 시점으로 카메라의 시점을 변경한다
2) CameraController 클래스

이전에 존재하던 위 2개의 멤버변수를 분리하여 구분한다

새로운 2개의 멤버변수를 추가한다
- canControl 멤버변수 : CameraController의 활성화 여부
- shakeOffset 멤버변수 : 카메라의 흔들거림을 연출하기 위한 값

LateUpdate 함수에 로직을 추가하여 CameraController가 활성화되지 않으면 얼리 리턴한다

ClampToMaxDistance 함수를 추가하여 클램핑 로직을 통일한다
맵의 중심을 기준으로 카메라가 이동할 수 있는 범위를 제한하여 반환한다

SyncTargetPosition 함수를 추가하여 targetZoomPosition 값을 인자로 받은 값과 통일한다
따라서 줌의 기준 위치와 줌의 보간 속도를 동기화하여 카메라의 오작동을 방지한다

SyncCameraRotation 함수를 추가하여 카메라의 Yaw 값과 Pitch 값을 설정한다
이때, Pitch 값이 180을 넘어서 카메라가 뒤집히는 현상을 방지한다
이후 카메라 오브젝트의 회전값도 동기화한다

위와 같이 Setter 함수들을 추가한다
EnableCameraConrolls 함수를 호출하여 카메라의 활성화 여부의 불리언 변수를 설정한다
AdjustCameraPitchValue 함수를 호출하여 카메라의 Pitch 값을 설정한다
SetShakeOffset 함수를 호출하여 카메라의 흔들거리는 거리값을 설정한다

HandleCameraMovement 함수의 로직을 위와 같이 수정하여
통일된 클램핑 로직을 사용하여 WASD 키에 따라 카메라가 이동할 값을 설정한다

HandleCameraZoom 함수의 로직을 위와 같이 수정하여
카메라가 활성화되어 있다면 통일된 클램핑 로직을 사용하고 보간하여 카메라를 스크롤 입력값에 따라 줌한다
이때 줌하는 값에 흔들림 효과를 추가한다

HandleMouseMovement 함수에서도 동일하게 통일된 클램핑 로직을 사용한다

HandleEdgeMovement 함수에서도 동일하게 로직을 수정하여 통일된 클램핑 로직을 사용한다
- 최종 실행 결과

'유니티 엔진 - 게임 프로젝트 > 타워 디펜스 게임' 카테고리의 다른 글
| UI - 2) 인게임 UI 구성 (0) | 2026.07.06 |
|---|---|
| UI - 1) UI간의 전환과 UI별 기능 설정 (0) | 2026.06.30 |
| 카메라 - 3) 화면 가장자리 이동 (0) | 2026.06.24 |
| 카메라 - 2) 카메라의 줌 조절과 화면 드래그 (0) | 2026.06.23 |
| 카메라 - 1) 카메라의 이동과 회전 (0) | 2026.06.23 |