https://linen.dev logo
方向幕の2つの画像の切り替え
# forum
i
多摩モノレールのような何秒後とかに動く方向幕などは再現可能なのでしょうか
p
i
**多摩モノレール**のLED方向幕式の英語と日本語と切り替わるやつが作りたいです。
p
多摩モノレールのようではなく、どのようなものなのか具体的に教えてください。また実際の動画があるならそれを見せてください。 また、再現可能かどうかという質問なら、はい可能ですで終了しますよ?
i
例えばこの二人の方向幕があるとします。この方向幕は英語と日本語の物になっていてこの2つの方向幕を数秒ごとに切り替わるような仕組みですので回転というよりかは画像が2つありその画像を数秒ごとに切り替えさせるということです。
p
i
はい、動かす仕組みはそのような感じでメタセコ上でオブジェクトに行き先、などを読み込ませそのオブジェクトから車両の方向幕設定の部分で幕が動くようになる仕組みが作りたい
p
一応現段階でこちらから提示できる情報は以上です あとはどのような点がわかりませんか?
i
オブジェクトを読み込み方向幕のボタンでそれに応じた幕が出るようにするということ
p
メタセコイアの使い方はわかりますか?
方向幕のボタンは entity.getTrainStateData(8) で取得できます
i
動かすテクスチャはメタセコのオブジェクトの名前で判断してるのではないのですか?
f
横から失礼します。 スレッドを見てる限り、日本語表記と英語表記の方向幕を数秒ごとに切り替えたいということですよね... 似たような実装が水音車両さんのMCT-N( https://minatocc.com/archives/2761 )のスクリプト重装車にもありますよ 参考程度にですが...(初心者の俺がいうのもな...)
i
はいそれと同じことがしたかったのですが、コードを丸ごと入れるのは良くないと思いまして、、、
f
自分が知ってる方式としては 日本語表記の方向幕を
destJ_○○
英語表記の方向幕を
destE_○○
としてオブジェクトにマッピングして複数用意する スクリプト↓
Copy code
//方向幕の取得
var dest = entity.getTrainStateData(8);

if(Date.now()%2000>1000){
 destJ_[dest].render(renderer); //日本語幕を描画
}else{
 destE_[dest].render(renderer); //英語幕を描画
}
これですかね
自分もスクリプト書くのは初心者で、動作の保証はできませんが...
i
メタセコイヤの設定でオブジェクトを入れるような仕組みになっているのはどうすればようのでしょうか?
またコードの参考というものがどこまでなのかもいまいちわからないです
f
方向幕のオブジェクトを入れる方法ですか?
i
?オブジェクㇳをメタセコ上にいれることはできると思いますですが、Script内で読み込ませること、動かす動作部分などです。
f
なるほど
ではスクリプトはモデルが設定できていることを前提にしてやってみます
i
はいお願いします
f
まずオブジェクトを定義するとこが
Copy code
//destJの方には日本語幕を、destEには英語幕を
destJ[方向幕の番号] = renderer.registerParts(new Parts("オブジェクト名"));
destE[方向幕の番号] = renderer.registerParts(new Parts("オブジェクト名"));
これをやることによってオブジェクトとして登録されます
i
やってみます
f
このままでは切り替わる方向幕ができないため、下にプログラムを追加します
i
方向幕の番号というのは?
f
方向幕の番号は任意の番号です
i
適当ということですか?
f
ただし、交互に表示させるものとしては同じものでないとだめです (例) 東京の日本語幕と英語幕を切り替える番号を「1」を入れる 新宿の日本語幕と英語幕を切り替える番号を「2」をいれる 適当っていうよりも、1から順にです
i
なるほど 日本語、英語で一つとさせるという認識でしょうか?
f
そういうことです
i
ではこれの場合1セットの幕ということですか?
f
そういうことです 1セットのものをどんどん増やす感じです
i
でオブジェクトというのは幕を表示させるための物ですか?
f
そうです。オブジェクトとして登録しないと表示されません
i
追加させるオブジェクトは一つでよいのですか?
f
(表示されないというか、登録されてないから存在しないものって感じ)
Copy code
destJ[1] = renderer.registerParts(new Parts("オブジェクト名"));
destE[1] = renderer.registerParts(new Parts("オブジェクト名"));
destJ[2] = renderer.registerParts(new Parts("オブジェクト名"));
destE[2] = renderer.registerParts(new Parts("オブジェクト名"));
destJ[3] = renderer.registerParts(new Parts("オブジェクト名"));
destE[3] = renderer.registerParts(new Parts("オブジェクト名"));
destJ[4] = renderer.registerParts(new Parts("オブジェクト名"));
destE[4] = renderer.registerParts(new Parts("オブジェクト名"));
こんな感じに表示させたい分量産です
i
要は幕を表示させるオブジェクトは1セット事にいるということですか?
f
んー
i
あーうん?もしかしてですけどオブジェクト名なのでそれをすべて一緒の名前にすれば一つで済むとかいう感じか?
f
このような感じの場合、 destJ_1・destE_1が1セット destJ_2・destE_2が1セット って感じです。
Copy code
destJ[1] = renderer.registerParts(new Parts("destJ_1"));
destE[1] = renderer.registerParts(new Parts("destE_1"));
destJ[2] = renderer.registerParts(new Parts("destJ_2"));
destE[2] = renderer.registerParts(new Parts("destE_2"));
そのような場合こういう感じ登録
説明下手ですんません
(これ i++ つかったほうが早いカナ...?)
i
テクスチャは別で追加がいりますか?
t
水音の方向幕が実際にどのような実装であるかは存じ上げませんが おそらく、表示したいすべての方向幕のバリエーションをそれぞれ別々のオブジェクトとした3Dモデルを作成し、スクリプトにてそれぞれのオブジェクトを全て別のパーツとして登録しているものと思います そして、現在選択されている方向幕と現在時刻を取得し、それらをもとに実際に描画する方向幕のパーツを決定して描画していると思います
これをするには、当然それらの方向幕のバリエーションすべてに対応するテクスチャが必要です
f
(簡潔に説明してくれる救世主だ!)
i
子オブジェクトはどのようにしてつくるのでしょうか?
t
メタセコイアの操作のことならば、[こちら]( https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11236335551)を
i
なるほど
で実際に動作させるScript部分とテクスチャはどのように配置すればよいのでしょうか?
t
パーツの登録はこの通りで動作すると思います (正しくはないけどたぶん動くはず)
f
テクスチャはメタセコイア内で貼り付けます イメージとしては、モデルとテクスチャは別ファイルだけど モデルファイルの中にテクスチャの貼り付けのデータがあるって感じかな
t
描画の切り替えもこれをいじれば動作すると思います
i
JとEは同じオブジェクトを使えばいいのですか?
t
いいえ、表示したい全てのバリエーションに対してそれぞれ別のオブジェクトを作成してください
i
これってもしかして種別と行き先と別れてる感じですか?
t
いいえ、目的によっては必要な場合もありますが、今回は種別と行先を分離する必要はありません
f
Jは日本語(Japanese)、Eは英語(English)として自分は割り当ててます このJとEは日本語表記と英語表記を分けているだけです
i
えっと英語と日本語は同じ位置にオブジェクトを配置したらいいものではないんですか?
t
はい、全て3D座標上の同じ位置にオブジェクトを配置します
もう少し具体的にどのような説明をしてほしいかを教えていただければ解説しやすいですので、教えていただきたいです
i
うーん。。。。
t
例えば、現状がどのような状態であるかや、具体的に何がわからないかなどでも構いません
ここで全体としての方針は説明しましたが、これのどこがわからない、詳しく教えてほしいなどありますか?
i
まずこれは仮に単体でやると何個素材ができることになるんでしょうか?
t
単体や素材、というのはどういうことでしょうか
i
destJ1,2,3,7とありこれは個体事にテクスチャを分ける必要性がありますか?
t
個体、というのは、それぞれの方向幕オブジェクトのことですか?
それとも、3Dモデルファイル(`.mqo `)のことですか?
i
方向幕オブジェクトでうs
t
テクスチャを分けるということが、それぞれのオブジェクトに対し別々のマテリアルとテクスチャファイルを作成するということならば、答えはいいえです
i
なるほどでは画像ファイルはどうなるのでしょうか?
t
一つのテクスチャファイルに、オブジェクトごとに場所を変えて方向幕の画像データを敷き詰めることになるかと思います
i
水音車両車両さんで表すとsing_dest.pngみたいな感じでってことですか?
t
完全に同様になるかはわかりませんが、似たような形態になるはずです
このような問答を続けても、あなたの望む結果は得られないと思うので、ここの私の質問に答えては頂けませんか?
i
はい
t
もし答えるのが難しいのであれば、以下からわからない項目を数字で答えていただけますか おそらく、(1)__表示したいすべての方向幕のバリエーションをそれぞれ別々のオブジェクトとした3Dモデルを作成__し、スクリプトにて(2)__それぞれのオブジェクトを全て別のパーツとして登録__しているものと思います そして、(3)__現在選択されている方向幕__と(4)__現在時刻__を取得し、それらをもとに(5)__実際に描画する方向幕のパーツを決定__して(6)__描画__していると思います
i
1、2、3、4、5、6全てになりますね。。。
t
(1)について、あなたはMetasequoiaまたは代替となる3DCGソフトをどの程度使用、理解していますか
i
どのていどというと
t
1. 全く理解していない 2. ある程度理解しているが、(1)を行う具体的なやり方がわからない
i
1ですね、、
t
であれば、まずMetasequoiaまたは代替となる3DCGソフトの使用方法をご自分でお調べください 最低限それができなければ、描画スクリプトを制作することは難しいでしょう
i
なるほど。。
t
今思い返せば最初に「再現可能なのでしょうか」と聞いている時点で勘づくべきだったな...
私やPIPOsenさん、へんじんさんが示した通り、再現は可能ですので、もし実現したいのであれば、Metasequoiaの使用方法を調べてください
f
個人的な練習方法ですが、自分は最初は勾配標識・速度標識などの簡単な小物からつくっていました。 そこから徐々に、踏切などといったものから車両の製造へと取り組みました。踏切などを動かすに至ってもスクリプトを必要とするので同時進行で練習しました。 そのように、小さいものから、徐々に大きいものへと製作してみてはいかかでしょう?
基本的な操作が前提となるのでやっぱり慣れですかね
i
なるほど
f
あとは、ほかの方のモデルを改造したりするのがいいのではないでしょうか? 水音さんの水音標準・MCTシリーズなど、規約上改造加が可能なものなどで
あとはモデルやテクスチャにある程度慣れたらあとはスクリプトです! スクリプトは、js知識などを要するので最初のうちは聞いてみたり、調べてみたりすることです
2 Views