카테고리 없음

[Unity 3D] 3인칭 카메라 구현 - TPS 카메라

TIM_0529 2022. 12. 21. 17:16
반응형
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 게임에서 사용되는 방식의 카메라 기법을 구현했다.

카메라에 회전이 캐릭터에 rotation 값에 영향을 주지 않는다.

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도로 값을 제한한다. 

 

반응형