수색…


러닝을위한 기본 애니메이션

이 코드는 Unity에서 간단한 애니메이션 예제를 보여줍니다.

이 예제에서는 2 개의 애니메이션 클립이 있어야합니다. 실행 및 유휴 이러한 애니메이션은 Stand-In-Place 모션이어야합니다. 애니메이션 클립이 선택되면 Animator 컨트롤러를 만듭니다. 이 컨트롤러를 애니메이션하려는 플레이어 또는 게임 개체에 추가하십시오.

Windows 옵션에서 Animator 창을 엽니 다. 2 개의 애니메이션 클립을 Animator 창으로 드래그하면 2 개의 상태가 생성됩니다. 생성 된 후에는 왼쪽 매개 변수 탭을 사용하여 두 매개 변수를 bool로 추가하십시오. 하나는 "PerformRun"으로, 다른 하나는 "PerformIdle"로 지정하십시오. "PerformIdle"을 true로 설정하십시오.

유휴 상태에서 실행 및 실행으로 유휴 상태로 전환합니다 (이미지 참조). 유휴 -> 실행 전환을 클릭하고 속성 윈도우에서 HasExit의 선택을 취소하십시오. 다른 전환에도 똑같이하십시오. 유휴 -> 실행 전환의 경우 조건을 추가하십시오 : PerformIdle. Run-> Idle의 경우 PerformRun 조건을 추가하십시오. 아래에 주어진 C # 스크립트를 게임 개체에 추가하십시오. 위로 버튼을 사용하여 애니메이션으로 실행하고 왼쪽 및 오른쪽 버튼으로 회전해야합니다.

using UnityEngine;
using System.Collections;

public class RootMotion : MonoBehaviour {

//Public Variables
[Header("Transform Variables")]
public float RunSpeed = 0.1f;
public float TurnSpeed = 6.0f;


Animator animator;

void Start()
{
    /**
    * Initialize the animator that is attached on the current game object i.e. on which you will attach this script.
    */
    animator = GetComponent<Animator>();
}

void Update()
{
    /**
    * The Update() function will get the bool parameters from the animator state machine and set the values provided by the user.
    * Here, I have only added animation for Run and Idle. When the Up key is pressed, Run animation is played. When we let go, Idle is played.
    */
    
    if (Input.GetKey (KeyCode.UpArrow)) {
            animator.SetBool ("PerformRun", true);
            animator.SetBool ("PerformIdle", false);
        } else {
            animator.SetBool ("PerformRun", false);
            animator.SetBool ("PerformIdle", true);
        }
}

void OnAnimatorMove()
    {
        /**
         * OnAnimatorMove() function will shadow the "Apply Root Motion" on the animator. Your game objects psoition will now be determined 
         * using this fucntion.
         */
        if (Input.GetKey (KeyCode.UpArrow)){
            transform.Translate (Vector3.forward * RunSpeed);
            if (Input.GetKey (KeyCode.RightArrow)) {
                transform.Rotate (Vector3.up * Time.deltaTime * TurnSpeed);
            }
            else if (Input.GetKey (KeyCode.LeftArrow)) {
                transform.Rotate (-Vector3.up * Time.deltaTime * TurnSpeed);
            }
        }

    }


   
}

여기에 이미지 설명을 입력하십시오.

애니메이션 클립 생성 및 사용

이 예제는 게임 객체 나 플레이어에 애니메이션 클립을 만들고 사용하는 방법을 보여줍니다.

이 예제에 사용 된 모델은 Unity Asset Store에서 다운로드됩니다. 플레이어가 다음 링크에서 다운로드되었습니다. https://www.assetstore.unity3d.com/en/#!/content/21874

애니메이션을 만들려면 먼저 애니메이션 창을 엽니 다. 창 및 애니메이션 선택을 클릭하거나 Ctrl + 6을 눌러 열 수 있습니다. 계층 구조 창에서 애니메이션 클립을 적용 할 게임 개체를 선택한 다음 애니메이션 창에서 만들기 단추를 클릭하십시오.

여기에 이미지 설명을 입력하십시오.

IdlePlayer, SprintPlayer, DyingPlayer 등의 애니메이션 이름을 지정하고 저장하십시오. 이제 애니메이션 창에서 속성 추가 버튼을 클릭하십시오. 이렇게하면 시간과 관련하여 게임 개체 또는 플레이어의 속성을 변경할 수 있습니다. 여기에는 회전, 위치 및 스케일과 같은 Tranform과 게임 객체에 연결된 anyother 속성 (예 : Collider, Mesh Renderer 등)이 포함될 수 있습니다.

여기에 이미지 설명을 입력하십시오.

게임 객체 용 실행 애니메이션을 만들려면 휴머노이드 3D 모델이 필요합니다. 위 링크에서 모델을 다운로드 할 수 있습니다. 위의 단계에 따라 새 애니메이션을 만듭니다. 변형 속성을 추가하고 문자 다리 중 하나에 대해 회전을 선택합니다.

여기에 이미지 설명을 입력하십시오.

이 시점에서 게임 개체 속성의 재생 단추 및 회전 값이 빨간색으로 바뀌 었습니다. 드롭 다운 화살표를 클릭하여 회전 X, Y 및 Z 값을 봅니다. 기본 애니메이션 시간은 1 초로 설정됩니다. 애니메이션은 키 프레임을 사용하여 값을 보간합니다. 애니메이션을 적용하려면 키를 여러 시점에 추가하고 속성 윈도우에서 회전 값을 변경하십시오. 예를 들어 시간 0.0s의 회전 값은 0.0이 될 수 있습니다. 시간 0.5s에서 값은 X에 대해 20.0이 될 수 있습니다. 시간 1.0s에서 값은 0.0이 될 수 있습니다. 우리는 1.0 초에 우리의 애니메이션을 끝낼 수 있습니다.

애니메이션 길이는 애니메이션에 마지막으로 추가 한 키에 따라 다릅니다. 더 많은 키를 추가하여 보간을 부드럽게 만들 수 있습니다.

2D 스프라이트 애니메이션

스프라이트 애니메이션은 이미지 또는 프레임의 기존 시퀀스를 보여주는 것으로 구성됩니다.

먼저 일련의 이미지를 자산 폴더로 가져옵니다. 일부 이미지를 처음부터 만들거나 자산 저장소에서 일부를 다운로드하십시오. 이 예에서는 이 무료 애셋을 사용 합니다 .

선택된 애니메이션 스프라이트

단일 애니메이션의 모든 개별 이미지를 에셋 폴더에서 장면 뷰로 드래그합니다. Unity는 새로운 애니메이션 클립의 이름을 지정하는 대화 상자를 보여줍니다.

애니메이션 클립 이름 대화 상자

이것은 유용한 단축키입니다 :

  • 새로운 게임 객체 생성하기
  • 두 가지 구성 요소 (스프라이트 렌더러와 애니메이터)
  • 애니메이션 컨트롤러 생성 (그리고 새로운 Animator 컴포넌트 연결)
  • 선택한 프레임으로 애니메이션 클립 만들기

새로운 컴포넌트를 보여주는 새로운 게임 객체 인스펙터

재생을 클릭하여 애니메이션 탭에서 재생을 미리 봅니다.

2D 애니메이션 미리보기

같은 방법을 사용하여 동일한 게임 개체에 대한 새 애니메이션을 만든 다음 새 게임 개체와 애니메이션 컨트롤러를 삭제할 수 있습니다. 새 애니메이션 클립을 3D 애니메이션과 같은 방식으로 해당 객체의 애니메이션 컨트롤러에 추가합니다.

애니메이션 커브

애니메이션 커브를 사용하면 애니메이션이 재생 될 때 부동 매개 변수를 변경할 수 있습니다. 예를 들어, 길이가 60 초인 애니메이션이 있고 플로트 값 / 매개 변수가 필요한 경우 X를 호출하여 애니메이션을 다양하게 만듭니다 (애니메이션 시간 = 0.0s, X = 0.0, 애니메이션 시간 = 30.0s; X = 1.0, 애니메이션 시간 = 60.0 초, X = 0.0).

부동 소수점 값을 얻은 후에는 다른 방법으로 변환, 회전, 크기 조절 또는 사용하는 데 사용할 수 있습니다.

예를 들어, 플레이어 게임 개체가 실행중인 것을 보여줍니다. 런을위한 애니메이션이 재생되면 애니메이션이 진행됨에 따라 플레이어의 번역 속도가 빨라집니다. 애니메이션이 끝나면 번역 속도가 느려집니다.

실행중인 애니메이션 클립이 생성되었습니다. 클립을 선택하고 속성 창에서 편집을 클릭하십시오.

여기에 이미지 설명을 입력하십시오.

일단 그곳으로 내려 가면 곡선으로 스크롤됩니다. 커브를 추가하려면 + 기호를 클릭하십시오. 곡선 이름을 ForwardRunCurve로 지정하십시오. 오른쪽에있는 축소 곡선을 클릭하십시오. 기본 곡선이있는 작은 창을 엽니 다.

여기에 이미지 설명을 입력하십시오.

우리는 그것이 올라간 다음 떨어지는 포물선 모양의 곡선을 원합니다. 기본적으로 선에는 2 개의 점이 있습니다. 커브를 두 번 클릭하여 더 많은 점을 추가 할 수 있습니다. 포인트를 드래그하여 다음과 비슷한 모양을 만듭니다.

여기에 이미지 설명을 입력하십시오.

Animator 창에서 실행중인 클립을 추가하십시오. 또한 곡선과 같은 이름 즉, ForwardRunCurve와 함께 float 매개 변수를 추가하십시오.

애니메이션이 재생되면 플로트 값이 커브에 따라 변경됩니다. 다음 코드는 float 값을 사용하는 방법을 보여줍니다.

using UnityEngine;
using System.Collections;

public class RunAnimation : MonoBehaviour {

Animator animator;
float curveValue;

void Start()
{
    animator = GetComponent<Animator>();
}

void Update()
{
    curveValue = animator.GetFloat("ForwardRunCurve");

    transform.Translate (Vector3.forward * curveValue);
}

}

curveValue 변수는 주어진 시간에 곡선의 값 (ForwardRunCruve)을 유지합니다. 이 값을 사용하여 번역 속도를 변경합니다. 이 스크립트를 플레이어 게임 개체에 첨부 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow