【Unity】子のAnimatorを親から操作してみるテスト
概要
子要素が三つあって、動きは同じなんだけど、開始のタイミングだけずらしたい。
動きは同じなんだけど、Animationのキーは、三倍打たなきゃいけない・・・面倒だなぁ。
Animationで、タイミングだけ指定できないかな?やってみよう!
SerializeFieldはAnimationでキーが打てる
そもそもMonoBehaviourスクリプトのSerializeFieldは、Animationで操作できます。ColorをSerializeFieldに出して、Animationで色を変える・・・なんてのは、よくやるテクニックです。
今回は、子要素のAnimatorのパラメーターを、SerializeFieldに用意して、親のアニメーションのキーから操作するようにします。
Animatorの構造
子供のAnimatroはこんな感じ。
シンプルな構造で、Any StateからBoolパラメーターで、即遷移するようにしました。
※TriggerではなくBoolの方が、アニメーションから制御しやすい
子要素は3つありますが、全部同じAnimatorを使っています。
アニメーションの更新があった場合でも、一つのAnimatorを更新すれば良いのでラクチンです。
親のAnimatorはこんな感じです。
用途にあわせて自由に作りましょう。
今回は、in Triggerで入って、out Triggerではけるような動きを作っています。
スクリプト
childにアタッチするスクリプトはこんな感じです。
子要素のAnimatorのパラメーターと同じSerializeFieldを用意し、UpdateでSetBoolするだけです。
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が追加できます。
1秒ごとにズラして、child1のBool in、child2のBool in、child3のBool inのキーを打ちます。
他のAnimationも同じように準備します。
さて、実行だ!
メリット/デメリット
- 長所
- 子供の動きを作るのが一つだけでいい
- 更新があった場合、一つだけ更新すれば良いので、修正が少なくて済む
- 短所
- Animationウインドウのプレビューで動きを見ることができない
サンプル
- 子供の動きを作るのが一つだけでいい
- 更新があった場合、一つだけ更新すれば良いので、修正が少なくて済む
- Animationウインドウのプレビューで動きを見ることができない
Author And Source
この問題について(【Unity】子のAnimatorを親から操作してみるテスト), 我々は、より多くの情報をここで見つけました https://qiita.com/tabataketarao/items/76b14fed30434a1fb54e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .