コンテンツにスキップ

VRMMotionPath#

モーションパス#

モーションパスにそってリンクしている部品を移動します。

イベント#

event guide 固有param
start ターゲット部品の移動開始時に発生します。 targetid 対象の部品ID
stop ターゲット部品の移動終了時に発生します。 targetid 対象の部品ID

Note

動的な部品切り替えで、イベントは発生しません。また、ターゲット解除状態でイベントが発生した場合は、ターゲットID=0になります。

基本的な使い方#

モーションパスのプロパティーでターゲット、時間などを設定します。

このモーションパスにStart()、Stop()などで実行、停止を指示します。

応用#

モーション時間の変更#

モーション時間を6秒に設定します。モーションのアニメーションが再計算され、実行状態になります。

サンプルは、Stop()で実行を停止、afterイベントでStart()しています。


import vrmapi
def vrmevent_2(obj,ev,param):
    if ev == 'init':
        obj.SetMotionTimeS(6)
        obj.Stop()
        obj.SetEventAfter(3,100)
    elif ev == 'after':
        obj.Start()

SetMotionTime()など時間設定関数は、内部のアニメーションが再計算され、Start()しなくても実行状態になります。

スタートタイム#

スタートタイムは、アニメーションを指定時間(ビュワーが起動してからの経過時間)に開始します。 モーションは、実行状態です。

サンプルは、2秒になるとアニメーションを開始します。


import vrmapi
def vrmevent_2(obj,ev,param):
    if ev == 'init':
        obj.SetMotionTimeS(6)
        obj.SetStartTimeS(2)
        obj.SetWaitTimeS(4)
        obj.SetNextMode(1)

Stop()をいれると時間を検出しません。

「モーション時間の変更」のように、時間系のイベントでモーションをスタートする方法もあります。

ターゲットの動的な切り替え#

モーションパスが対象としているターゲットを変更します。モーションが実行されていないときだけでなく、モーションの途中で変更することもできます。

サンプルは、モーションパスに地上カメラを設定しています。6秒のモーションですが、3秒でafterイベントによりターゲットをID=9の地上カメラに変更しています。


import vrmapi
def vrmevent_2(obj,ev,param):
    if ev == 'init':
        obj.SetMotionTimeS(6)
        obj.SetWaitTimeS(4)
        obj.SetNextMode(1)
        obj.SetEventAfter(3,100)
    elif ev == 'after':
        obj.SetTargetID(9)

複数のモーションパスでターゲットをリレーして動かすとき、同じターゲットを複数のモーションパスで動かさないようにしてください。 直前のモーションパスのターゲットをリセットすると回避できます。

ターゲットリセット#

通常、モーションパスは、1つのターゲットを制御しますが、複数のモーションパスでリレーして制御する場合は、直前に制御していたモーションパスが制御しないようにStop()するか、ターゲットをリセットしてください。

サンプルは、initの段階でリセットしています。このモーションパスは、制御するオブジェクトがありませんが、内部でモーション計算は継続して行われています。3秒後に発生するafterイベントでターゲットを指定したとき、その時点のモーションからターゲットに反映されます。


import vrmapi
def vrmevent_2(obj,ev,param):
    if ev == 'init':
        obj.ResetTargetID()
        obj.SetMotionTimeS(6)
        obj.SetWaitTimeS(4)
        obj.SetNextMode(1)
        obj.SetEventAfter(3,100)
    elif ev == 'after':
        obj.SetTargetID(9)