簡単な実験をしてみましょう。何でもいいので、適当なオブジェクトに以下のスクリプトを書き込み、ビュワーを起動してみてください。"ちょっとしたテスト"すると、起動したビュワーのログウィンドウに以下に示すような表示が現れるはずです。OK”するよりも早い、ということに尽きます。VRMスクリプト禅問答どちらかと言うと中の人向けメモ、オマケつき。VRMスクリプト禅問答チラシの裏的備忘録。[Variable(int)]ビュワー起動時の先頭車方向へ向けて走行しているか、あるいはその逆かを取得する。要するに、[Home]キーを押した回数+Turn命令を使った回数の合計が偶数か奇数か、ってだけの話。[Variable(train)]この命令が実行されたコンテキストが所属する編成オブジェクトを取得する。こちらのエントリで言及したObjMeに相当。要するに動的なthis。Handler]ビュワーメニューまたはSetPointBranch命令によってポイントが切り替わった際に、任意のメソッドをトリガするイベント設定。コレとかコレでやっている“タイマーイベントでGetPointBranchの値を監視する”って手法は、あまりスマートでないので。Handler]SetSignal命令によって信号灯火が遷移した際に、任意のメソッドをトリガするイベント設定。ポイント位と異なり、信号遷移はスクリプトでしか起きないのでSetEventBranchChangeほどの重要性はないが、これがあれば、区間閉塞や中継信号その他を実現するために、無駄なタイマーイベントやアドオン記法を弄せずに済む。[Variable(float)]先頭台車が乗っているレールの、両端の高さの差÷レール長(つまり勾配率)を取得する。GetDirectionの値と合わせて評価すれば、上ってるか下ってるかもわかる、みたいな。後述するSet/GetAccelerateと対で使う想定。[Variable(float)]直接的には、トラコンモードでノッチが入っていないときの減速率を設定/取得する。ノッチに応じた加減速に影響するならなおベター。前述したGetGradientRatioと組み合わせて使うことで、下り坂で加速し、上り坂で減速するギミックを実現できる。[Variable(float)]カメラの左右への傾き角を設定/取得する。取得はなくてもいいような気もするが、カントレールが使われていれば、編成が曲線を走行中か否かをスクリプトで知ることが出来る(編成先頭が振り子車かどうかも判別できるわな)というオマケが付く。何の役に立つかは別にして。[Variable(vector)]任意のオブジェクトの座標をベクトル変数に取得する。出来ればすべてのオブジェクトに対応して欲しいが、とりあえず編成と車両(いずれも進行方向台車座標でOK)に対応してくれれば神。あとは適当に何とかする。●とりあえず、とっととリファレンスの記述通りに動くようにして欲しいもの【編成】SearchPoint【編成】SetTopSpeed【編成】AutoSpeedCtrlコイツらが放置状態な現状では、上に書いたような要望も虚しいわな。対応する気がないならないで、中の人にはその旨を明言して欲しい。そのくらいしても罰は当たらんだろう。アウトプットしておかないと忘れそうなので、チラシの裏的に書き出してみた。実装されたところで、ボクしか使わないんだったら意味ないけど。結論から言うと、厳密には編成スクリプト内でcall/SetEvent〜命令のパラメータにthisは使わない方がいい、という話。言っているボクもそこまで徹底してませんが、来るべき次期自動運転スクロール/フレームワークでは、以下に紹介する方法論を採用したいと思ってます。*まず、基本的なところをおさらいしておきましょう。“TRAIN1”と命名された編成があるとします。ここに以下の編成スクリプトを書いたとします。//10秒かけて停車するEndFuncまぁ、普通は書かないスクリプトですが、説明の便宜上こうしておきます。要するに、メソッドMtdAを何らかの方法で実行すると、メソッドMtdBがcallされ、編成が停車する、という流れです。メソッドMtdAを実行すると常に編成は停車する、と言えるでしょうか。これは特別な識別子であるthisの挙動によるものです。thisは、ビュワー起動時に「thisが書かれた部品の名前に読み替えてコンパイルされる」という性質を持っています。従って、編成以外の部品であれば、上に示したサンプルスクリプトは常に意図通り動作します(SetTimerVoltageは編成部品以外に書いても意味がないですけども)。編成部品についてはこれが成り立ちません。問題になるのは、編成の分割と併合に際してです。“AutoPage”AutoPage最新お知らせ。