캐릭터 이동

2018. 12. 19. 01:06Example project

version = Unity 2018.3.0f2

 

Asset = UnityChan

 

파일이 다날라가서 처음부터 이동로직을 구현.

 

1. Hierarchy View 에 UnityChan 을 생성.

 

2. Script

Animator -> animator 변수로 정의.

float InputV , InputH 로 실수형 데이터 타입 선언 ( UnityChan Inspector View 에서 값 변화를 보기위해선 float 앞에 public 을 써줍니다.)

Void Start()

{

animator = this.gameObject.GetComponent<Animator>();

// 게임 오브젝트의 Animator 를 가져옵니다. 그것을 animator 변수에 저장.

}

 

Void Update()

{

 InputV=Input.GetAxis("Vertical");

 animator.SetFloat("InputV",InputV);

// Input.GetAxis 값은, W,S 등 이동을위해 유니티 내부에서 정해진 값으로 만들어져 있는것을 사용.

// Input.Getkey(keyCode.W) 등으로도 원하는 이동키를 바꿀 수 있고, animation.Play 를 이용해서 원하는 애니메이션을 구현 할 수 있는걸로 알고 있습니다.

//animator.SetFloat 는 GetAxis 값을 InputV라고 설정해준 값에 set 하는 함수입니다.

 

// InputH 의 경우도 같기 때문에 생략.

 

//다음은 달리기 로직 입니다.

 

if(Input.Getkey(KeyCode.LeftShift))

{

    animator.SetTrigger(""Running");

    animator.ResetTrigger("RunningtoWalk");

}

 

// Getkey는 키가 눌리는 시점부터 계속 상태를 보는겁니다. 떼면 바로 Key값을 안주는거고 누르는 상태 동안 저 if 문을 수행합니다.

// 여기서 왼쪽 Shift 버튼을 누르는것을 트리거로하여, 달리기를 사용하고 안하고 하도록 합니다.

// Walk -> Run 으로 분기하는 Transition 을 만들었지만, 다시 되돌아오는 Transition을 곰곰히 생각하다가, 같은 방법으로 키를 뗏을때

RunningtoWalk 트리거를 활성화 시켜 다시 돌아오는 Transition 분기를 할 수 있도록 하였습니다.

 

if(Input.GetKeyUp(KeyCode.LeftShift))

{

  animator.ResetTrigger("Running");  // 다시 Running 트리거를 리셋함으로서 활성화를 풀어주고

  animator.SetTrigger(""RunningtoWalk); // RunningtoWalk 가 Set 되었다고 메세지를 날려주어, 활성화 시킵니다.

}

 

}

 

3. Unity Animator 설정.

 

 

파라미터는 다음과 같이 만들고, Animator는 다음과 같이 만들어줍니다.

 

여기서 저는 WAIT00 을 제외한 Walk , Run 을 Blending Tree 로 만들었습니다.

 

Float 형 = InputV,InputH

Bool 형 = Running , RunningtoWalk

 

다음은 WAIT00 -> Walk 로 이어지는 Transition 속성입니다.

 

 

Transition 조건을 2개 이상 써본적은 처음이라서, 처음에 많이 당황했는데, 전진 , 후진을 구현하기위해, Vertical 에 연결된 InputV 가 0.1 보다 클때, 0.1보다 작을 때,(Vertical 키 값은 -1 ~ 1 입니다.) Walk Brending Tree 로 분기하도록 하였습니다.

저기 있는 has Exit Time 은 부드럽게 넘기기위해서 반드시 해줘야하는데, 저 버튼이 의미하는 바는 루프상태가 안돌때만 입력하면 넘어가겠다. 입니다.

즉 루프가 돌때 아무리 W,S 를 눌러도 안넘어가고 루프가 다 돌고 다시 시작하는 그 시간에 눌려있어야 넘어갑니다. 그런 이동로직을 원한게 아니기때문에 Has Exit Time 을 체크 해제해줍니다.

 

Walk 버튼을 우클릭해 Create new state brending ~~?? 를 눌러 블렌딩 트리를 생성하고, 더블클릭을 하면 Walk 블렌딩 트리로 넘어가는데

 

 

우측위 블렌드 타입은 2D Simple Directional 선택, InputH,V 두가지변수를 사용하도록하고, 캐릭터 이동로직상 전진하면서 좌, 우 를 이동해야하기때문에 각 포지션값은 상위와 같습니다. 이는 가만히 있는데도 A,D를 눌렀을때 이동하면 좀 그래서,,, 입니다.

 

다음과 같이 작업을하고,

 

 

walk에서 run으로 넘어가는 transition 조건은 간단합니다.

아, 그리고 조건은 우측 conditions 가 분기 조건입니다.

Trigger 형은 그냥 나 set 되었다. 하면 쓰고 reset 했다. 하면 비활성화로 보시는게 맞는거같습니다. 따로 조정하는게 없더라구요.

 

아무튼 이렇게 작업을하면 다음과 같이 나오긴합니다.

 

현재 분기 작성을 WAIT00 - > Walk -> Run 으로 했기때문에 뛰다가 바로 WAIT00 로 갈수없고, Walk를 거쳐서 가야합니다.

(사실, 분기 꼬일까봐 지금 귀찮기도하고 나중에 생각하도록하겠습니다..)

Run 이나 Walk에서 Trigger 이용해서 jump 구현할 수 도 있고, 여러가지 가지고 놀 수  있는방법이 많아서 가지고 노셔도 무방할거같습니다.

아마 다음포스팅이 Follow cam ... 몇일좀 만들어보고 정리되면하겠습니다.

감사합니다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Example project' 카테고리의 다른 글

플레이어 체력 소모  (0) 2019.01.25
몬스터 접근 영역  (0) 2019.01.25
Rigid Body 를 이용한 캐릭터 위치 이동  (0) 2018.12.30
게임 스테이지 제작  (0) 2018.03.14