게임에서 흔히 보이는 3인칭 시점을 간단하게 구현해보겠습니다.
먼저 Scene창에서 카메라를 적당한 위치에 놓습니다.
플레이어 공이 움직이는 대로 카메라가 따라가려면 플레이어 공의 Position 정보를 카메라에도 줘야합니다.
C#스크립트를 생성해 카메라에 줍니다.
소스코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMove : MonoBehaviour
{
Transform playerTransform; //Player의 transform 정보를 담을 변수 선언
void Awake()
{
playerTransform = GameObject.FindGameObjectWithTag("Player").transform; //GameObject의 메서드인 Find로 Player 오브젝트를 찾은 뒤 Position 정보를 가져옵니다.
}
void LateUpdate() //카메라 움직임은 주로 LateUpdate에 적습니다.
{
transform.position = playerTransform.position; //카메라의 position에 player의 position 정보를 넣어줍니다.
}
}
GameObject의 메서드인 Find로 다른 오브젝트를 찾아 필요한 정보를 가져올 수 있지만 Find는 cpu 부하가 높아 최적화를 고려한다면 권장되지 않는 방법입니다. 그리고 gameObject와 GameObject 혼동에 주의해주세요.
플레이를 해보면 이렇게 보입니다.
카메라는 분명 플레이어를 잘 따라가지만 이건 3인칭이 아닌 1인칭으로 보입니다.
3인칭이 되려면 카메라와 플레이어 사이에 거리를 둬야하는데 위 카메라의 소스코드는 카메라의 position과 플레이어의 position이 똑같기 때문에 마치 한몸처럼 1인칭 시점으로 보이는 겁니다.
따라서 소스코드에 거리 변수를 추가해야합니다.
소스코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMove : MonoBehaviour
{
Transform playerTransform;
Vector3 Offset; // 카메라와 플레이어 사이의 거리 변수
void Awake()
{
playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
Offset = transform.position - playerTransform.position; //카메라 위치 - 플레이어 위치
}
void LateUpdate()
{
transform.position = playerTransform.position + Offset; //카메라 위치 = 플레이어 위치 + 거리
}
}
결과
Scene에서 카메라를 놓은 위치를 기반으로 플레이어와의 거리를 계산하고 그 거리값을 계속 더해줌으로써, 카메라가 계속 일정거리를 유지하며 플레이어를 쫓아가게 되었습니다.
'유니티 3D기본(Roll A Ball)' 카테고리의 다른 글
20. Scene 추가 (0) | 2021.10.27 |
---|---|
19. 스테이지 이동 (0) | 2021.10.26 |
17. 오디오 넣고 재생하기 (0) | 2021.10.25 |
16. 아이템 먹기 구현 (0) | 2021.10.24 |
15. 공중에 떠 있는 아이템 만들고 회전시키기 (0) | 2021.10.24 |