unityはスクリプトを使ってアニメーションを動的に置換し、フレームイベントを追加します.

7163 ワード

unityはスクリプトを使ってアニメーションを動的に置換し、フレームイベントを追加します.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Animator))]
[RequireComponent(typeof(SpriteRenderer))]
public class ReplaceAnimation : MonoBehaviour
{
    private RuntimeAnimatorController run;

    public Animator anima;
    void Start()
    {
        //     Animator  
        anima = GetComponent<Animator>();
    }

    public void Replace(AnimationClip clip) {
        //  !!    
        run = anima.runtimeAnimatorController;

        var ride = new AnimatorOverrideController();

        ride.runtimeAnimatorController = anima.runtimeAnimatorController;
        //             ,       
        ride["play"] = clip;

        //     
        var _event = new AnimationEvent();
        //       ,        
        _event.functionName = "PlayEvent";
        //        ,       1     
        _event.time = 1f;
        //         
        ride["play"].AddEvent(_event);
        //                      
        anima.Rebind();
        //   ,   ,       
        anima.runtimeAnimatorController = null;
        anima.runtimeAnimatorController = ride;

        anima.Play("play", 0, 0);
        
        
    }

    public void PlayEvent() {
        //           ,          
        Destroy(gameObject);
        //      ,            ,        runtimeAnimatorController    
        anima.runtimeAnimatorController = run;
    }
}

この方法は特効池の代替シーケンスフレームの特効の需要を解決したが、最適化の余地がある.