유니티에서 사물을 상태에 따라 지정된 움직임을 수행하게 하는 방법을 알아본다

애니메이션

  • 현실에서의 물체의 움직임과 기능을 게임 공간에서는 애니메이션으로 구현할 수 있다. 플레이어와 동물, 몬스터, 심지어 사물의 움직임도 애니메이션으로 처리할 수 있다. 상호작용에 따른 움직임 구현을 위해 애니메이션이 사용된다

  • 애니메이션은 유한상태머신(FSM)을 사용하여 구현한다. 이 패턴은 게임 AI를 개발할때도 유용하다

  • 애니메이션은 게임 오브젝트에게 움직임을 부여하는 기능. 이를 사용해 미리 저장되어 있는 움직임을 적용하거나, 움직임을 만들어 내기도 한다.

  • 단일의 애니메이션을 적용하기 위한 컴포넌트

  • MVC 모델로 볼 수 있다. PlayerController(Controller), Animator Parameter(Model), 상태 중 클립(View)

    • 프로그래머 입장에서 애니메이션은 UI에서 많이 쓰인다. 플레이어, 몬스터 등 물체들의 움직임을 구현하는 것은 전문적으로 애니메이터들이 한다

FSM

  • 유한 상태머신(Finite State Machine)상태 패턴을 기반으로 동작을 제어하는 시스템을 구현하기 위한 모델
  • MVC 패턴
  • 파라매터 : 모델
  • 애니메이터 :
  • 플레이어 컨트롤러 : 컨트롤러
  • 상태 변화에 따른 객체의 동작이 복잡하고, 여러 가지 조건에 대응해 상태를 변경해야 하는 경우 사용
  • 유니티에는 애니메이션 컨트롤러유한상태머신을 이용해 구현되어 있으며, 부여된 객체의 상태변화에 따른 애니메이션을 유동적으로 관리한다
  • 하나의 파라매터에서는 한 가지의 상태만 가질 수 있고, 다수의 파라미터를 사용해 모델의 움직임과 표현을 사용할 수도 있다

사전 작업

  • 애니메이션에 할당하기 위해 간단하게 캐릭터를 만든다
public class AnimPlayerController : MonoBehaviour
{
    [SerializeField] Rigidbody rigid;
    [SerializeField] AnimPlayerModel model;
    [SerializeField] Animator animator;

    void Update()
    {
        Move();
    }
    private void Move()
    {
        float xInput = Input.GetAxisRaw("Horizontal");
        float zInput = Input.GetAxisRaw("Vertical");

        Vector3 dir = new Vector3(xInput, 0 , zInput);
        if(dir.sqrMagnitude > 1)
        {
            dir = dir.normalized;
        }
        // 이동 방법으로 많이 쓰는 방식
        // rigidbody의 velocity를 MoveTowards 한다
        // 즉, 현재 물체의 속도를 특정 속도까지 "도달" 시키는 것
        // MoveTowards는 목적지에 도달하면 더이상 움직이지 않는 것이니까
        // 특정 속도(목적지) 도달 후 더 속도가 증가 안함
        rigid.velocity = Vector3.MoveTowards(rigid.velocity, dir * model.MaxSpeed, model.Accelation*Time.deltaTime);

        if(dir != Vector3.zero)
        {
            transform.rotation = Quaternion.Lerp(transform.rotation,Quaternion.LookRotation(dir),10*Time.deltaTime);
        }
    }
}
public class AnimPlayerModel : MonoBehaviour
{
    [SerializeField] float maxSpeed;
    public float MaxSpeed {  get { return maxSpeed; } set { maxSpeed = value; } }
    [SerializeField] float accelation;
    public float Accelation { get { return accelation; } set { accelation = value; } }

}
  • 캐릭터를 제어하기 위한 모델과 컨트롤러

애니메이션 클립(Animation Clip)

객체의 움직임을 미리 정의한(저장한) 파일. 애니메이션 파일이 이에 해당한다

애니메이션 파일 새로 만들기

  • 프로젝트 창에서 다음과 같이 선택하면 새로운 애니메이션 생성이 가능하다

애니메이션 할당하기

  • Idle이라 이름을 붙이고, 애니메이터 창에서 Motion에 해당 애니메이션을 참조시킨다

애니메이션 제작하기

  • Idle 애니메이션 동작을 만들거다
  • 팔이 들썩들썩 하는 애니메이션을 만든다. 위치 조정으로 이루어진다
  • Add Property를 누르면, 여러 속성들을 변경할 수 있게 추가할 수 있고, 속성 변경을 원하는 시간에 Key값을 변경 시켜서 애니메이션이 만들어진다
  • Key 값을 추가시키면서 내용을 조정하면 된다
  • 각 키값의 사이는 자동으로 블렌드가 되어서 딱딱하게 움직이는게 아니라 부드럽게 움직인다
  • 일반적으로 Humernoid 애니메이션은 위와 같이 되어 있다
  • 관절 구조로 되어있는 모델에 각 관절들의 움직임들을 만든 것

녹화 기능

  • 하나하나 Key를 늘려가며 작업하기에는 오래걸리고 힘들다. 녹화기능으로 간편하게 해본다
  • 애니메이션 창에서 타임라인을 찍고, 원하는 작업을 하면 알아서 키가 추가된다

UI 애니메이션 예시

  • 순차적으로 UI가 들어왔다가 나가는 식으로 구현해서 부드러운 UI 화면을 구현할 수 있다

반복 재생

  • Loop Time 을 체크해서 애니메이션을 반복시킬 수 있다

애니메이션 컨트롤러(Animation Controller)

  • 애니메이션 클립을 등록해 두고 객체의 상태에 따라 애니메이션들을 관리하고 재생하는 일종의 작업 지시서
  • 컨트롤러의 내부는 유한 상태머신(FSM)으로 구현되어 있다
  • 애니메이터가 직접 모든 애니메이션 클립들을 들고 있는 것이 아니라, 애니메이션 컨트롤러가 들고 있는 방식으로 되어있다

애니메이터 컨트롤러 만들기

  • 프로젝트 창에서 위와 같이 클릭하면 새로 생성된다

애니메이터에 참조시키기

  • 애니메이터 컴포넌트에서 Controller 부분에 참조시키면 적용된다
  • 애니메이터 컨트롤러를 더블 클릭하면 자동으로 애니메이터 창이 열리게 된다

AnyState

  • Die 애니메이션이 있을 때, 모든 상태에서 Die로 연결시키기에는 너무 많다. 그럴 때 쓸 수 있는 기능이 AnyState이다
  • 어떤 상태에 있던지, Idle이든, Walk든, Attack이든 특정 조건을 만족하면 해당 애니메이션으로 변경 시킬 수 있다
  • 요렇게 간편화 할 수 있다

무한 순환

  • Die에서도 AnyState로 인식이 되서, Die 에서 Die로 무한 순환이 일어난다
  • Can Transition To Self 를 체크 해제 하면 해결된다

상태의 조건을 동시에 만족 시킬 경우

  • Transition의 순서에 따라 우선순위가 정해진다. 더 앞에 있는 Transition으로 적용된다

애니메이터(Animator)

유니티 - 애니메이터

  • 애니메이션 컨트롤러를 객체에 적용하기 위한 컴포넌트
  • 시간에 따른 속성을 편집해줄 수 있는 기능을 가지고 있다
  • 예전 방식은 Animation 컴포넌트.
  • Controller : 애니메이션 컨트롤러를 참조한다
  • Avatar : 애니메이션이 적용될 아바타를 참조한다
  • Update Mode : NormalTimeScale의 영향을 받는다. Animated PhysicsFixed Update에 호출된다. Rigidbody와 함께 물리처리에 적용해야하는 애니메이션의 경우에 사용한다, Unscaled TimeTime Scale과 상관없이 재생된다
  • 컬링 모드 : 해당 물체가 컬링 되었을 때의 애니메이션 동작을 정한다

상태 생성

  • 애니메이션은 FSM으로 구현되어 있다. 상태를 추가해서 애니메이션을 할당할 수 있다

처음 상태 변경

  • 물체의 처음 상태를 변경해 줄 수 있다

FSM을 쓰는 이유

  • 애니메이션이 많아지면, 여러 상태들을 가지게 되고, 유한상태머신으로 관리해야 효율적이다

애니메이터 추가

  • 애니메이션 컴포넌트를 추가하려는 물체에 애니메이터를 검색한다

애니메이터 창


애니메이션 예시) Idle, Walk

  • 사전에 작성했던 스크립트 들과 위에서 만든 애니메이션들로 움직임에 따라 애니메이션이 다르게 재생되게 구현해보자
  • 먼저, 컨트롤러 스크립트에서 Move() 함수에 다음을 추가한다
Move()
{
	animator.SetFloat("MoveSpeed", rigid.velocity.magnitude);
}

  • 만들어진 Player에 위와 같이 RigidBody, 작성한 스크립트 2개를 추가한다
  • 회전은 막아준다
  • Animator 창 에서 Walk 상태를 추가해주고, Make Transition을 선택해서 Idle과 쌍방으로 이어준다
  • 조건을 걸어주기 위해 Animator 창에서 Parameter를 추가해준다. floatMoveSpeed를 추가했다
  • Idle 상태를 클릭하고, 동그라미 친 부분을 누른다
  • 다음과 같이 Conditions를 추가해준다. Walk 상태는 반대로 Less로 잡아주면 된다
  • 속도를 기준으로 움직이면 Walk 애니메이션, 멈춰있을 때는 Idle 애니메이션이 재생된다

믹사모와 유니티쨩

  • 휴머노이드 모델에 휴머노이드 애니메이션을 적용시켜보자. 무료이면서 범용적으로 쓰이는 mixamo 사이트의 애니메이션과, 다른 휴머노이드 모델의 예시로 쓸 수 있는 유니티짱을 다운 받는다
    • 믹사모 홈페이지 : 무료로 다양한 휴머노이드 애니메이션 에셋을 구할 수 있다
    • 유니티쨩 : 유니티 엔진의 모에화. 휴머노이드 모델이다

휴머노이드

  • 모델에서 애니메이터 컴포넌트의 아바타가 어떤 타입인지에 따라 다음과 같이 동작 여부가 달라진다

    모델애니메이션동작여부
    휴머노이드휴머노이드O
    제네릭휴머노이드X
    휴머노이드제네릭X
    제네릭(모델전용 한정) 제네릭O
    • 동물 모델(제네릭) 이면 동물 전용 애니메이션(제네릭)을 써야 한다

T-Pose

  • T- Pose를 일단 기본으로 다운로드 해야한다. 믹사모에서 다운로드 받을 경우, 제네릭으로 임포트 되는데, 휴머노이드로 변경하면 관절이 제대로 오토매핑 된다. T-Pose만 추가 조정 필요없이 가능하다. 단, 유니티에서 다운 받는 모델, 애니메이션 에셋의 경우 필요없다
  • 휴머노이드 애니메이션 적용을 위해서 필요하다
  • 그냥 모델로도 강제 T-Pose로 변형 시켜서 쓸 수 있지만, 완벽하게 되지 않아서 관절이 돌아간다거나, 척추측만증이 된다거나 하는 문제가 있다
  • 휴머노이드 애니메이션을 쓰면, 모델 제약 없이 같은 휴머노이드면 동작하기 때문에 쓴다. 범용성이 높다. 심지어 SD 캐릭터도 가능하다
  • 남성형이면 Y Bot. 여성형이면 X Bot을 검색해서 모델을 설정한다
  • 유니티 전용으로 fbx 파일을 다운로드 해야 한다
  • 다운로드 된 fbx 파일은 프로젝트 창에 드래그&드롭 하면 추가된다
  • 여기서 Rig를 클릭한다. 그다음 genericHumanoid로 변경한다

    Apply를 누르고 Configure를 누르면 매핑을 확인 할 수있다

  • 제대로 매핑된 것을 확인할 수 있다. 동그라미 중, 실선은 필수. 점선은 필수까진 아니다. 회색 점선은 추가적인 옵션이다

참고

  • 에셋 스토어에서 구매한 모델, 애니메이션인 경우 웬만하면 UV매핑Humanoid 설정이 되어 있다

애니메이션 적용

  • mixamo에서 T-Pose 외에 이제 애니메이션을 추가로 다운로드 받는다. 캐릭터는 동일하게 Y BOT 또는 X BOT으로 해야한다.

  • T-POSE와 함께 캐릭터 모델을 받았으니 이번에는 Skin(without skin)으로 설정하고 받는다 받는다

  • 임포트한 애니메이션의 RigHumanoid로 설정하면, 자세가 구부정한 것을 볼 수 있다. 이것이 아까 설명한 것처럼 T-Pose 모델이 필요한 이유다

  • 빨강 동그라미가 쳐친 Pose -> reset 을 누르면, 원래 포즈가 나온다. 여기서 매핑이 진행되어서 뒤틀린 것이다

  • Rig -> Avatar DefinitionY Bot@T-PoseAvatar를 가져오면된다. 이제 매핑이 제대로 된 것을 볼 수 있다

애니메이터에 적용시키기

  • 먼저 Y Bot 모델에 Animator 컴포넌트를 추가한다. ControllerAnimation Controller를 만들어 넣는다

  • 만든 Animation Controller를 연다

  • 다운받은 애니메이션은 프로젝트 창에서 여기에 있다

  • 화면처럼 Throw 애니메이션을 애니메이터 창에서 원하는 상태에 집어넣는다

  • 실행하면 이제 애니메이션이 제대로 수행되는 것을 확인할 수 있다

  • 위 과정들을 정리하자면 아래와 같다

0. Mixamo.com 사이트 접속
1. Chracters : 모델(제네릭) / 남성형 y bot & 여성형 x bot
2. Animations : T pose 검색 후 적용
3. Download -> Format(for unity) + Skin(with skin)
4. 유니티 프로젝트 창에 모델링 파일 넣기
5. 유니티 프로젝트의 모델링 파일을 선택하고 Rig 탭 선택
6. Animation Type : Generic->Humanoid
7.Apply 버튼을 눌러 적용
8. Configure -> T Pose의 모델링의 관절이 잘 매핑되었지 확인
9. 혹시나 자동매핑이 되지 않은 경우면 (손수 관절 넣어주기)
=> 휴머노이드 모델 =================================
0. Mixamo.com 접속
1. 애니메이션에서 원하는 애니메이션(제네릭) 선택
 *** 단, 주의사항 ***
모델을 다른 모델로 선정하지 말고 똑같은 모델로 애니메이션
2. Download -> Format(for unity) + Skin(without skin)
3. 유니티 프로젝트 창에 옮겨서 복사
4. 유니티 프로젝트 창으로 옮긴 애니메이션 모델링파일 선택
5. Rig 탭 선택 -> Animation Type -> Humanoid 변경
6. Avatar Definition : Copy From Other Avatar
7. Source : Y bot avatar 또는 X bot avatar T pose로 선택
8. Apply 로 적용
=> 믹사모를 휴머노이드 애니메이션으로 적용 ============="

애니메이션 팩 적용하기

  • 여러 애니메이션들이 담긴 팩을 다운 받아본다. 이번에는 mixamo에서 Shooter Pack을 받아본다

  • 애니메이션들을 Asset 폴더 적당한 곳에 풀고, 모든 애니메이션을 Rig -> Animation Type -> Humernoid로 바꿔준다

  • Avatar Definition -> Copy From Other Avatar -> Y Bot@T-PoseAvatar 로 변경해준다

애니메이션 루프

  • 걷는 것과 같은 애니메이션은 루프를 시킬 수 있다. Loop Time을 체크해주면 반복 시킬 수 있다
  • Loop Time 쪽의 loop match초록불이면 루프가 가능한 애니메이션 이라는 뜻이다. 첫 프레임의 키와 마지막 프레임의 키가 동일할 경우, 초록불이다.

  • 죽는 모션과 같은 애니메이션은 첫 프레임의 키와 마지막 프레임의 키가 동일하지 않으므로, 루프를 시킬 수 없는 애니메이션이다

애니메이션의 좌표기준

  • 클라이언트 개발자면, Pivot을 기준으로(발바닥) 잡는다. 이유는 여러가지 있는데, 예를들어 Center로 기준이 되어 있을 경우 플레이어가 범위 공격을 했을 때 키가 작은 몬스터는 맞고, 키가 큰 몬스터는 맞지 않는 문제가 생길 수 있다
  • 또한 발을 기준으로 캐릭터가 움직인다면 계속 땅에 붙어서 움직이는데, 중앙을 기준으로 움직인다면 땅에 점점 잠기는 문제가 생기기도 한다

  • 그런데 애니메이터면 보통 Center(골반)을 기준으로 모델링 작업한다
  • 그래서 mixamo에서 다운 받은 애니메이션들도 골반 기준으로 작업되었다
  • 실행 시, 사선으로 이동하는 이유가 발 기준으로 움직이는 것이 아닌, 골반을 기준으로 움직이는 것이기 때문이다. 잘 보면 골반은 정중앙을 바라보고 있다

해결법

  • Root Transform Rotation -> Based UponOriginal로 바꿔준다. 그러면 발로 기준이 바뀌게 된다

  • 이제 원하는 대로 정면으로 이동한다

  • 이렇게 틀어져 있는 애니메이션의 포지션도 Bake Into Pose를 체크하면

  • Transform 위치도 잡아준다

  • 유니티짱의 애니메이션들은, 유니티 기준으로 만들어져서 발바닥을 기준으로 잡혀있다

포지션 제한

  • 슈터 팩에서 점프 애니메이션의 경우 실제로 모델의 Y값도 변한다

  • 그런데 프로그래머 입장에서 애니메이션으로 인해 점프의 높이가 변하는 것 보다, 스크립트로 직접 조절하고 싶으니 Feet을 기준으로 바꾼다.
  • 이제 위치이동이 없다

애니메이션 좌우반전

  • Mirror를 체크하면, 애니메이션이 좌우반전된다

모델간의 보폭

  • 같은 위치에서 시작해도, 유니티짱보다 크기가 더 큰 Y Bot이 먼저 앞서나가는 것을 볼 수 있다. 이것은 모델의 실제 보폭만큼 걷는 것이기 때문이다. Root Motion과 관련이 있다.
  • 걷는것이 보폭이 적용이 되어 있어서 그런 것이다. Apply Root Motion을 체크 해제하면, 제자리 걸음을 하게 된다. 이제 스크립트로 이동을 구현하면 둘이 동일하게 걷는다
  • 그런데, 카포에라 자세와 같은 것들은 위치 이동이 필요한 애니메이션이다. 움직임이 제자리에서만 일어나면 안되기 때문에 이런애들은 Root Motion을 켜줘야 한다
  • 기준위치까지는 바뀌지 않게 하는 방법이다.

블렌드 트리(Blend Tree)

  • 애니메이션간의 전환이 일어날 때, 두 애니메이션 클립을 결합하여 자연스러운 움직임을 만드는 도구

걷다가 뛰기

  • 걷는 모션에서 속도가 좀 더 빨라지면, 뛰게 하고 싶다. 그런데 그냥 애니메이션을 이어 붙이자니 부자연스럽다. 어떻게 해야할까? 이럴때 블렌더를 이용한다

아바타 마스크

  • 모델의 원하는 부위만 애니메이션이 적용 되게 할 수 있는 기능. 레이어처럼 생각하면 된다

움직이며 총 쏘기

  • 걷는 애니메이션 중에 총을 쏘는 애니메이션을 재생 시키려면 어떻게 해야할까? 이럴 때 아바타 마스크를 쓰면 구현할 수 있다. 상반신의 총 쏘는 애니메이션만 적용시키면 된다

상태 설정

  • 먼저, 애니메이터에 Fire 상태를 추가하자. 추가한 상태에 firing rifle 애니메이션을 추가한다
  • 그리고 어느 상황에서든 발사를 하면 총이 발사 되어야 하니 Any State에서 연결해준다
  • 그 다음 ParameterTrigger를 추가해준다. 이름은 Fire로 하겠다
  • Fire 상태 이후 Exit 상태로 연결 해준다. Exit 이후는 자동으로 Entry로 돌아간다
  • 발사가 즉시 적용 되어야 하니 AnyStateHas Exit Time을 체크 해제 한다
  • 발사 후 Exit은 반대로 체크해주고, Exit Time을 위와 같이 변경한다

스크립트 수정

  • 플레이어에 공격 기능을 추가한다
public class AnimPlayerController : MonoBehaviour
{
    [SerializeField] Rigidbody rigid;
    [SerializeField] AnimPlayerModel model;
    [SerializeField] Animator animator;

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            Fire();
        }
        Move();
    }
    private void Move()
    {
        float xInput = Input.GetAxisRaw("Horizontal");
        float zInput = Input.GetAxisRaw("Vertical");

        Vector3 dir = new Vector3(xInput, 0 , zInput);
        if(dir.sqrMagnitude > 1)
        {
            dir = dir.normalized;
        }
        rigid.velocity = Vector3.MoveTowards(rigid.velocity, dir * model.MaxSpeed, model.Accelation*Time.deltaTime);

        if(dir != Vector3.zero)
        {
            transform.rotation = Quaternion.Lerp(transform.rotation,Quaternion.LookRotation(dir),10*Time.deltaTime);
        }


        animator.SetFloat("MoveSpeed", rigid.velocity.magnitude);
    }

    private void Fire()
    {
        animator.SetTrigger("Fire");
    }
}
  • Space키를 누르면 Trigger로 인해 발사하는 애니메이션이 재생된다
  • Triggerbool 처럼 true, false가 아니라 실행 될 때 한 번 ON이 되는 것이다
  • Fire 트리거를 누르면, 그 즉시 발사 애니메이션이 재생된다

애니메이터 레이어 추가

  • 상반신만 따로 발사 애니메이션을 재생할 수 있게 레이어를 추가한다. 이름은 Upper Layer로 지정했다

아바타 마스크 추가

  • 아바타 마스크는 위와 같이 추가할 수 있다
  • 신체 부위를 마우스로 클릭하면 해제 할 수 있다. 우리는 상반신만 쓸 예정이니 위와 같이 선택을 남기고 저장한다
  • 애니메이터 레이어에서 Mask 부분에 해당 아바타 마스크를 추가하면 된다. Weight는 1로 한다. 애니메이션이 적용되는 정도를 나타낸다
  • Blending은 애니메이션이 덧씌워지는 방식을 결정한다. Override는 덮어쓰기, Additive는 더해서 재생된다
  • 레이어의 순서에 따라서 애니메이션 우선순위가 결정된다. 위와 같은 경우 Base Layer가 우선순위가 더 높다. 그래서 먼저 걷기 애니메이션이 적용된 후, 상반신에 덮어쓰기로 발사 애니메이션이 재생 될 수 있다. 반대인 경우, 캐릭터가 멈춰있는 상태가 된다

베이스 레이어 설정

  • Idle용으로 애니메이션을 새로 추가한다
  • Base Layer 설정
  • Upper Layer 설정

실행

  • 잘 보이지는 않지만, 걷는 것과 총 발사를 동시에 할 수 있게 됐다
  • 걷는 중에 총을 쏘는 상반신 애니메이션을 재생하니, 골반이 이미 돌아간 상황이라 조준점이 마구 흔들린다. 어떻게 해야될까? 애니메이션 리깅을 통해 인버스 키네마틱을 적용시키면 된다

블렌드 트리 (Blend Tree)

  • 애니메이션의 강도를 정해줄 수 있다. 완전 천천히 걷는 걸 구현해 줄 수 있다. 또는 걷는 애니메이션에서 뛰는 애니메이션으로 넘어갈 때 자연스럽게 넘어가게 할 수 있다
  • 현재 구현상황에서는 속도가 0.1만 되어도 일반적인 걷는 애니메이션이 나온다. 이는 자연스럽지 않다. 블렌드를 통해 자연스럽게 바꿔줄 수 있다

블렌드 트리 생성

  • 애니메이터 창에서 위와 같이 생성 가능하다. 생성한 이후 이름을 Move로 바꿔준다. 이거 하나로 정지, 걷기, 뛰기 다 해줄 수 있다

블렌드 트리 설정

  • 더블 클릭하면 전용 설정 창으로 전환된다
  • Add Motion Field를 누른다
  • 이와같이 애니메이션 3개를 추가한다. ParameterMoveSpeed로 설정한다. Automate Thresholds를 체크 해제 하면 Threshold를 직접 정해줄 수 있다

재생

  • 이제 속도가 조금씩 올라갈 때 마다, 자연스럽게 애니메이션들이 블렌딩이 되어 재생된다

  • 이동이 매우 자연스러워졌다

  • 1D, 2D가 있다. 2D는 2개의 Parameter로 구현한다. 2차 함수라 생각하면 편하다. 애니메이션을 8방향으로 조절이 가능하다. 예를들어 대각선 이동정면으로 뛰어서 이동을 합성하면 대각선으로 뛰어서 이동이 가능해진다

RagDoll

  • 이동용 충돌체와 피격용 충돌체 = Ragdoll은 따로 구현한다

IK(Inverse Kinematic)

  • 역운동학. 인버스 키네마틱
  • 자식에 의해서 부모가 딸려오는 경우를 만들어 줄 수 있다. 가장 유명한 것은 Foot IK. 계단에서의 모습을 생각하면 이해가 쉽다. 조준선을 기준으로 캐릭터의 모델을 변형시키는 것도 IK.
  • 유니티 애니메이션 리깅 이라는 패키지를 써주면 된다

애니메이션 State Behaviour

애니메이션 이벤트

  • 애니메이션 자체에 스크립트를 추가해서, 특정 타이밍에 이벤트를 발생 시킬 수 있다
profile
개발 박살내자

0개의 댓글