Priv's Blog
캐릭터 움직임 구현 코드 응용 본문
키보드 조작으로 캐릭터 움직임 구현 시, horizontal과 vertical 변수를 이용하는 것이 가장 기초적인 방법이다.
Vector 변수를 2개 생성해 좀 더 코드를 간략하게 줄이는 방법이 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// Player Move
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector2 move = new Vector2(horizontal, vertical);
Vector2 Position = rigidbody2D.position;
//Position.x = (Position.x + Speed * horizontal * Time.deltaTime);
//Position.y = (Position.y + Speed * vertical * Time.deltaTime);
Position = Position + (move * Speed * Time.deltaTime);
rigidbody2D.MovePosition(Position);
|
cs |
일반적으로는 주석처리 되어 있는 Position.x와 Position.y 부분을 사용해 움직임을 구현하겠지만, 2줄로 구현한 코드를 Vector 2 move 함수를 추가해 1줄로 줄일 수 있음.
Vector 2 move 변수에 float 변수 (horizontal과 vertical)로 받아온 키보드 방향 값을 저장한다.
move 변수에 들어가는 값은 (1, 0) / (0, 1) / (-1, 0) / (0, -1) 등과 같이 방향을 나타내는 값만 저장될 뿐, 크기는 저장되지 않는다.
(즉, Max가 1, Min이 -1이다.)
move 변수에 들어간 값은 키보드 방향키 중 어디를 눌렀는가를 인지할 수 있도록 해주는 값이 된다.
Vector 2 Position 변수는 rigidbody2D.position의 값을 저장하므로, 게임오브젝트의 실질적인 현재 좌표 값이 저장된다.(rigidbody2D.position으로 한 이유는 transform.position으로 작성할 경우, 충돌 시 떨림 현상이 발생하기 때문.)
이제 Vector 2 Position 변수의 값을 바꿔 캐릭터를 움직이게 만들어야 한다.
Position + (move * Speed * Time.deltaTime) 식을 풀어보면,
현재 위치 값 + (이동해야 하는 방향 * 속도 * Time.deltaTime) 이 된다.
move 변수 값을 더하지 않고 곱하는 이유는 move 변수 값의 양수 또는 음수가 된다는 점을 이용해 캐릭터가 움직이는 방향을 인지하도록 만들어야 하기 때문.
rigidbody2D.MovePosition(Position); 은 말 그대로 Position으로 이동시키는 역할을 한다.
'Dev. Study Note > Unity' 카테고리의 다른 글
마우스 위치로 총알 발사 구현 (1) | 2020.02.29 |
---|---|
마우스 휠을 이용해 캐릭터가 발사할 총알 종류 바꾸기 (0) | 2020.02.29 |
캐릭터 충돌 시 떨림 현상 개선 (0) | 2020.02.29 |
2D 캐릭터가 마우스 시점 따라가게 만들기 (0) | 2020.02.17 |
<유니티 교과서> C# 스크립트 파트 요약 정리 (0) | 2019.12.24 |