Neos VRの世界で様々なアイテムが作れるおもしろ機能のLogiX。
無限に遊べるヤバい機能ですが、慣れるまでがちょっと大変なので、僕が始めた頃につまづいた箇所をピックアップして解説します。
最近LogiXはじめた人向け。
このボタン押した時になにかしたいな!
お、ButtonコンポーネントにIsPressedなんてのがあるじゃん!エイッ!
とやってしまっていました。
FireOnTrueはBooleanがTrueになったときパルスが出るノードです。
これでも一応動くのですが、実はいろいろと問題があります。
「一人でテストすると動くのに複数人のセッションだとおかしい」
「押しても反応しない時がある」
などの現象が発生する可能性アリ。
かわりにInteractionの中にあるButtonEventsを使いましょう。
これなら確実にパルスが出るし、複数人のセッションで挙動が変わる心配もありません。
さらにボタンの種類によっては「押した時」「押している時」「離した時」「カーソルが乗った時」「カーソルが乗っている時」「カーソルが離れた時」それぞれのパルスと各種情報も取得できる優れものです。
一人で黙々と作ってさあできた!みんな見て~!
と喜び勇んで取り出したアイテムがバグってる!!!さっきは動いてたのに!!!
ということがありました。
原因はいろいろ考えられますが、よくあるのがこれです。
BooleanがTrueになったときにSlotを複製するというLogiXですね。
何も間違っていないように見えますが…
これを複数人居るセッションで実行すると、その場にいる人数分複製されます。
問題はFireOnTrueの左下、Userの入力に何も繋がっていないことです。
ここで誰にとってTrueになった時かを指定することになっているのですが、何も繋がない場合、LocalUserを繋いだのと同じ効果があります。
LocalUserはそれぞれのユーザーにとっての自分です。
FireOnTrueにLocalUserをつなぐと各ユーザーから複数回パルスが出るという挙動になります。
これが上でも触れた、一人で作業していた時と複数人のセッションで動かした時に挙動が変わってしまう原因です。
パルスのDisplayをよく見るとユーザー名が書かれており、誰が処理をしたのかわかるようになっています。
パルスを使う処理は誰が処理するのかを考えることがとても重要です。
ではどうすればいいのか?
処理するユーザーを誰か一人に決めてあげればOKです。
例えばこう。
これならHostUserは各セッションに一人だけなので、一回だけ複製されます。
ただしホストが処理するのでは都合が悪いこともありますので、状況に応じて誰が処理するべきかよく考える必要があります。
なお、それぞれのユーザーから見て値がTrueになったとき、各ユーザーが1回ずつパルスを出すようにするには、LocalFireOnTrueというノードを使用してください。
ボタンを押した人に○○する。みたいなアイテムはまっさきに作りたくなるものの一つですよね!
ここまでの2つの知識を組み合わせれば、誰がボタンを押したのかを知るのは簡単です。
これで押したユーザーを破壊するボタンが作れますね!
面白そうなノードを見つけたけど、出力から何も出ていないように見える・・・どうやって使うの?
例えばこちら。
GETStringはWebにGetリクエストを送れます。
Googleにアクセスして、成功のパルスも出ていますが出力はnullです。
実はこの手ノードはパルスが出るその一瞬だけ値が出力されるようになっています。
1フレーム内で処理が終わっているので画面には表示されません。
出力の内容を見たいときは一度Writeしておきましょう。
後のフレームでこの値を使いたいときも、この方法で使用できます。
「武器にぶつかったら弾き飛ばしたい」「攻撃判定に当たったものを破壊したい」
など、コライダーに当たった相手になにかしたい場面はよくありますよね!
コライダーに当たった瞬間に処理をするにはPhysics/OnCollisionStartが使えます。
まず、判定に使うコライダーのTypeをActiveにする必要があります。
そしてOnCollisionStartを繋ぎました。
これでこのBoxに何かが当たったときにパルスが出ます。
さて、当たった相手を知りたいのですが、どうすればいいのでしょうか?
ノードの右下から取れそうな気がしますが、IColliderという型になっていて繋がりそうなノードが見つかりません。
ここでSlot/GetSlotを繋いでみます。
するとこのように当たったコライダーが含まれているSlotを取ることができました!
これでSlotを操作するノードを組み合わせて好きな動きを作ることができます。
ちなみにこのOnCollisionStartも、先述のLocalUserを繋いだFireOnTrueのように全員分のパルスが出ます。
そのため1人分だけ処理するにはGetActiveUserで武器を持っているユーザーや当たったユーザーを取得するなど、少し工夫が必要です。
(画像は当たったユーザーに処理させる例)
このあたりのテクニックは知ってしまえば些細なことですが、何も知らないところから調べようとするとピンポイントで見つけるのに苦労する情報だと思います。
LogiXは繋ぐだけで動く手軽さが本当に最高なので無限に遊びましょう!
まだコメントはありません