본문 바로가기

유니티 새소식

[유니티 5.0] 새로운 메카님 기능들 소개

지난 블로그에서 5.0에 추가된 메카님의 새로운 기능들을 잠깐 소개해드렸습니다. 이번에는 소개해드린 것을 바탕으로 조금 더 들어가볼까 하는데요. 간단한 소스코드와 그림을 통해 기능들을 한번 살펴 보겠습니다.


RANDOM NODES


이번 유니티5의 메카님에서는 State Machine와 StateMachineBehaviours를 사용하여, 무작위 노드 셀렉터를 쉽게 만들 수 있게 되었습니다.



우선 위에 그림 처럼, Entry 노드에서 전이가 되어야 하는 상태들들 만듭니다. 그리고 각 전이 화살표를 클릭해서 다음 사진과 같은 조건들을 넣어주면 되겠습니다.




그 다음, Idle StateMachine에 StateMachineBehaviour를 추가하여, OnStateMachineEnter()에 다음 처럼 구현 하면 됩니다.


1
2
3
4
override public void OnStateMachineEnter(Animator animator, int stateMachinePathHash)
{
    animator.SetFloat(“IdleIndex”, Random.Range(0.0f, 4.0f));
}
cs



PROCEDURAL STATES


유니티 5.0에서, Humanoid IK solver의 기능이 개선되었고, 'IKHint'라고 불리는 새로운 기능이 추가 되었습니다.

이 기능으로 인해 개발자가 IK Chain Roll에 대한 제어를 할 수 있게 되었는데, StateMachineBaviour의 OnStateIK() 콜백함수에서 상태에 맞는 IK 설정을 할 수 있습니다. 다음의 코드는 이 기능들을 사용해 캐릭터가 춤을 추게하는 간단한 예제 코드입니다.






CREATE YOUR OWN TOOLS


유니티 5.0에서 새로운 API가 공개된 이후로, 메카님 에셋들을 생성하고 편집할수 있는 모든 종류의 도구(Tool)을 만들 수 있게 되었습니다.

이로 인해, 기존에 여러 단계를 거쳐서 했던 작업들을, 간단하게 편집창에서 할 수 있게 되었는데요. 그 중 하나로 BlendTree를 사용 하는 경우를 예로 한번 들어 보겠습니다.




2D 작업을 하는 경우라면, Sprite 애니메이션과 대상 오브젝트를 드래그해서 넣고 밑에 있는 "Create" 버튼을 누르기만 하면 됩니다.




다음은 위에 과정들을 스크립트를 통해서 구현해 보겠습니다. 스크립트에서도 간단하게 구현할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Creates the controller</pre>
UnityEditor.Animations.AnimatorController controller = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath("Assets/" + target.name + ".controller");
 
// Adds 2 parameters
 
controller.AddParameter("VelX", UnityEngine.AnimatorControllerParameterType.Float);
 
controller.AddParameter("VelY", UnityEngine.AnimatorControllerParameterType.Float);
 
// Blend Tree creation
 
UnityEditor.Animations.BlendTree blendTree;
 
controller.CreateBlendTreeInController("Move"out blendTree);
 
// BlendTree setup
 
blendTree.blendType = UnityEditor.Animations.BlendTreeType.SimpleDirectional2D;
 
blendTree.blendParameter = "VelX";
 
blendTree.blendParameterY = "VelY";
 
for (int i = 0; i < animCount; ++i)
 
{
 
blendTree.AddChild(clips[i], DirectionToVector(directionValues[i]));
 
}
 
cs



STATEMACHINES EVERYWHERE


이번에 추가된 StateMachineBehaviours의 가장 멋진 장점을 하나 뽑는다면, 애니메이션이 없어도 StateMachine을 사용할 수 있다는 것입니다. 게임내에서 StateMachine같은 상태 전이의 흐름으로 전개되는 로직이 있다면, 언제든지 StateMachine을 이용해서 비주얼하게 구현할 수 있게 된 것입니다.


예를 들어, 음악의 흐름을 StateMachine으로 나타내면



또, 메뉴를 StateMachine으로 나타내면



이상으로 이번에 유니티 블로그에 소개된 새로운 메카님 기능들에 대해서 알아보았습니다.

새로운 기능들이라, 기존 기능들에 대해서 잘 알고 있어야 이해가 되는 부분도 있을 겁니다. 저 역시도 이해가 안되는 부분이 있어서 많이 힘들었지만, 조금 이라도 이해를 돕기 위해 밑에 참조 사이트를 적어놨으니 함께 보시면 이해하는데 조금은 도움이 되실거라고 생각됩니다.




원문 

- HAVING FUN WITH THE NEW MECANIM FEATURES


참조

- HumanIK란 무엇인가

- 유니티를 이용한 간단한 IK 사용기

- MECANIM HUMANOIDES