mmn
2023 年 4 月 21 日午前 7:21
1
unityにて以下のスクリプトをアタッチし、eventtrigerを使いマウスドラッグで直接パラメーターを操作した後、マウスを離すと一気に元の値に戻ってしまいます。動かしたパラメーターを覚えておいてその場で止める、もしくはアニメーションのフェードのように緩やかに元の位置に戻す方法はありますでしょうか。度々質問してしまいすみません。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using Live2D.Cubism.Core;
using Live2D.Cubism.Framework;
public class DragMotion : MonoBehaviour
{
private bool _isPushed = false;
private CubismModel _model;
void Start()
{
_model = this.FindCubismModel();
}
private void LateUpdate()
{
if (_isPushed)
{
var targetPosition = Input.mousePosition;
targetPosition = (Camera.main.ScreenToViewportPoint(targetPosition) * 20) - Vector3.one;
var parameter = _model.Parameters[28];
parameter.Value = targetPosition.x*4;
}
}
public void MouseDown()
{
_isPushed = true;
}
public void MouseUp()
{
_isPushed = false;
}
}
@mmn 様
いつも弊社製品をご愛顧くださり誠にありがとうございます。
Live2Dスタッフでございます。
UnityでのCubismモデルのパラメータ操作は、各コンポーネントの実行順によって意図しない動作になることがあります。
Cubism SDK for Unityには実行順序を制御する機能がありますので、例示していただいたスクリプトの実行順を制御させるよう設定して現象が解消されるか確認して頂けますでしょうか?
実行順を制御させるには、SDKチュートリアルの「独自のコンポーネントの実行順を制御させる 」をご覧ください。
よろしくお願いいたします。
mmn
2023 年 4 月 26 日午前 8:57
3
お忙しいところ返信ありがとうございます。
ご提示いただいた独自のコンポーネント~を実装しました。ExecutionOrderをretrun 100に設定するとLookやまばたきに対しては操作が優先されるようで、操作した値が戻る事が無くなるのですが(150だと戻ります)、モーションを再生している時だけ、どうしてもマウスを離した時パラメーターが戻ってしまいます。(アニメーション時も戻らないようにしたいのです・・)
以下↓スクリプトのOnLateUpdate()内に記述した内容です。LateUpdate()の下(外部)にPushフラグをOn・Offにするメソッドを二つ置いてあります。
よろしくお願い致します。
public void OnLateUpdate()
{
if (_isPushed)
{
var targetPosition = Input.mousePosition;
targetPosition = (Camera.main.ScreenToViewportPoint(targetPosition) * 20) - Vector3.one;
var parameter = _model.Parameters[1];
//parameter.Value = targetPosition.yに変更して試したりしました
parameter.BlendToValue(CubismParameterBlendMode.Override,targetPosition.y);
}
}
@mmn 様
ExecutionOrderをretrun 100に設定するとLookやまばたきに対しては操作が優先されるようで、操作した値が戻る事が無くなるのですが(150だと戻ります)、モーションを再生している時だけ、どうしてもマウスを離した時パラメーターが戻ってしまいます。
チュートリアルはあくまで手順などの参考として記述しています。
スクリプトは内容によっては適切な呼び出しのタイミングが異なります。
ExecutionOrder
の値は、仕様によって値を変更してください。
よろしくお願いいたします。