初めに
割と特殊なシチュエーションだと思います
環境
Unity5.6.3p2
Unity2018.1.1f1
何が起こったのか?
単一のアニメーションのタイムライン上に複数のイベントを追加しているにも関わらず一部のイベントが呼ばれなかった
状況
▼こういう感じでアニメーションイベントを複数用意し…
▼0:25に設定したイベント
▼0:40に設定したイベント
▼ログ確認用イベントスクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventLogger : MonoBehaviour {
public void PushLog(int val)
{
Debug.LogFormat("イベント発生!:{0}", val);
}
}
てな感じでアタッチしておくと…
▼予想
という出力が本来望ましい。。。はずなのだが…
▼現実
という出力結果になり「0:25にセットしたイベントどこいった」状態になることがあった。
原因
根本の原因としては、
【対象のアニメーション.animのm_Eventsが時系列順に並んでいなかった】
というのが真相っぽいです。
これを引き起こした要因としては、
【AssetStoreにて販売されているとあるイベント設定拡張アセット】
の利用によるものでした。
パラメータの名前を覗いてもらうと上記のエディタ越しのものと対応しているのがわかるかと思いますが、
注目してほしいのはtimeの値。
上が0.6666667に対してその下が0.41666666。これが本来は…
▼こうあるのが正しい(実際にエディタ搭載のアニメーションウィンドウから設定を行うとこの結果になる)
対処法
- エディタ搭載のアニメーションウィンドウでいずれかのイベントのフレームをずらして戻す
これを行うことでイベントに対してソートが行われるようです。
(まぁ、搭載のやつはイベントの選択コントロールが小さすぎてクッソイライラするので、使ってるアセットのコードにソート機能を追加してぇなという気持ちがある…)
最後に
皆様もエディタ拡張系アセットを使う場合はこの手のトラップにお気をつけください…