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)