【第4章】色々なオブジェクトで遊ぼう
第16回 煙をオンオフしてみよう(エミッター)
10個のエミッターが煙を上げているのでこれをキーを使って消したり着けたりしましょう。エミッターとは粒子を発生させる部品で、煙や水流などを再現することができます。
【使用するVRMNX命令】レイアウトの命令:GetEmitter(エミッターのID番号)
指定IDのエミッターオブジェクトを取得します。オブジェクトIDの代わりに部品に設定した名前でも検索できます。
【使用するVRMNX命令】エミッターの命令:Start()
エミッターを動作開始します。
【使用するVRMNX命令】エミッターの命令:Stop()
エミッターを停止します。
【やってみよう】「親子で学ぼう用レイアウト(15初期状態).vrmnx」を開き、レイアウトにスクリプトをこのように書こう。書くのが大変ならコピペしよう。完成品は「親子で学ぼう用レイアウト(16-1).vrmnx」です。
#LAYOUT
import vrmapi
def vrmevent(obj,ev,param):
if ev == 'init':
vrmapi.LAYOUT().SetView(10)
obj.SetEventKeyDown('N',116)
obj.SetEventKeyDown('M',117)
(中略)
elif ev == 'keydown':
if param['eventUID'] == 116:
vrmapi.LAYOUT().GetEmitter(60).Stop()
vrmapi.LAYOUT().GetEmitter(61).Stop()
vrmapi.LAYOUT().GetEmitter(62).Stop()
vrmapi.LAYOUT().GetEmitter(63).Stop()
vrmapi.LAYOUT().GetEmitter(64).Stop()
vrmapi.LAYOUT().GetEmitter(65).Stop()
vrmapi.LAYOUT().GetEmitter(66).Stop()
vrmapi.LAYOUT().GetEmitter(67).Stop()
vrmapi.LAYOUT().GetEmitter(68).Stop()
vrmapi.LAYOUT().GetEmitter(69).Stop()
if param['eventUID'] == 117:
vrmapi.LAYOUT().GetEmitter(60).Start()
vrmapi.LAYOUT().GetEmitter(61).Start()
vrmapi.LAYOUT().GetEmitter(62).Start()
vrmapi.LAYOUT().GetEmitter(63).Start()
vrmapi.LAYOUT().GetEmitter(64).Start()
vrmapi.LAYOUT().GetEmitter(65).Start()
vrmapi.LAYOUT().GetEmitter(66).Start()
vrmapi.LAYOUT().GetEmitter(67).Start()
vrmapi.LAYOUT().GetEmitter(68).Start()
vrmapi.LAYOUT().GetEmitter(69).Start()
【実践】それでは「運転」を押してビューワーを起動させましょう。Nキーで煙が止まり、Mキーで煙が上がれば成功です(^^)/
【解説】10個なのでこれで済みましたが100個、1000個とあったらやってられませんね(^_^;) ですのでもっとスマートな方法があります。レイアウト内のエミッター全てを一気にオンオフする方法です。
【使用するVRMNX命令】レイアウトの命令:ListEmitter(リスト変数)
エミッターオブジェクトリストを取得します。
【使用するPython命令】list(反復可能オブジェクト)
リストを作成する。反復可能オブジェクトを省略した場合は空のリストを作成する。反復可能オブジェクトとはイテレータを作成することができるオブジェクトのことで、イテレータとは['要素1','要素2','要素3','要素4'・・・]のような形をしており既に習った辞書などもこれに相当します。
【使用するPython命令】for 変数名 in 反復可能オブジェクト:
リストなどの反復可能オブジェクトの要素を順番に変数に代入し、終わるまで繰り返し処理する。
【やってみよう】「親子で学ぼう用レイアウト(15初期状態).vrmnx」を開き、レイアウトにスクリプトをこのように書こう。書くのが大変ならコピペしよう。完成品は「親子で学ぼう用レイアウト(16-2).vrmnx」です。
#LAYOUT
import vrmapi
def vrmevent(obj,ev,param):
if ev == 'init':
vrmapi.LAYOUT().SetView(10)
obj.SetEventKeyDown('N',116)
obj.SetEventKeyDown('M',117)
(中略)
elif ev == 'keydown':
ls=list()
vrmapi.LAYOUT().ListEmitter(ls)
if param['eventUID'] == 116:
for item in ls:
item.Stop()
if param['eventUID'] == 117:
for item in ls:
item.Start()
【解説】list命令で空のリスト「ls」を作り、ListEmitter命令でレイアウト内の全エミッターをリストに納めています。Nキーへの分岐でlsの中の全エミッターを1つずつitemに代入してループしStop命令で停止させています。Mキーでは逆に再生しています。
【実践】それでは「運転」を押してビューワーを起動させましょう。Nキーで煙が止まり、Mキーで煙が上がれば成功です(^^)/
←戻る 目次 進む→