LoginSignup
2
0

More than 3 years have passed since last update.

【Unity】子のAnimatorを親から操作してみるテスト

Last updated at Posted at 2020-01-04

概要

例えば、こんなアニメーションをつけたい時に、
sample_anim.gif

子要素が三つあって、動きは同じなんだけど、開始のタイミングだけずらしたい。
動きは同じなんだけど、Animationのキーは、三倍打たなきゃいけない・・・面倒だなぁ。

Animationで、タイミングだけ指定できないかな?やってみよう!

SerializeFieldはAnimationでキーが打てる

そもそもMonoBehaviourスクリプトのSerializeFieldは、Animationで操作できます。ColorをSerializeFieldに出して、Animationで色を変える・・・なんてのは、よくやるテクニックです。

今回は、子要素のAnimatorのパラメーターを、SerializeFieldに用意して、親のアニメーションのキーから操作するようにします。
hierarchy.png

Animatorの構造

子供のAnimatroはこんな感じ。
シンプルな構造で、Any StateからBoolパラメーターで、即遷移するようにしました。
※TriggerではなくBoolの方が、アニメーションから制御しやすい
child.controller
子要素は3つありますが、全部同じAnimatorを使っています。
アニメーションの更新があった場合でも、一つのAnimatorを更新すれば良いのでラクチンです。

親のAnimatorはこんな感じです。
root.controller
用途にあわせて自由に作りましょう。
今回は、in Triggerで入って、out Triggerではけるような動きを作っています。

スクリプト

childにアタッチするスクリプトはこんな感じです。
子要素のAnimatorのパラメーターと同じSerializeFieldを用意し、UpdateでSetBoolするだけです。

SerializeAnim.cs
using UnityEngine;

public class SerializeAnim : MonoBehaviour
{
    Animator mAnimator;
    [SerializeField] public bool BoolWait;
    [SerializeField] public bool BoolStay;
    [SerializeField] public bool BoolIn;
    [SerializeField] public bool BoolOut;
    [SerializeField] public bool BoolRotate;

    void Awake()
    {
        mAnimator = GetComponent<Animator>();
    }

    void Update()
    {
        mAnimator.SetBool("wait", BoolWait);
        mAnimator.SetBool("stay", BoolStay);
        mAnimator.SetBool("in", BoolIn);
        mAnimator.SetBool("out", BoolOut);
        mAnimator.SetBool("rotate", BoolRotate);
    }
}

root_in.animにキーを打つ

root_in.animに、キーを打ってみます。
Add Propertyを選択すると、子要素のSerializeFieldが追加できます。
add_property.png
1秒ごとにズラして、child1のBool in、child2のBool in、child3のBool inのキーを打ちます。
animation_in.png
他のAnimationも同じように準備します。

さて、実行だ!

test.gif
おおー、うまく動いてますねー。

メリット/デメリット

  • 長所
    • 子供の動きを作るのが一つだけでいい
    • 更新があった場合、一つだけ更新すれば良いので、修正が少なくて済む
  • 短所
    • Animationウインドウのプレビューで動きを見ることができない

サンプル

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0