goo blog サービス終了のお知らせ 
見出し画像

Rosso Laboratory

第16回 煙をオンオフしてみよう(エミッター)

【第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キーで煙が上がれば成功です(^^)/
←戻る 目次 進む→
PVアクセスランキング にほんブログ村


ランキングに参加中。クリックして応援お願いします!

名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

※ブログ作成者から承認されるまでコメントは反映されません。

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最新の画像もっと見る

最近の「Pythonスクリプト」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事