
【第4章】色々なオブジェクトで遊ぼう
第15回 更にホームのベルを鳴らしてみよう(音源)
前回の続きで列車の発車前にベルを鳴らしてみよう。
第4章向けにダウンロードできるデータが追加されております。ダウンロードはこちらから。毎回アクセスするのは面倒なので全部ダウンロードしておきましょう。(MicrosoftEdgeで表示できない場合はGoogleChromeやFireFOXをお使いください)
【使用するVRMNX命令】レイアウトの命令:GetBell(音源のID)
指定IDの音源オブジェクトを取得します。オブジェクトIDの代わりに部品に設定した名前でも検索できます。
【使用するVRMNX命令】音源の命令:SetWave(リソース番号)
音源データを設定します。レイアウトリソースから読み込みます。
【使用するVRMNX命令】音源の命令:SetSoundRange(可聴範囲)
可聴範囲を設定します。座標単位はmmです。 (1 <= 可聴範囲 <= 10000)
【使用するVRMNX命令】音源の命令:Play()
音を再生します。
【使用するVRMNX命令】音源の命令:Stop()
音を停止します。
【やってみよう】リソース2番にベルの音を追加した「親子で学ぼう用レイアウト(14音源付き).vrmnx」を開き、ID=55のセンサーにスクリプトをこのように追加しよう。書くのが大変ならコピペしよう。完成品は「親子で学ぼう用レイアウト(15).vrmnx」です。
#OBJID=55
import vrmapi
def vrmevent_55(obj,ev,param):
di = obj.GetDict()
if ev == 'init':
di['train'] = 0
vrmapi.LAYOUT().GetBell(59).SetWave(2)
vrmapi.LAYOUT().GetBell(59).SetSoundRange(1000)
(中略)
elif ev == 'after':
if param['eventUID'] == 114:
vrmapi.LAYOUT().GetBell(59).Play()
if param['eventUID'] == 115:
vrmapi.LAYOUT().GetBell(59).Stop()
if param['eventUID'] == 113:
di['train'].AutoSpeedCTRL(500,1.0)
(中略)
elif ev == 'catch':
di['train'] = obj.GetTrain()
di['train'].AutoSpeedCTRL(700,0.0)
obj.SetEventAfter(7,114)
obj.SetEventAfter(9,115)
obj.SetEventAfter(10,113)
【解説】音源を'init'イベントで初期設定した後、'catch'イベントでSetEventAfterが並んでそれぞれの時間後に動作させています。
【実践】それでは「運転」を押してビューワーを起動させましょう。停車してからベルが鳴り、ベル停止後に出発したら成功です(^^)/

【追記】上記はダイレクトにベルを指定していますが勿論辞書型変数でもいけます。
#OBJID=55
import vrmapi
def vrmevent_55(obj,ev,param):
di = obj.GetDict()
if ev == 'init':
di['train'] = 0
di['bell'] = vrmapi.LAYOUT().GetBell(59)
di['bell'].SetWave(2)
di['bell'].SetSoundRange(1000)
(中略)
elif ev == 'after':
if param['eventUID'] == 114:
di['bell'].Play()
if param['eventUID'] == 115:
di['bell'].Stop()
if param['eventUID'] == 113:
di['train'].AutoSpeedCTRL(500,1.0)
(中略)
elif ev == 'catch':
di['train'] = obj.GetTrain()
di['train'].AutoSpeedCTRL(700,0.0)
obj.SetEventAfter(7,114)
obj.SetEventAfter(9,115)
obj.SetEventAfter(10,113)
