https://dnddkqja21.tistory.com/47
3rd Person Camera - Chaper 04. Move towards the camera (3인칭 카메라 - 챕터04. 카메라가 보는 방향으로 이동)
https://dnddkqja21.tistory.com/44 3rd Person Camera - Chaper 03. Rotate Camera (3인칭 카메라 - 챕터03. 카메라 회전) https://dnddkqja21.tistory.com/43 3rd Person Camera - Chaper 02. Follow Camera (3인칭 카메라 챕터2. 플레이어 추적
dnddkqja21.tistory.com
지난 시간에는 카메라의 회전에 플레이어의 방향을 대입하여 카메라가 회전하여도 어색하지 않도록 이동하는 것을 구현해보았습니다.
이번에는 3인칭 카메라 마지막 챕터! 바로 카메라 줌인 줌아웃입니다.
카메라 줌인, 줌아웃을 구현하는 방식은 여러가지가 있습니다.
여러분은 어떻게 만드시겠어요??
저는 간단하게 아래와 같이 생각해보았습니다.
에디터에서 카메라 오브젝트를 선택 후 z축을 기준으로 앞, 뒤로 이동시켜 보세요.
게임 탭을 보면 플레이어로 부터 카메라가 멀어지거나 가까워짐에 따라 줌인, 줌아웃 효과를 내는 것을 보실 수 있습니다.
거두절미하고 바로 스크립트 작성에 들어가봅시다!
새 스크립트를 생성 후 CameraZoom으로 명명하겠습니다.
지난번에도 사용했었던 유니티의 Input 클래스를 사용할 건데요.
Input.GetAxis("Mouse ScrollWheel"); 와 같이 작성해줍니다.
마우스 스크롤링을 함에 따라 -1 ~ 1의 값을 반환하며 이 값을 사용하여 줌인, 줌아웃 등을 구현할 수 있죠.
public class CameraZoom : MonoBehaviour
{
float wheel;
float wheelSpeed = 2f;
float minZoom = -7.5f;
float maxZoom = -1.5f;
}
우선 위에 설명했던 인풋값을 받을 wheel 변수, 줌인 줌아웃을 통제할 스피드 변수, 최대 줌 거리, 최소 줌 거리를 담을 변수를 작성해주었습니다.
위의 값은 [SerializeField] 또는 public 을 붙여 에디터에서 확인하시면서 변경하셔도 좋습니다.
void Update()
{
wheel += Input.GetAxis("Mouse ScrollWheel");
if (wheel != 0)
{
wheel = Mathf.Clamp(wheel, minZoom, maxZoom);
transform.localPosition = new Vector3(0, 0, wheel) * wheelSpeed;
}
}
업데이트 함수에서 wheel 변수에 마우스 스크롤링이 반환하는 값을 누적 시켜줍니다.
줌인, 줌아웃은 마우스 스크롤링이 있을 때만 동작해야 하므로 if 문의 조건으로 wheel이 0이 아닐 때를 주었습니다.
그리고 wheel의 값을 Mathf.Clamp()를 사용하여 제한해주었습니다.
마지막으로 wheel 값을 이용하여 카메라 포지션의 z값을 변경해줍니다.
작성한 스크립트를 카메라 오브젝트에 추가해주세요.
이후에 에디터를 실행하고 마우스 휠을 스크롤링 해보세요.
우리가 지정했던 제한 거리만큼 줌인, 줌아웃 되는 것을 확인할 수 있습니다.
지금까지 잘 따라오셨다면 제법 그럴싸한 3인칭 카메라를 구현하셨을 겁니다.
물론 저는 아주 간단하게 만들어 보았구요.
여러분이 여기에 다른 좋은 아이디어를 추가하여 더 좋은 3인칭 카메라를 구현하시기를 바랍니다.
지금까지 만들었던 기능들을 종합해보았습니다.
키보드 방향키 입력에 의한 플레이어 이동
3인칭 카메라 뷰 (회전, 줌)
그동안 수고하셨습니다.
다음에 또 뵈어요 :D