自分用めも

初心者ちっくなプログラムネタを中心に、自分用の覚え書きをメモっていくための場所です。

UnityでAnimationClipを動的に変更する

Unity 5.3.1f1 (64-bit)。


前回の記事と併せ、これでスプライトの入れ替えの材料は揃うかと思います。
オブジェクトを中で取ってたりとか動作テストレベルのものなので、
適宜ちゃんとクラス化して使うのをおすすめします。

    public void CharChange(string targetName, string clipName)
    {
        // ターゲットのオブジェクト取得
        GameObject targetChar1 = GameObject.Find(targetName);
        Animator targetAnimator = targetChar1.GetComponent<Animator>();

        // 入れ替えるAnimationControllerのインスタンスを作成
        AnimatorOverrideController overrideAnimetorController = new AnimatorOverrideController();
        overrideAnimetorController.runtimeAnimatorController = targetAnimator.runtimeAnimatorController;

        // クリップのインスタンスを作成
        AnimationClip clip = (AnimationClip)AnimationClip.Instantiate(Resources.Load("Animations/Player/Clips/Front/" + clipName));

        // ClipPairに代入し、差し替え
        AnimationClipPair[] clipPairs = overrideAnimetorController.clips;
        clipPairs[0].overrideClip = clip;
        overrideAnimetorController.clips = clipPairs;

        // 差し替えたOverrideControllerをAnimatorに代入して完了
        targetAnimator.runtimeAnimatorController = overrideAnimetorController;
    }

targetName
ヒエラルキービューに出しているSpriteのオブジェクト名。
(下図 Char_1)

clipName
AnimatipnClipのリソース名。
(下図 C001)
ちゃんと作る場合リソースのpathは直書きしないほうがいいです。

f:id:bel_h:20160128124635p:plain