유니티의 인풋 매니저 (CamRotate 활용 코딩)
유니티는 인풋매니저를 통해 자주 쓰이는 입력값들이 설정되어 있습니다.
아래 코드는 input 클래스의 GetAxis() 함수를 이용하여 마우스 입력을 받는 코드입니다.
void update()
{
//사용자의 마우스 입력을 받아 물체를 회전시키고 싶다.
//1. 마우스 입력을 받는다.
float mouse_X = Input.GetAxis("Mouse X")
float mouse_Y = Input.GetAxis("Mouse Y")
//2. 마우스 입력 값을 이용하여 회전 방향을 결정한다. (Vector3 활용)
Vector3 dir = new Vector3(-mouse_y, mouse_x, 0);
}
회전축은 물체를 좌우로 회전시키고 싶다면 = y축
물체를 상하로 회전시키고 싶다면 = x축이 기준입니다.
x축 회전(mouse_y)의 경우 양수 방향으로 회전 시 아래쪽으로 회전하고
음수방향으로 회전 시 위쪽으로 회전하기 때문에 마우스 상하 입력 값을 반대로 적용해야 합니다.
해당 코드는 fps 게임 등에서 카메라에 붙이는 C# 코드로 활용될 수 있습니다.
해당 입력 코드에서 사람의 시선을 감안하여 상 하 회전 갑승ㄹ -90 ~ 90도 사이로 제한합니다.
Mathf 클래스의 Clamp() 함수를 사용합니다.
void update()
{
//사용자의 마우스 입력을 받아 물체를 회전시키고 싶다.
//1. 마우스 입력을 받는다.
float mouse_X = Input.GetAxis("Mouse X")
float mouse_Y = Input.GetAxis("Mouse Y")
//2. 마우스 입력 값을 이용하여 회전 방향을 결정한다. (Vector3 활용)
Vector3 dir = new Vector3(-mouse_y, mouse_x, 0);
//3. 회전 방향으로 물체를 회전시킨다.
//r = r0+ vt
//+ = <- 이 구문은 전의 구문을 = 뒤에 더해준다는 뜻임.
// transform.eulerAngles = transform.eulerAngles + dir * rotSpeed * Time.deltaTime;
transform.eulerAngles += dir * rotSpeed * Time.deltaTime;
//4. x축 회전(상하 회전) 값을 -90 ~ 90도 사이로 제한한다.
Vector3 rot = transform.eulerAngles;
rot.x = Mathf.Clamp(rot.x, -90f, 90f)
transform.eulerAngles = rot;
}
이렇게 코드 작업을 진행하면 자꾸만 카메라가 고개를 아래로 수그립니다. 이것은 유니티 Transform 컴포넌트의 특징 때문입니다. 내부적으로 각도를 0~360도로 처리하기 위해 0도 보다 작아지면 -1도가 아닌 359도로 자동 연산해주기 때문에 90도를 넘은 것으로 확인되어 작성한 코드에 따라 90도로 변환되면서 자꾸만 바닥을 내려다 볼 것입니다.
이 부분은 유니티 내부에서 자동으로 각도를 변환하기 전에 미리 -90~90도로 제한하는 코드를 적용하면 문제가 해결됩니다.
public class CamRotate : MonoBehaviour
//회전 속도 변수
public float rotSpeed = 200f;
//회전 값 변수
float mx = 0;
float my = 0;
void update()
{
//사용자의 마우스 입력을 받아 물체를 회전시키고 싶다.
//1. 마우스 입력을 받는다.
float mouse_X = Input.GetAxis("Mouse X")
float mouse_Y = Input.GetAxis("Mouse Y")
//1-1. 회전 값 변수에 마우스 입력 값만큼 미리 누적시킨다
mx += mouse_X * rotSpeed * Time.deltaTime;
my += mouse_Y * rotSpeed * Time.deltaTime;
//1-2. 마우스 상하 이동 회전 변수(my)의 값을 -90 ~ 90도 사이로 제한한다.
my = Mathf.Clamp(my, -90f, 90f);
//2. 회전 방향으로 물체를 회전시킨다.
//r = r0+ vt
transform.eulerAngles = new Vector3(-my, mx, 0);
}
}
메인카메라에 드래그 하여 스크립트를 넣어주면 마우스 이동방향에 따라 캠이 회전 하는 것을 볼 수 있습니다.
'유니티 일기' 카테고리의 다른 글
유니티의 정규화 벡터 2탄 nomalized (0) | 2021.10.25 |
---|---|
유니티의 정규화 벡터 (1) | 2021.10.23 |
유니티 이벤트 함수의 호출 순서 (0) | 2021.10.23 |
절대강좌 fps 예제 시작! (0) | 2021.10.21 |
bitbucket 사용방법 (0) | 2021.10.21 |
댓글