[Go-Unity 3D] 12. 3D 1인칭 카메라 제어 ⭐⭐

업데이트:

카테고리:

태그: , ,


Camera, Input.GetAxisRaw(“Mouse X,Y”) , 좌표,축 관계

고박사의 유니티 기초를 정리.

1인칭 카메라 제어

1.Camera

  1. Main Camera를 Player의 눈위치로 위치조정
  2. Main Camera를 플레이어의 자식으로 설정
    image

2.스크립트 코드

1). CameraController

카메라의 이동, 회전을위한 코드작성

CameraController.cs

using UnityEngine;

public class CameraController : MonoBehaviour
{
    private float   rotateSpeedX = 3;
    private float   rotateSpeedY = 5;
    private float   limitMinX = -80;
    private float   limitMaxX = 50;
    private float   eulerAngleX;
    private float   eulerAngleY;

    public void RotateTo(float mouseX,float mouseY){
        // 마우스를 좌/우로 움직이는 mouseX 값을 y축에 대입하는 이유는
        // 마우스를 좌/우로 움직일 때 카메라도 좌/우를 보려면 카메라 오브젝트의
        // y축이 회전되어야 하기 떄문이다.
        eulerAngleY += mouseX * rotateSpeedX;
        // 위/아래를 보려면 x축이 회전
        eulerAngleX -= mouseY * rotateSpeedY;

        // x축 회전 값의 경우 아래, 위를 볼 수 있는 제한 각도가 설정되어 있다.
        eulerAngleX = ClampAngle(eulerAngleX,limitMinX,limitMaxX);

        // 실제 오브젝트의 쿼터니온 회전에 적용
        transform.rotation = Quaternion.Euler(eulerAngleX, eulerAngleY,0);
    }

    private float ClampAngle(float angle,float min, float max){
        if ( angle < -360 ) angle += 360;
        if ( angle > 360  ) angle -= 360;
        
        // Math.f.Clamp()를 이용해 angle이 min <= angle<=max 를 유지하도록
        return Mathf.Clamp(angle,min,max);
    }
}

  • 마우스에따라 카메라 회전을 위한 코드
  • 마우스 x,y 와 회전 x,y를 생각하면서


2). PlayerContorller 추가코드

PlayerContorller.cs

using UnityEngine;

public class CameraController : MonoBehaviour
{
    private CameraController cameraController;

    private void Update() {
        float mousex = Input.GetAxisRaw("Mouse X");
        float mousey = Input.GetAxisRaw("Mouse Y");

        cameraController.RotateTo(mousex,mousey);
    }
}

  • cameraController 추가
  • 마우스 움직임 x , y 를 매개변수로 전달해 RotateTo 실행


3). Movement3D 추가코드

Movement3D.cs

using UnityEngine;

public class Movement3D : MonoBehaviour
{
    [SerializeField]
    private Transform   cameraTransform;

    public void MoveTo(Vector3 direction){
        //moveDirection = new Vector3(direction.x, moveDirection.y, direction.z);
        Vector3 movedis = cameraTransform.rotation * direction;
        moveDirection = new Vector3(movedis.x, moveDirection.y, movedis.z);
    }
}

  • 카메라의 transform를 사용
  • 카메라의 방향으로 움직임




3. 정리

  • X이동 -> Y축회전, Y이동 -> X축회전
  • 마우스이동 Input.GetAxisRaw(“Mouse X,Y”);
  • X축회전(위/아래) 최소,최대값 설정 확인하기.


참고 : 유니티 TOP


📔

댓글남기기