Code Archive/Unity3D

step3.간단하게 캐릭터 움직이기

쌍큐 2015. 1. 5. 17:58

우리가 객체를 Hierarchy에 등록하면 Scene에 객체가 올라간다. 그 객체의 위치값을 저장하는 부분이 transform 부분인데 postion, rotation, scale로 이루어져 있다.

- postion : 현재 객체가 위치하고 있는 월드 좌표 값

- rotation : 현재 객체의 회전 값

- scale : 현재 객체의 크기 값

그러면 우리가 코드에서 해당 객체의 원하는 값을 바꾸면 그대로 적용이 되므로 객체를 움직인다라고 생각 했을때 순서를 보면

원하는 방향키를 입력 받음 -> 코드에서 해당 키 값을 받음 -> 방향에 해당하는 키에 따라 좌표값을 바꿔줌

이런 과정을 거치면 객체가 화면에서 우리가 입력한 키 방향으로 움직일수 있는 부분이 되겠다.

잘만 생각하면 어렵지 않은 부분이다.


1. 움직일 방향키를 셋팅을 해보겠음

메뉴에서 edit -> Project Settings-> Input을 누르면 




Inspector에 이런 화면이 나온다. 우리가 지금은 필자가 wsad를 방향키로 추가한 부분이 되겠음

기본적으로는 방향키만 적용되서 나온다.

Horizontal : 가로 움직임을 위한 입력 셋팅 부분

Vertical : 세로 움직임을 위한 셋팅 부분

요 두개를 보면 잘보면 Negative Button과 Positive Button이 나오는데, 방향키가 정방향으로 지정하는 부분이 Positive Button 그 반대 방향이 Negative Button이 되는게 해당 텍스트 박스를 클릭 후 원하는 키를 누르면 해당 키로 지정이 된다.

Negative Button과 Positive Button 밑에 보면 Alt Negative Button과 Alt Positive Button이 있다. 요건 단순히 서브키 개념으로 생각하면 되겠다.

여기까지가 방향 입력 셋팅 부분이 되겠음....


2. 코드에서 해당 입력에 따른 키값 받기

1> Project 뷰에서 Asset에서 오른쪽 클릭 후 C#파일 하나를 만들기


2> 해당 소스코드 더블클릭하여 monodevelop 실행


자 그러면 소스코드를 작성해보겠음....

크게 두가지 방법이 있는데 어렵지 않으므로 잘 살펴보기 바랍니다.

입력처리는 Input 클래스를 이용합니다. 

Input클래스에 우리가 입력한 키가 코드에서 원하는 키인지 확인하는 함수가 GetKey함수가 되겠음

첫번째는 입력한 키값을 받아서 판단하는 부분입니다.

정말 간단하게 처리한 부분입니다. GetKey의 리턴은 bool 타입으로 해당키가 입력이 되면 true아니면 false가 되는 부분임

그럼 각 if문 처리부분에 객체의 좌표값을 증가 및 감소를 시키면 어떻게 된다? 그럼 해당 좌표값 만큼 움직인다.

미리 print 함수를 사용했기 때문에 consol에 해당 키를 입력하면 해당 문자열이 출력된다. 

3> 좌표값처리

방금전 맨위에서 설명 했듯이 transform에 있는 우리가 원하는 좌표값을 변경하면 된다.

자 그럼 코드로 바로 작성을 해보면

this.transform.position.x += 1; //이런 형식으로 추가하면 되지 않을까? 라고 생각할 수 있으나 해보면 컴파일 에러가 나므로 다른 방법을 취해주는데

Vector3로 하나의 객체를 만들어 움직인 만큼 이동하도록 벡터 연산을 하겠끔 해주면 된다.

Update함수에 Vector3 객체를 하나 만들고 처리하면 되겠다.

그리고 맨 밑에보면 this.transform.position += vec; 부분은 현재 객체의 위치값이 position에 저장이 되있는데 position이 Vector3로 선언되어 있기 때문에 우리가 이동한 만큼의 벡터를 현재 위치 벡터에 더해서 저장을 하면 해당 위치가 바뀌는 부분이 된다.

여기까지가 간단한 이동 처리 였음.

사실 이 소스코드를 이용하면 1번에서 입력 설정하는 부분은 필요가 없다.

1번에서 입력 설정한 후 소스코드를 설명하겠음

잘 보면 두종류의 if문이 있는데 1번째는 우리가 맨처음 만든 것과 비슷하나 처리하는 방법이 조금 다르다.

2번째는 GetButton이라는 함수가 나오는데 매개변수값을 보면 뭔가 익숙한게 있다. Horizontal, Vertical이 보이는가?

우리가 1번째에서 설정해준 부분이다.

우리가 설정한 키를 입력하면 true 아니면 false가 나오는 부분이다.

정말 간단하게 바겼다....

필자도 맨처음 방법으로 고정적으로 사용했었다.... 이제는 2번째 부분을 이용한다.

자 보면 입력 후 처리하는 부분을 보면 Input.GetAxisRaw("Vertical");이 움직인 방향값을 나타낸다.

Negative Button을 누르면 -1, Positive Button을 누르면 +1이 리턴되므로 해당 벡터에 값을 저장한 후 바로 postion 벡터에 더해주면 끝이난다... 캐릭터 이동 간단하게 끝난 부분이 되겠습니다.

해당 패키지를 열어서 참고해 보시면 되겠습니다.


CharactorMove.unitypackage