유니티 카메라 플레이어 추적하기

2020. 4. 28. 21:53유니티실습

반응형

안녕하세요 유니티 비기너입니다.

이번 글에선 카메라에 스크립트를 적용하여

플레이어를 추적하는 방법에 대해 알아보겠습니다.

 

카메라는 게임의 중요한 요소중 하나로 카메라를 어떻게 제어하느냐에 따라서

1인칭, 3인칭, 탑뷰 등 다양한 시점으로 게임이 가능합니다.

 

씬뷰

Scene View

위 이미지의 빨간색 큐브는 키 입력을 받아 이동하는 플레이어 오브젝트이며 

나머지 직사각형 오브젝트들은 플레이어의 발판이 되어줄 오브젝트들입니다.

 

스크립트 Player

    public float speed;
    public float jumpPower;
    private Rigidbody rb;
   

    private void Awake() {
        rb = GetComponent();
    }

    void Update()
    {
        if(Input.GetKey(KeyCode.Space)) {
            rb.AddForce(Vector3.up * jumpPower);
        }

        if (Input.GetKey(KeyCode.LeftArrow)) {
            rb.AddForce(Vector3.left * speed);
        }

        if (Input.GetKey(KeyCode.RightArrow)) {
            rb.AddForce(Vector3.right * speed);
        }
    }

 

키 입력을 받고 이동, 점프하는 테스트용 코드입니다.

 



스크립트 Camera

    public Vector3 offset;
    public float followSpeed = 0.15f;

    private GameObject player;

    void Awake()
    {
        player = GameObject.Find("Player");
    }

    void FixedUpdate()
    {
        Vector3 camera_pos = player.transform.position + offset;
        Vector3 lerp_pos = Vector3.Lerp(transform.position, camera_pos, followSpeed);
        transform.position = lerp_pos;
        transform.LookAt(player.transform);
    }

 

지정된 타깃을 추적하는 카메라 코드입니다.

코드에는 다음과 같은 기능을 이용하여 심플하게 구현되었습니다.

 

offSetoffset을 이용한 기본 간격 조정

단순하게 카메라의 위치를 플레이어의 좌표로 이동시킨다면
캐릭터와 카메라가 겹쳐지게 되면서 1인칭 시점처럼 보일 수도 있지만
캐릭터의 크기에 따라 캐릭터 내부가 겹쳐서 보이는 현상이 발생할 수도 있습니다.

 

lerp를 사용하여 선형 보간

카메라가 플레이어를 따라오는 거까진 성공했지만 플레이어의 이동속도가 빨라질수록
카메라가 순간이동한다는 생각이 드실 텐데 이럴 때 Lerp를 사용하여 출발지점과
도착지점의 중간값을 구해 좀 더 부드럽게 카메라를 이동할 수 있습니다.

 

LookAt을 이용

단순하게 카메라의 위치를 플레이어의 좌표로 이동시킨다면
캐릭터와 카메라가 겹쳐지게 되면서 1인칭 시점처럼 보일 수도 있지만
캐릭터의 크기에 따라 캐릭터 내부가 겹쳐서 보이는 현상이 발생할 수도 있습니다.
그래서 offset을 이용해 최초 간격을 조정하여 올바른 시점이 되도록 합니다.

 

반응형