일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- c언어 괄호검사
- const화
- 입출력 관리자
- LAN의 분류
- 논리 연산
- 프로그래머스 배열만들기4
- C언어 덱
- auto 키워드
- 값/참조/주소에 의한 전달
- 백준 파이썬
- 회전 및 자리 이동 연산
- 문제해결 단계
- const l-value참조자
- 원형 연결 구조 연결된 큐
- 알고리즘 조건
- 범위 기반 for문
- r-value참조자
- C언어 계산기 프로그램
- 프로그래머스 푸드 파이트 대회
- getline()함수
- l-value참조자
- 문자형 배열
- 주기억장치
- 괄호 검사 프로그램
- IPv4 주소체계
- 운영체제 기능
- string유형
- 유형 변환
- 네트워크 결합
- C언어 스택 연산
- Today
- Total
chyam
[unity 3d] - 마우스 움직임을 통해 플레이어가 해당 방향을 바라보도록 설정하기 본문
이전에는 좌우 방향을 이용하여 플레이어의 방향을 조정했습니다.
아래는 참고한 블로그입니다.
[Unity 3D] 마우스 움직임으로 카메라 제어하는 방법
목차. 개요 소스코드 코드분석 결과 개요 대부분의 FPS 게임이나 3인칭 액션 게임에서 플레이어의 시점에 따라가는 카메라 제어 시스템을 자주 볼 수 있습니다. 이런 종류의 게임에서 플레이어는
wookeee.tistory.com
이번에는 마우스 움직임을 통해 플레이어의 방향을 조정해주었습니다!
먼저 마우스 움직임 값을 받을 변수를 선언해줍니다.
private float MouseY;
private float MouseX;
아래는 Move() 메서드로, 이동하는 함수를 구현하였습니다.
void Move()
{
...
Vector3 moveDirection = (transform.forward * v + transform.right * h).normalized;
transform.position += moveDirection * Speed * Time.deltaTime;
MouseX += Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
MouseY -= Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;
MouseY = Mathf.Clamp(MouseY, -15f, 15f);
transform.localRotation = Quaternion.Euler(MouseY, MouseX, 0f);
...
}
transform.forward는 현재 오브젝트의 정면 방향을 나타내는 단위 벡터입니다.
이때 v를 곱해주어 "W"나 위쪽 방향키를 누르면 정면으로 이동하고, "S"나 아래쪽 방향키를 누르면 뒤로 이동하게 됩니다.
앞뒤를 이동하는것은 z축이동이기 때문에 transform.forward * v 는 (0,0,v)와 같게됩니다.
transform.right는 현재 오브젝트의 오른쪽 방향을 나타내는 단위 벡터입니다.
위와같이 h를 곱해주어 "D"나 오른쪽 방향키를 누르면 오른쪽으로 이동하고, "A"나 왼쪽 방향키를 누르면 왼쪽로 이동하게 됩니다.
좌우는 x축이동이기 때문에 transform. right * h 는 (h,0,0)와 같게됩니다.
nomalized을 해주면 정규화를 통해 대각선을 이동할때 속도가 증가하는것을 막을수있습니다.
따라서 transform.forward * v + transform. right * h 는 (h,0,v)가 됩니다.
MouseX += Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
MouseY -= Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;
GetAxisRaw("MouseX")는 마우스를 오른쪽으로 움직이면 (+) 값이 나오고, 왼쪽으로 움직이면 (-)값이 나옵니다.
GetAxisRaw("MouseY")는 마우스를 위쪽으로 움직이면 (+) 값이 나오고, 아래쪽으로 움직이면 (-)값이 나옵니다.
MouseY = Mathf.Clamp(MouseY, -15f, 15f);
Clamp를 통해 특정 값을 최소와 최대범위 내로 제한해주었습니다.
아래 위로 움직이는 각도를 -15~15사이로 제한하였습니다.
transform.localRotation = Quaternion.Euler(MouseY, MouseX, 0f);
오일러각을 쿼터니언으로 변환해주어 회전시켜주었습니다.
MouseY가 x좌표인 이유는 x축을 회전시키면 위아래로 회전하고, MouseX는 y축을 회전시키면 양옆으로 회전하기 때문입니다!
'unity' 카테고리의 다른 글
[unity 3d] - 인벤토리 슬롯을 클릭할 때 색상을 변경하기 (0) | 2025.03.07 |
---|---|
[unity 3d] - 바라보는 오브젝트를 키 입력을 통해 인벤토리에 저장하기 (0) | 2025.03.03 |
[unity 3d] - 플레이어, 카메라 이동 (2) | 2025.02.27 |
[unity] - 로켓을 움직여 도착지에 도달하는 미니게임 (0) | 2025.01.08 |
[unity] - 버튼 순서대로 누르면 성공하는 퍼즐 (0) | 2024.09.12 |