筋子
1
【Cubism SDKのバージョン】5-r.1-beta.3
【OS名・バージョン】Windows11
【開発使用ツール】Unity 2023.2.3f1
【不具合の状況】
Unityにlive2dのデータをインポートし、シーン上にモデルを配置すると、問題なく表示されるのですが、Unityの実行中にそのモデルのインスペクタから、CubismParametersInspectorのパラメータを変更すると、モデルの見た目が変化するものの、すぐに戻ってしまいます(変更したパラメータが0になり、見た目も元の状態になる)
unityが実行中でないときに、インスペクタからパラメータを変更させると、実行しても問題なく変化させたままです。
これではパラメータを変化させることができないのですが、CubismParametersInspectorのパラメータを任意の値で固定するにはどうすればよいでしょうか。
モーションを使用してパラメータを変化させたい、というわけではありませんので、AnimatorのControllerをnullのままにしたり、Animatorそのものを無効にしても挙動は変わりませんでした
@筋子 様
いつも弊社製品をご愛顧くださり誠にありがとうございます。
Live2Dスタッフでございます。
Inspectorに表示されるCubismParametersInspectorのスライダーは確認用で、実行中に使用することは想定しておりません。
こちらにつきましては今後マニュアルに追加させていただきます。
ご迷惑をおかけしてしまい申し訳ありません。
実行中にパラメータの値を操作するには、[モデル]/Parameters/以下のGameObjectにアタッチされている
CubismParameter.Valueの値をスクリプトから操作します。
CubismParameter parameter = GetComponent<CubismParameter>();
cubismParameter.Value = value;
なお、CubismParameter.Valueはスクリプトからの操作を前提としているため、Inspectorには表示していません。
以上、よろしくお願いいたします。
筋子
3
ご回答ありがとうございます。
提案いただいたソースコードをもとに以下のような処理を試してみました。
以下のような記事があったので、LateUpdateを使っています。
void LateUpdate()
{
if (Input.GetMouseButtonDown(1)){
CubismParameter param = GetComponent<CubismParameter>();
param.Value = Random.Range(-1 , 1);
}
}
しかし、この内容でも一瞬表示が変わったのち元の状態に戻ってしまうため、解決できませんでした。
LateUpdateではなく、Updateにしたり、Valueを固定の値にしても同じです。
@筋子 様
SDK for Unityはアニメーションの前後でパラメータの値を保存/復元しています。
// 毎フレームの実行順序
...
↓
パラメータの値を前フレームの保存状態で復元
↓
アニメーション
↓
パラメータの値を保存
↓
パラメータの値を相対的に操作
↓
...
これは表情やまばたき、リップシンクのように、パラメータの値を相対的に操作するためにおこなっています。
もし前のフレームで行った値の操作が次のフレームで操作前の状態に復元されないと、フレームごとに相対的な操作の結果が多重に積み重なってしまいます。
提示していただいたような処理だと、そのフレームでだけ値が適用され、次のフレームには適用前の値が復元されるため、お問い合わせ頂いているような動作になります。
表情などの相対的な値操作は、パラメータの値を毎フレーム操作し続けています。
作成された処理も同様に、値を毎フレーム操作するように修正してください。
よろしくお願いいたします。
筋子
5
申し訳ありません。
返信と回答が送れました。
毎フレーム操作するとのことで、意図した表示になることが確認できたので、解決とさせていただきます。