本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
HeadLookControllerのOverrideAnimationの変更をスムーズに行うためのメモです。
前提条件
前回記事の続きです。
bluebirdofoz.hatenablog.com
HeadLookControllerのOverrideAnimationの変更をスムーズに行う
前回記事では HeadLookController の[OverrideAnimation]をスクリプトから変更すると、スムーズなモーション変化にならないため、スクリプトからの変更を断念しました。
今回は HeadLookController.cs 自体を改修することで問題を回避できたので変更内容を残して置きます。
スムーズにモーション変化を繋げるため、回転量の変化を以下の Lerp 関数を使って補間しました。
docs.unity3d.com
HeadLookController.cs を改修し、以下の HeadLookControllerSmooth.cs スクリプトを作成しました。
修正箇所を抜粋します。
・HeadLookControllerSmooth.cs
using UnityEngine; using System.Collections; public class HeadLookControllerSmooth : MonoBehaviour { // ..略.. // overrideAnimationの線形補間用のパラメータを追加 public float overrideAnimationFloat = 0.0f; public float overrideAnimationFrameDiff = 0.01f; void Start() { // ..略.. if (overrideAnimation) { // overrideAnimationの線形補間用のパラメータ // ON の場合は補正を完全に有効化する overrideAnimationFloat = 1.0f; } else { // overrideAnimationの線形補間用のパラメータ // OFF の場合は補正を完全に無効化する overrideAnimationFloat = 0.0f; } } void LateUpdate () { // ..略.. // Handle each segment foreach (BendingSegment segment in segments) { Transform t = segment.lastTransform; // overrideAnimationの線形補間用のパラメータ if (overrideAnimation) { // ON の場合は1.0fになるまで徐々に補正を強くしていく if (overrideAnimationFloat < 1.0f) { overrideAnimationFloat += overrideAnimationFrameDiff; } else { overrideAnimationFloat = 1.0f; } } else { // OFF の場合は0.0fになるまで徐々に補正を弱くしていく if (overrideAnimationFloat > 0.0f) { overrideAnimationFloat -= overrideAnimationFrameDiff; } else { overrideAnimationFloat = 0.0f; } } // overrideAnimationの線形補間用のパラメータ // 補正値に基づいて ON/OFF 状態の線形補完を行う //if (overrideAnimation) { for (int i=segment.chainLength-1; i>=0; i--) { t.localRotation = Quaternion.Lerp(t.localRotation, segment.origRotations[i], overrideAnimationFloat); t = t.parent; } //} // ..略..
スクリプトを差し替えて利用します。
動作確認
シーンを再生して確認します。
初期状態では[OverrideAnimation]を OFF にした状態で視線追従しておらず、元のアニメーションが再生される状態になっています。
スクリプトから視線追従を有効にして[OverrideAnimation]を ON にさせます。
元のアニメーションが完全に視線追従に上書きされ、その上で視線追従の遷移がスムーズに行われれば成功です。