Unity Core 6 - 애니메이션

1. 애니메이션 창

Window  --> Animation --> Animation을 통해  애니메이션 창 열기

애니메이션 창은 주로  Unity 내에서 애니메이션을 만들고 수정하는 데 사용되며  장면의 모든 개체는 애니메이션 창을 통해 애니메이션할 수 있습니다.

원리:

애니메이션 제작 시 : 일정한 시점에 오브젝트에 탑재된 스크립트의 변수 변화를 기록

애니메이션 재생 시 : 애니메이션 제작 시 기록된 데이터를 정해진 시점에 변경하여 애니메이션 효과 연출

애니메이션 타임라인:

각 애니메이션 파일에는 애니메이션의 시작부터 끝까지 고유한 수명 주기가 있습니다.

애니메이션 타임라인에서 각 애니메이션 수명 주기 변경을 편집할 수 있습니다.

애니메이션의 프레임:

애니메이션의 프레임 속도를 초당 60프레임이라고 가정하면 애니메이션이 1초에 최대 60번의 변화 기회를 갖는다는 의미입니다.

각 프레임 사이의 간격은 1초/60 ≈ 16.67밀리초

즉, 객체의 상태를 가장 빠르게 16.67밀리초마다 변경할 수 있습니다.

키 프레임: 타임라인의 특정 시간 노드에서의 애니메이션 상태

  1. 미리보기 모드(스위치)
  2. 녹화 모드(스위치), 미리 보기 모드는 열면 기본적으로 활성화됩니다.
  3. 애니메이션의 처음으로 돌아가기
  4. 이전 키프레임(단축키: ",")
  5. 애니메이션 재생(단축키: "Alt" + ",")
  6. 다음 키프레임(단축키: ".")
  7. 애니메이션의 끝으로 돌아가기(단축키: "Alt" + ".")
  8. 현재 어떤 프레임에
  9. 선택으로 필터링
  10. 키프레임 추가
  11. 이벤트 추가
  12. 키프레임 모드
  13. 커브 모드

2. 애니메이션 생성 및 편집

(1) 애니메이션 만들기

  1. 장면에서 애니메이션을 적용할 개체를 선택합니다.

  2. 애니메이션 창에서 만들기를 클릭합니다.

  3. 애니메이션 파일이 저장될 위치를 선택하십시오

애니메이션 파일을 저장할 때 Unity는 다음을 수행하는 데 도움이 됩니다.

  1. 애니메이터  컨트롤러(애니메이션 컨트롤러 또는 애니메이션 상태 시스템) 리소스(새 애니메이션 시스템) 만들기 

  2. 새로 만든 애니메이션 파일을 Animator Controller에 추가합니다.

  3. 애니메이션 개체에 대한 Animator 구성 요소 추가

  4. Animator 구성 요소 연결을 위해 생성된 Animator Controller 파일

(2) 애니메이션 편집

애니메이션 파일 생성 후 해당 게임 오브젝트를 클릭하여 애니메이션 인터페이스를 편집합니다. 여기에서 편집해야 하는 애니메이션 파일을 전환합니다.

여기서 변경 속성을 추가하거나 애니메이션에서 변경하려는 스크립트 변수를 추가할 수 있습니다.

객체를 직접 선택하여 기록 모드에서 속성을 수정할 수도 있으며 Unity는 이러한 변경 사항을 자동으로 기록합니다.

(3) 곡선 설정

곡선을 클릭하여 곡선 설정을 입력합니다. 시퀀스 프레임을 마우스 오른쪽 버튼으로 클릭하면 다음 매개변수가 나타납니다.

  1. 키 삭제: 키프레임 삭제
  2. 키 편집: 키프레임 편집
  3. 고정 자동: 탄젠트 모드, 자동으로 탄젠트 설정
  4. Auto: Clamped Auto와 유사한 구 탄젠트 모드는 구식 애니메이션 시스템에 주로 사용되며 구식 애니메이션이 아니면 사용하지 않는 것이 좋습니다.
  5. Free Smooth: 탄젠트를 자유롭게 설정
  6. 플랫: 접선이 수평으로 설정됩니다.
  7. Broken: 왼쪽 및 오른쪽 곡선 접선을 별도로 제어
  8. Left / Right / Both Tangent: 접선 모드
    • 무료: 자유롭게 설정
    • 선형: 직선
    • 상수: 상수 스위칭
    • 가중: 체중 전환

(4) 애니메이션 파일 인터페이스 매개변수

애니메이션 파일을 클릭하고 인스펙터 패널에서 다음 매개변수를 확인합니다.

  1. Loop Time: 반복 재생 여부
  2. Loop Pose: 시작점과 끝점이 매끄럽게 연결되어 있는지 여부
  3. 주기 오프셋: 주기 애니메이션이 다른 시간에 시작될 때 주기 오프셋

3. 기존 애니메이션 시스템

(1) 오래된 애니메이션 시스템

Unity에는 두 가지 애니메이션 시스템이 있습니다.

  • 신규: 메카님 애니메이션 시스템 - 주로 애니메이터 컴포넌트를 사용하여 애니메이션을 제어합니다.
  • 이전: 애니메이션 애니메이션 시스템 - 주로 애니메이션 구성 요소를 사용하여 애니메이션을 제어합니다(Unity4 이전 버전이 사용될 수 있음).

현재 애니메이션 창에서 객체에 대해 생성하는 애니메이션은 새로운 애니메이션 시스템에 의해 지배될 것입니다.

이전 애니메이션 시스템은 특별한 요구 사항이 있거나 일부 간단한 애니메이션에만 사용됩니다.

기존 애니메이션 시스템은 주로 이전 버전 프로젝트와 간단한 자체 제작 애니메이션을 처리하는 데 사용되며, 새 프로젝트는 모든 사람이 사용하는 것이 권장되지 않습니다.

주요 구성 요소: 애니메이션

참고: 애니메이션을 만들기 전에 객체에 Animation 컴포넌트를 추가한 후 애니메이션을 만드세요. 이때 제작되는 애니메이션은 이전 애니메이션 형식과 다릅니다.

동시에 생성된 애니메이션 파일에 표시되는 파라미터도 이전과 다릅니다.

  • 기본값: 읽기 설정이 더 높아짐 기본 반복 모드
  • 한 번: 재생을 한 번 중지하면 재생이 종료됩니다.
  • 루프: 처음부터 끝까지 루프 재생
  • PingPong: 연속 루프에서 처음부터 끝까지 재생한 다음 끝에서 처음까지 재생
  • ClampForever: 재생이 끝난 후 마지막 프레임에 머물며 항상 마지막 프레임을 재생하고 상태가 중지되지 않고 애니메이션이 항상 재생됩니다. 성능은 원스와 동일

(2) 파라미터 소개

  1. 애니메이션: 기본적으로 재생되는 애니메이션
  2. 애니메이션: 이 애니메이션 구성 요소가 제어할 수 있는 모든 애니메이션
  3. 자동 재생: 처음에 기본 애니메이션을 자동으로 재생할지 여부
  4. Animate Physics: 애니메이션이 물리와 상호 작용하는지 여부
  5. Culling Type: 애니메이션을 재생하지 않을 시점을 결정합니다.
    • 항상 애니메이션: 항상 재생
    • 렌더러 기반: 기본 애니메이션 포즈를 기반으로 한 컬링

(3) 코드 제어 오래된 애니메이션 시스템

private Animation animation;

void Update()
{
    // 1.播放动画
    animation.Play("1");
    animation.Play("2");

    // 2.淡入播放,自动产生过渡效果
    //   当你要播放的动画的开始状态 和当前的状态 不一样时 
    //   就会产生过渡效果
    animation.CrossFade("3");

    // 3.前一个播完再播放下一个
    animation.PlayQueued("2");
    animation.CrossFadeQueued("2");

    // 4.停止播放所有动画
    animation.Stop();

    // 5.是否在播放某个动画
    if (animation.IsPlaying("1")) { }

    // 6.播放模式设置
    animation.wrapMode = WrapMode.Loop;

    // 7.其它(了解即可,新动画系统中会详细讲解)
    //   层级和权重以及混合(老动画系统需要通过代码来达到动画的遮罩、融合等效果)
    // 设置层级
    animation["1"].layer = 1;
    // 设置权重
    animation["1"].weight = 1; 
    // 混合模式 叠加还是混合
    animation["1"].blendMode = AnimationBlendMode.Additive;
    // 设置混组相关骨骼信息
    animation[""].AddMixingTransform();
}

(4) 애니메이션 이벤트

애니메이션 이벤트는 주로 처리에 사용되는데 애니메이션이 특정 순간까지 재생될 때 손상 감지, 총알 발사, 특수 효과 재생 등과 같은 일부 로직을 트리거하고 싶습니다.

이벤트에 추가할 Inspector 패널에서 Function을 선택합니다.여기서 Function은 스크립트에 메서드를 작성하여 해당 객체에 마운트해야 합니다.

4. 애니메이터 창

(1) 유한 상태 기계(FSM)

상태 머신이라고도 하는 유한 상태 오토마톤이라고도 하는 이 상태 사이의 전환 및 작업과 같은 유한한 수의 상태 및 동작을 나타내는 수학적 모델입니다.

Limited: 무한이 아니라 제한됨을 나타냅니다.

주: 소유한 모든 주를 말합니다.

예를 들면:

우리 인간이 많은 행동을 할 수 있다고 가정해 봅시다.

우리는 매일 이러한 상태 사이를 전환하며 이러한 상태는 많지만 제한적입니다. 특정 조건이 충족되면 이러한 상태 사이를 전환하며 이 전환은 언제든지 발생할 수 있습니다.

게임 개발의 많은 기능적 시스템은 유한 상태 머신, 가장 일반적인 상태 머신 시스템입니다.

액션 시스템 - 특정 조건 충족 시 액션 전환, 액션 제한

AI(인공지능) 시스템 - 특정 조건 충족 시 상태 전환, 상태 제한

따라서 상태 머신은 게임 개발에서 필수적인 개념입니다.

(2) 애니메이션 상태 기계 창

애니메이션 상태 머신을 생성하는 두 가지 방법:

  • 장면의 오브젝트에 대한 애니메이션을 생성할 때 자동으로 생성되며 이름은 오브젝트 이름과 동일합니다.
  • 애니메이션 상태 시스템 파일 수동 생성

  1. 레이어: 애니메이션 레이어 탭, 애니메이션에 더 많은 레이어 추가, 높은 수준의 애니메이션 재생은 낮은 수준의 애니메이션을 포함합니다.

  2. 매개변수: 매개변수 탭, 애니메이션 상태 기계의 상태 전환을 제어하는 ​​매개변수 추가

  3. 그리드 레이아웃 영역:

    상태를 편집하기 전에 관계를 전환하는 데 주로 사용됨

    • 창의 각 사각형은 상태를 나타냅니다.
    • 창의 각 화살표는 전환 조건을 나타냅니다.

    기본 세 개의 사각형:

    • 녹색 항목 사각형: 상태 시스템 프로세스를 입력합니다.
    • 빨간색 종료 사각형: 상태 시스템 프로세스 종료
    • 모든 상태: 상태 시스템의 모든 상태를 나타내는 모든 상태

    인위적으로 직사각형 추가:

    • 주황색 사각형: 처음에 재생되는 애니메이션을 나타내기 위해 Entry와 연결되는 시작 시 기본 상태 애니메이션
    • 회색 사각형 : 자신이 추가한 특정 동작 상태

애니메이션 추가:

  • 자동 추가 - 개체에 애니메이션을 적용한 후 상태 시스템에 애니메이션이 자동으로 추가됩니다.
  • 수동 추가 1 - 애니메이션 파일을 상태 시스템으로 드래그합니다(참고: 이전 애니메이션을 드래그할 때 경고가 표시됨).
  • 수동 추가 2 - 마우스 오른쪽 버튼을 클릭하여 상태를 만든 다음 애니메이션 연결

스위치 연결 추가:

상태를 선택하고 마우스 오른쪽 버튼을 클릭하여 전환 만들기를 선택하여 연결을 추가한 다음 연결하려는 상태를 클릭합니다.

전환 조건 추가:

왼쪽 패널의 매개변수 탭을 클릭하면 여기에 4가지 유형의 전환 조건을 추가할 수 있습니다.

스위칭 조건 설정:

Inspector 패널의 Conditions에서 전환 조건을 추가하려면 연결을 클릭합니다.여러 조건이 존재하는 경우 작업이 판단됩니다.

5. 애니메이터

(1) 파라미터 소개

  1. 컨트롤러: 해당 애니메이션 컨트롤러(상태 머신)
  2. Avatar: 해당 아바타 구성 정보(3D 모델 관련)
  3. 루트 모션 적용: 애니메이션 변위 업데이트 활성화 여부
  4. 업데이트 모드: 업데이트 모드, 일반적으로 수정되지 않음
    • 일반: 일반 업데이트
    • Animate Physics: 물리 업데이트
    • Unscaled Time: 시간 스케일링의 영향을 받지 않음
  5. 컬링 모드: 자르기 및 컬링 모드
    • 항상 애니메이션: 항상 재생
    • Cull Update Transforms: 카메라가 개체를 렌더링하지 않으면 위치 및 IK 작성을 중지합니다.
    • Cull Completely: 카메라가 개체를 렌더링하지 않을 때 전체 애니메이션이 완전히 비활성화됩니다.

(2) 코드 제어

우리는 주로 Animator에서 제공하는 API를 사용하여 상태 머신 전환을 제어하는 ​​코드를 사용합니다.

우리는 int, float, bool, trigger 네 가지 전환 조건이 있다는 것을 알고 있으므로 해당 API도 이 네 가지 유형과 관련이 있습니다.

private Animator animator;

// 1.通过状态机条件切换动画
animator.SetFloat("条件名", 1.2f);
animator.SetInteger("条件名", 5);
animator.SetBool("条件名", true);
animator.SetTrigger("条件名");

animator.GetFloat("条件名");
animator.GetInteger("条件名");
animator.GetBool("条件名");

// 2.直接切换动画 除非特殊情况 不然一般不使用
animator.Play("状态名");

추천

출처blog.csdn.net/weixin_53163894/article/details/131307001