반응형
private void LookAround()
{
Vector2 mouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
Vector3 cameAngle = cameraArm.rotation.eulerAngles;
float angle_x = cameAngle.x - mouseDelta.y;
if (angle_x < 180f)
angle_x = Mathf.Clamp(angle_x, -1f, 70f);
else
angle_x = Mathf.Clamp(angle_x, 355f, 361f);
cameraArm.rotation = Quaternion.Euler(angle_x, cameAngle.y + mouseDelta.x, cameAngle.z);
}
대부분의 3 인칭 rpg 게임에서 사용되는 방식의 카메라 기법을 구현했다.
mouseDelta 변수에는 2차원 벡터값으로 마우스의 현재 좌표값을 저장한다.
cameAngle 변수는 cameraArm에 회전값을 갖고 있는다.
캐릭터에 머리 위치에 빈 오브젝트를 생성해서 카메라를 담을 CameraArm 오브젝트를 만들어서 사용하면 카메라에 회전과 캐릭터에 회전을 분리해서 구현할 수 있다.
float angle_x = cameAngle.x - mouseDelta.y;
카메라에 상하 회전값에 한계를 주기 위해서 만든 변수이다.
위로 올리면 360도부터 270에 값이 나오고 아래로 내리면 0 도에서 90도까지의 회전값이 나온다.
그 후 x 값에 따라서 값을 분류한다.
angle_x = Mathf.Clamp (angle_x, -1f, 70f);
여기서 0도가 아닌 -1도로 최저점을 잡는 이유는 0도로 잡으면 카메라가 수평면 아래로 내려가지 않는 문제가 발생하게 된다.
아래로 회전할 때 335도에서 361도로 값을 제한한다.
반응형