Unity 게임 개발

[Unity] 횡방향2D게임에서 캐릭터 이동과 RPG게임에서의 이동

녹차맛고양이 개발강좌 및 IT리뷰 2017. 11. 30. 16:27

횡방향게임과 종횡방향을 모두 사용사는 RPG게임에서의 이동하는 것을 만들겠습니다.


횡방향에서는 일단 이동만 다루고 점프는 다음에 따로 다루겠습니다.



일단 Hierarchy에서 전체적인 이벤트를 관리할 MainManager

지도의 바닥 Bottom, 장애물 Cube, 움직일 Player를 만듭니다.


MainManager는 우클릭>Creat Empty


Bottom, Cube, Player는 우클릭>3D Object>Cube

Player는 다른 색으로 바꿔줍니다.


그리고 위치와 크기를 대충 저렇게 만듭니다.

z는 전부 0으로 통일해줘야 카메라에 잘 잡힙니다.




스크립트로 MainManager를 만들어줍니다.



스크립트를 손보기전에 Player의 Inspector에서 Add Component를 눌러서 Rigidbody를 눌러서 추가합니다.


그리고 스크립트를 더블클릭해서 수정하기 위한 IDE를 엽니다.



먼저 움직임 속도를 정하는 speed를 float형으로 만들어서 대략적인 수를 씁니다.

그리고 속도가 알맞지 않을때 수정을 쉽게 하기위해서 public을 붙입니다.


움직일 Player를 불러오기 위한 Rigidbody를 public으로 하나 만들어줍니다.


이Player의 움직일 위치를 정하는 movement를 Vector3로 만듭니다.


public float speed = 10f;
public Rigidbody rigidbody;
public Vector3 movement;





public으로 불러오지 않고 코드만으로 불러올때는

Start에 사진에 나온 것 처럼 Getcomponent를 사용하시면 됩니다.


기존의 update를 FixedUpdate로 바꿔줍니다.

rigidbody를 다루기 때문에 FixedUpdate를 사용해야만 합니다.


그리고 횡방향으로 움직일 변수로 h를 생성해주고

그 값을 저렇게 써줍니다.

Horizontal의 기본값이 방향키 좌우입니다.

Edit>Project Setting>Input에 들어가셔서 Horizontal을 눌러서 다른 키로 변경도 가능합니다.


사진에 Vertical은 3D이동이나 RPG게임에서 사용되는 것으로

뒤에 RPG게임의 이동에서 사용할겁니다.


void FixedUpdate () {
     float h = Input.GetAxisRaw("Horizontal");
     run(h);//움직임메소드
}


마지막으로 움직여줄 run()을 만들겠습니다.




먼저 키가 입력될때 마다 실행될수 있게

h를 받게 해줍니다.


그리고 위치를 설정해주기 위해서 Set을 이용해서 h만큼의 위치를 지정하게 해줍니다.

이제 movement값으로 움직임을 자연스럽게 하기위해서

normalized를 스고 speed를 곱해줍니다.

그리고 프레임에 상관없이 같은 거리를 움직이게 하기위해서

Time.deltaTime;를 마지막으로 곱해줍니다.


저장한후 Unity로 돌아갑니다.


void run(float h)
{
     movement.Set(h, 0,0);
     movement = movement.normalized * speed * Time.deltaTime;
     rigidbody.MovePosition(rigidbody.transform.position+ movement);
}




Hierarchy에서 MainManager에 

Asset의 MainManager를 드래그앤드롭해주시고


Hierarchy의 MainManager의 Inspector의 MainManager에 rigidbody에 Hierarchy의 Player를 드래그앤드롭해줍니다.


그리고 실행해서 움직이시면 사진처럼 movement의 값이 움직일때는 바뀝니다.








====종횡방향 작성중=====