Animator의 동적attach 및 중지, 재생성 제어

5235 단어 AnimatorUnity

컨디션


Unity 5.3.7p4
사용 자산: Sprite Pack#1-Tap and Fly
https://www.assetstore.unity3d.com/jp/#!/content/21454

개시하다


하고 싶은 일


・동적attach Animatior 구성 요소
• 아무 때나 플레이
· 애니메이션의 첫 번째 프레임을 언제든지 되돌려줍니다

실패한 일


・Animaator?AnimatorController?Animation?AnimationClip?비슷한 게 많아요!
·Animator는 Stop에서 멈추지만 플레이에서는 다시 시작하지 않습니다...
・프레임 1로 초기화 상태를 지정할 수 없습니까?

선취합

using UnityEngine;

public class AnimationContorller : MonoBehaviour {

    // プレイヤーオブジェクト
    [SerializeField]
    GameObject m_playerObj;

    // プレイヤーのアニメーターコンポーネント
    Animator m_playerAnimaor;
    // animatorのstate名
    const string MOVE_ANIM_NAME = "move";
    // アニメーションの開始時間
    float m_animStartTime;
    // プレイヤーの初期位置
    Vector3 m_startPos;
    // 鳥のSpriteRenderer
    SpriteRenderer m_sprite;
    // 鳥のSpriteRendererのXの向き
    bool m_xFlip;


    // Use this for initialization
    void Start () {
        // Animatorコンポーネントをaddし、AnimatorControllerをセットする
        m_playerAnimaor = m_playerObj.AddComponent<Animator>();
        m_playerAnimaor.runtimeAnimatorController = Resources.Load<RuntimeAnimatorController>("Animation/Player");
        m_playerAnimaor.enabled = false;

        // 巻き戻し用に記憶
        m_startPos = m_playerObj.transform.localPosition;
        m_sprite = m_playerObj.transform.Find("Bird").GetComponent<SpriteRenderer>();
        m_xFlip = m_sprite.flipX;
    }

    /// <summary>
    /// 再生ボタンタップ
    /// </summary>
    public void Play(){
        // 再生中なら返す
        if (m_playerAnimaor.enabled) {
            return;
        }
        m_playerAnimaor.enabled = true;
        m_playerAnimaor.Play(MOVE_ANIM_NAME, 0, m_animStartTime);
    }

    /// <summary>
    /// ポーズボタンタップ
    /// </summary>
    public void Pause(){
        m_playerAnimaor.enabled = false;
        m_animStartTime = m_playerAnimaor.GetCurrentAnimatorStateInfo(0).normalizedTime;
    }

    /// <summary>
    /// 巻き戻しボタンタップ
    /// </summary>
    public void Rewind(){
        m_playerAnimaor.enabled = false;
        m_animStartTime = 0f;
        m_playerAnimaor.transform.localPosition = m_startPos;
        m_sprite.flipX = m_xFlip;
    }
}

해설


애니메이션 주위의 반을 대체적으로 정리하다


Animation Clip 및 Animation 세트Animator Controller 및 Animator 세트단순히 애니메이션만 재생하고 싶다면 애니메이션 클립과 애니메이션만 있으면 된다.상태 관리와 시간 지정 등 복잡한 일을 하려면 Animatior Controller와 Animatior를 사용합니다.
Animation 단일체로 재생성하려면 Animation Clip을 Legacy로 만들어야 합니다.(8/7 보충: 기술 잊어버리기 mm)
▲ Animation 없이 단일 재생
http://kazuooooo.hatenablog.com/entry/2015/08/02/192754

【AnimationClip】


애니메이션 자산.

【Animation】


장면의 게임 객체가 Animation Clip과 연관된 구성 요소입니다.

【Animator Controller】


하나 이상의 Animation Clip에 대한 참조가 있으며 상태 관리자를 사용하여 변환된 자산을 관리합니다.

【Animator】


장면의 게임 개체와 Animatior Controller가 연결된 구성 요소입니다.

동적attach Animator

m_playerAnimaor = m_playerObj.AddComponent<Animator>();
m_playerAnimaor.runtimeAnimatorController = Resources.Load<RuntimeAnimatorController>("Animation/Player");
AddComponent는 그냥 Animatior이고 Animation Controller는runtime Animatior Controller로 지정하지 않으면 안 됩니다.
▲ Unity - script에서 Animation Controller 지정
http://qiita.com/hakuta/items/7208576a1af399dc8a65

애니메이션 시작 시간

m_playerAnimaor.Play(MOVE_ANIM_NAME, 0, m_animStartTime);
Animator.Play 매개변수를 사용하여 시작 시간을 지정할 수 있습니다.
Pause에 기록된 내용을 설정하면, 정지된 것에서 계속 재생할 수 있습니다.
m_animStartTime = m_playerAnimaor.GetCurrentAnimatorStateInfo(0).normalizedTime;

애니메이션 초기화


많이 찾아봤는데 어떻게 첫 번째 프레임으로 만들었는지 모르겠어요
결과적으로 Start에 기록된 정보를 복원할 때 위치와 이미지 방향을 초기화합니다.

최후


나는 잠시 머리를 다 정리했다.
Animator State Info와 Animator Clip Info가 할 수 있는 일을 총괄하고 싶습니다.

좋은 웹페이지 즐겨찾기