#概要
CinemachineでPriority切り替え時のBlendAnimationの開始終了を検知する方法を探ってて
完成したので備忘録として投稿。
もっと簡単な方法があれば教えてください!
#バージョン
Unity2019.3.7f1
Cinemachine v2.6.0
#Blend開始の検知
CinemachineExtension
のOnTransitionFromCamera
メソッドがTransition元のVirtualCameraも取得できるので
Extensionを拡張するアプローチを行った。
public class CinemachineTransitionNotify : CinemachineExtension {
public override bool OnTransitionFromCamera(ICinemachineCamera fromCam, Vector3 worldUp, float deltaTime) {
// ここでTransitionの開始を検知できる
// fromCamがTransition元のVirtualCamera
}
}
#Blend終了の検知
OnTransitionFromCamera
の中で自身を管理するBrainを取得し、ActiveBlend
を見ることで判定できる。
// 自身を管理しているBrainを取得
CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(VirtualCamera);
// 現在動いているActiveBlendを取得
var blend = brain.ActiveBlend;
// blend.BlendWeightが1.0になれば終了なので、AsyncやCoroutineで待機してあげる。