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;