宴でも、UnityのMecanim(Animator)を使っている点では同じです。
https://madnesslabo.net/utage/?page_id=9621#Unity
ただ、宴の基本動作としては、モーション切り替え時にプログラムから指定のモーションに切り替えるようになっていてモーションがブレンドされます。
これは前のモーションから今のモーションにスムーズにつながるようにするための基本機能なのですが、
今回のようなケースではこれが邪魔になるため別のやり方をする必要があります。
モーションをブレンドせずにつなげたい場合、
Live2D様のご提案にあるように、「Has Exit Time」を設定する必要があるのですが、
この機能はAnimator上で設定した自動遷移の際にのみ機能します。
こちらが参考になると思いますので、こちらをベースに
Animatorに
・自動遷移の条件となる変数を作る
(宴のセーブロード機能としてAnimator Parameters を保存しているわけではないので、追加するParametaersはTriggerで)
・つなげたいモーション同士に遷移条件を設定
・Has Exit Timeをオン
・さきほど追加したパラメーターを、TrasitionのConditionsの「+」ボタンを押して設定
あとは、その遷移条件となるパラメーターを宴のシナリオ上から設定可能なようにします。
簡単なのは、BroadcastMessageByNameコマンドを使用することです。
1. BroadcastMessageByNameで呼び出される次のようなコンポーネントを作る
using UnityEngine;
namespace Utage
{
class Sample : MonoBehaviour
{
//BroadcastMessageByNameコマンドから呼び出される
//シナリオ上では、Arg2に「SetTrigger」名前を設定
void SetTrigger(AdvCommandBroadcastMessageByName command)
{
//Arg4
var trigger = command.ParseCell<string>("Arg4");
var animator = this.GetComponentInChildren<Animator>(true);
animator.SetTrigger(trigger);
// Debug.Log("Live2DMotionTrigger SetTrigger:" + trigger);
}
}
}
2.上記コンポーネントを、Live2dのプレハブにAddComponent
3.シナリオからBroadcastMessageByNameコマンドで呼び出す
Arg1:キャラクター名
Arg4:AnimatorのTrigger名
動作確認してはいないのですが、だいたいこのような流れで行けると思います。
一応セーブロードが正常に動作するかもチェックしてみてください。
2025年12月19日金曜日 22:50:24 UTC+9 obustat YT: