Unity

캐릭터를 따라다니는 3인칭 카메라 구현

방프 2021. 5. 24. 16:58

1. 카메라 스크립트 제작

   - 캐릭터가 이동하면 카메라도 이동해야 한다!
       → 카메라는 캐릭터를 알고 있어야 한다는 뜻.
   - 카메라의 갱신은 게임세계가 모두 갱신된 후 마지막으로 갱신되어야 한다. (LateUpdate)
       → 카메라의 위치 업데이트는 캐릭터 이동 후 계산되어야 한다는 뜻.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CustomCamera : MonoBehaviour
{
    Transform player = null;
    Vector3 playerOldPos = Vector3.zero;

    public Transform PLAYER
    {
        get { return player; }
        set { player = value; }
    }

    private void Start()
    {
        playerOldPos = player.position;
    }

    private void LateUpdate()
    {
        // 캐릭터를 따라다니는 카메라
        // 캐릭터가 이동한 delta(양)만큼 카메라를 이동해준다.
        Vector3 delta = player.position - playerOldPos;
        transform.position += delta;

        playerOldPos = player.position;
    }
}

 

2-1. 메인 카메라에 스크립트 붙이기 → player변수쪽 코드 수정

                     OR

2-2. 캐릭터 스크립트에 아래 코드 삽입

private void Awake()
{
  // 플레이어의 인스턴스가 생성될때 카메라에 캐릭터를 따라다니게 하는 컴포넌트 붙여주기
  CustomCamera script = Camera.main.gameObject.AddComponent<CustomCamera>();
  script.PLAYER = transform;
}

 

3. 부드러운 움직임 추가

 Vector3 pos;
 pos = Vector3.Lerp(transform.position, transform.position + delta, Time.deltaTime * 5);

 

4. 카메라 이동 영역 제한

// 카메라 이동 영역 제한
float clampX = Mathf.Clamp(transform.position.x, -4f, 4f);
float clampY = Mathf.Clamp(transform.position.y, 3f, 4f);
float clampZ = Mathf.Clamp(transform.position.z, -10f, -5f);
pos.x = clampX;
pos.y = clampY;
pos.z = clampZ;
transform.position = pos;