Unity 카메라 이동 및 시점 변경 (1인칭, 3인칭)
2024. 12. 14. 05:47ㆍUnity
Unity 카메라 이동 및 시점 변경: 1인칭과 3인칭 전환
게임에서 카메라 시스템은 플레이어의 몰입도를 높이는 중요한 요소입니다. Unity를 사용하면 1인칭(FPS)과 3인칭(TPS) 카메라 시점을 쉽게 구현하고 전환할 수 있습니다.
이번 포스팅에서는 카메라 이동, 마우스 컨트롤, 1인칭-3인칭 시점 전환 구현 방법을 단계별로 소개합니다.
1. 1인칭 카메라 설정
1인칭 카메라는 플레이어의 시점에서 세상을 바라보는 방식입니다.
1) 기본 설정
- Main Camera를 Player 오브젝트의 자식으로 이동합니다.
- Main Camera를 플레이어 머리 위치에 배치합니다.
- 카메라의 Transform을 Player의 방향에 맞춥니다.
2) 마우스를 이용한 시점 조작
MouseLook 스크립트를 작성하여 카메라가 마우스 입력에 따라 움직이도록 설정합니다.
using UnityEngine;
public class MouseLook : MonoBehaviour
{
public float mouseSensitivity = 100f;
public Transform playerBody;
private float xRotation = 0f;
void Start()
{
Cursor.lockState = CursorLockMode.Locked; // 마우스 커서 고정
}
void Update()
{
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f); // 상하 시점 제한
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
playerBody.Rotate(Vector3.up * mouseX);
}
}
3) 스크립트 연결
- Main Camera에 MouseLook 스크립트를 추가합니다.
- Player Body 필드에 Player 오브젝트를 연결합니다.
2. 3인칭 카메라 설정
3인칭 카메라는 캐릭터 뒤에서 따라가는 방식입니다.
1) 기본 설정
- Main Camera를 Player의 자식으로 설정하지 않고, 캐릭터 뒤에 배치합니다.
- CameraFollow 스크립트를 작성하여 카메라가 플레이어를 따라다니도록 설정합니다.
2) 카메라 따라가기 스크립트
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
public Transform target; // 플레이어 위치
public Vector3 offset; // 카메라 오프셋
public float smoothSpeed = 0.125f; // 부드러운 이동 속도
void LateUpdate()
{
Vector3 desiredPosition = target.position + offset;
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
transform.position = smoothedPosition;
transform.LookAt(target); // 캐릭터 바라보기
}
}
3) 스크립트 연결
- Main Camera에 CameraFollow 스크립트를 추가합니다.
- Target 필드에 Player 오브젝트를 연결하고, Offset을 적절히 설정합니다 (예: (0, 5, -10)).
3. 1인칭-3인칭 시점 전환
1) 스크립트 작성
1인칭과 3인칭 카메라를 전환하는 스크립트를 작성합니다.
using UnityEngine;
public class CameraSwitch : MonoBehaviour
{
public GameObject firstPersonCamera;
public GameObject thirdPersonCamera;
private bool isFirstPerson = true;
void Update()
{
if (Input.GetKeyDown(KeyCode.V)) // V 키로 전환
{
isFirstPerson = !isFirstPerson;
firstPersonCamera.SetActive(isFirstPerson);
thirdPersonCamera.SetActive(!isFirstPerson);
}
}
}
2) 설정
- Main Camera를 복사하여 1인칭과 3인칭 카메라로 각각 설정합니다.
- 1인칭 카메라: Player의 자식, 머리 위치.
- 3인칭 카메라: Player의 뒤에 배치.
- CameraSwitch 스크립트를 Player에 추가합니다.
- First Person Camera와 Third Person Camera 필드에 각각의 카메라를 연결합니다.
4. 고급 카메라 기능
1) 회전 중심 조정
3인칭 카메라에서 회전 중심을 캐릭터로 설정하려면 Pivot 오브젝트를 추가합니다.
- Pivot을 Player의 자식으로 생성하고, 카메라를 Pivot의 자식으로 설정합니다.
- Pivot을 회전시켜 카메라 시점을 변경합니다.
2) 충돌 감지
using UnityEngine;
public class CameraCollision : MonoBehaviour
{
public Transform target;
public float minDistance = 2f;
public float maxDistance = 5f;
public LayerMask collisionMask;
private Vector3 offset;
void Start()
{
offset = transform.position - target.position;
}
void LateUpdate()
{
Vector3 desiredPosition = target.position + offset;
RaycastHit hit;
if (Physics.Raycast(target.position, offset.normalized, out hit, maxDistance, collisionMask))
{
desiredPosition = target.position + offset.normalized * hit.distance;
}
transform.position = Vector3.Lerp(transform.position, desiredPosition, Time.deltaTime * 10f);
}
}
3) 자유로운 시점 회전
마우스 입력으로 3인칭 카메라를 자유롭게 회전시키려면 다음 코드를 추가합니다:
public float rotationSpeed = 5f;
void Update()
{
float horizontal = Input.GetAxis("Mouse X") * rotationSpeed;
float vertical = Input.GetAxis("Mouse Y") * rotationSpeed;
target.Rotate(Vector3.up * horizontal);
offset = Quaternion.AngleAxis(vertical, Vector3.right) * offset;
}
5. 요약
- 1인칭: 캐릭터의 시점에서 세상을 보는 방식.
- 3인칭: 캐릭터를 뒤에서 따라가며 보여주는 방식.
- 시점 전환: 간단한 스크립트를 통해 1인칭과 3인칭 카메라를 전환.
- 고급 기능: 충돌 감지, 자유로운 시점 회전, 카메라 애니메이션 적용 가능.
'Unity' 카테고리의 다른 글
Unity 캐릭터에 애니메이션 적용하기 (0) | 2024.12.15 |
---|---|
Unity Animator 컨트롤러 및 애니메이션 트리 (0) | 2024.12.15 |
Unity 3D 캐릭터 컨트롤러 구현 (0) | 2024.12.12 |
Unity 3D 모델 가져오기 및 셰이더 (0) | 2024.12.10 |
Unity 게임 오버 및 점수 시스템 (0) | 2024.12.09 |