2018. 12. 19. 01:06ㆍExample 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 |