[Unity] Main Camera 1인칭, 3인칭으로 설정하기

·2023년 9월 7일
0

Unity

목록 보기
3/5
post-thumbnail

고정 위치 3인칭 Third Person

1. MainCamera를 player에 종속시키지 않는 경우

아래의 Script를 Main Camera에 적용시킴
inspector 창에서 따라가고자 하는 object를 player로 설정
카메라 위치는 script 내 cameraOffset으로 설정

public class FollowPlayer : MonoBehaviour
{
    public GameObject player;
    public Vector3 cameraOffset = new Vector3(0, 7, -5);

    void LateUpdate()
    {
        transform.position = player.transform.position + cameraOffset;
    }
} 

문제점: player가 회전할 때 같은 방향을 보지 않음
using-script

2. Main Camera를 player에 종속시키는 경우

Main Camera를 Vehicle 안에 넣어줌
카메라 위치는 Main camera의 Inspector-Transform 컴포넌트로 설정

camInPlayer-Hierarchy
Player가 회전할 때 카메라도 함께 회전함!!
camInPlayer

1인칭 First Person, 마우스로 시점 컨트롤

구현 목표

  • 마우스로 카메라 방향 조절
  • 카메라가 비추는 방향으로 이동
  • Vertical Input만 받음. (Keyboard Input w와 s만을 받음)

참고 영상: https://www.youtube.com/watch?v=f473C43s8nE

  • 마우스로 시야 조절
float mouseX = Input.GetAxisRaw("Mouse X") * Time.deltaTime * sensX;
float mouseY = Input.GetAxisRaw("Mouse Y") * Time.deltaTime * sensY;
yRotation += mouseX;
xRotation -= mouseY;
  • 차의 시점이므로 마우스로 조절할 수 있는 y축 시야 범위를 0º ~ 10º로 제한함.
    xRotation = Mathf.Clamp(xRotation, -10f, 0);

  • 방향 조절

  1. 카메라 방향 조절 transform.rotation = Quaternion.Euler(xRotation, yRotation, 0);
  2. 차의 움직임 방향 조절을 위해 카메라 방향을 orientation에 넣어줌.
    orientation.rotation = Quaternion.Euler(xRotation, yRotation, 0);
  3. 차체 방향 조절을 위해 yRotation 값을 vehicleOrientation에 넣어줌.
    vehicleOrientation.rotation = Quaternion.Euler(0, yRotation, 0);
  • 차 움직이기
    vertical input이 입력되면, direction에 대입, 입력되는 값이 0이면 direction = 0
    direction = orientation.forward * verticalInput;
    차는 y축 방향으로 움직이지 않으므로 direction에서 x, z값만을 moveDirection에 넣어줌.
    moveDirection = new Vector3(direction.x, 0, direction.z);
    moveDirection 방향으로 이동
    transform.Translate(moveDirection * Time.deltaTime * movementSpeed);

FirstPerson-Hierarchy

FirstPerson

개선할 점

  • 현실에서 차는 360º 회전이 불가능한 점을 반영하지 못했음.
  • 차의 움직임 방향 조절을 구현함에 있어서 벡터에 대한 이해가 부족함.

0개의 댓글