中途半端に怠惰な人のためのProtoFlux
0.はじめに
この記事はその2 Resonite Advent Calendar 2023の二日目の記事です。
一日目はよっしーさんの「2023年のVR-TRPG」
三日目はモトメイドさんの「基本操作リファレンス」です。
インベントリ開くのめんどう
今この機能ほしいけどインベントリから取り出すのだるいしFluxで書くかーってなる中途半端に怠惰な人のためのProtoFlux作例です。
・パッキングもめんどうなので保存はしない前提です。
・基本的にセーフティをつけないので場合によっては壊れますが仕様です。
・動かなかったら適当に追加したりして動かしてください。
・まともな人はインベントリからちゃんとしたツールを取り出した方が良いと思います。
1.Rootにごみがいっぱい落ちてるなぁ
ふとRoot直下を見てみると同じ名前のごみがたくさん落ちてることありますよね。消してくれるツールがインベントリにあった気がしますが、取り出すのがめんどうなのでつくりましょう。
その1
Root直下に落ちてる特定の名前のSlotを全部消します。
消せないものがあったらそこで止まります。仕様です。
・Flow(StartAsyncTask)
・Slots(RootSlot, FindChildByName, DestroySlot)
の二か所で完結するので楽です。
その2
その1とは違って消せないものがあっても止まりません。
For文のReverseをOnにすることによってDestroyやSetParentなどの子のIndexがずれるノードを使っても正常に動いてくれます。
ただ==(Equals)を出すのがめんどいのであんまり使いません。
豆知識
こういう型を指定しなければならないノードは大体の場合接続すると勝手に適してるやつに変わってくれるので、ノードを出す時はboolとかulongとか押しやすい位置にあるものを適当に出しましょう。
例えstringでも<Object>の方を選ぶと入力しないといけなくてめんどうなので<Value>を開きます。大体接続できます。
接続できなかったら大人しく入力して出しましょう。
2.曲を三つくらいループで聴きたい
コピペで出てくる動画プレイヤー、音量調節機能は便利だけど一曲しか入らないんですよね。今の気分的には三つくらいループしたい。そういえばそんなアイテムを前に作った気がしますが、探すのがめんどうなのでつくりましょう。
その1
Multiplexを直接増やせば好きなだけ曲を追加できます。
なお読み込み完了を検知せずに再生するので動画の始めが切れますが、諦めましょう。あと時々止まるので、止まったらCallを押してあげましょう。
仕様です。
その2
流石に動画の始めが切れるのは許せないときがあるので読み込み検知を追加しました。実は動画プレイヤーは丁寧にDynamicVariableを生成してくれますが、めんどうなので直接値を取り出します。
本当はFireOnTrueには自分を指定した方が無難ですが、手っ取り早くUserが出せるノードなのでHostUserに処理させます。
どうせ保存しないFluxなので今動けばいいんです。
豆知識
FireOnTrueにNearestUser等の頻繁に出力Userが切り替わるノードを繋ぐのはバグの元なのでできるだけ避けましょう。
昔その理由を解説した記事をどこかに書いた気がします。思い出したら追記するかもしれません。
3.間違えて全部アンパックしちゃった
うっかりミスでかなり上の階層で全部アンパックしちゃった時、ありますよね。手動でパッキングし直すのは余りにもめんどうなのでFluxでなんとかしましょう。
その1
指定したSlotの中でアンパックされてるノードっぽいやつを探してその場にパッキングします。<NODE_UI>って名前のノードじゃないのがあったらそこから先は進めません。
Callを押すごとに一つ一つ丁寧にパッキングしてくれます。
連打しましょう。
豆知識
PackProtoFluxNodes君は特定のSlot下の「パッキング状態に関わらず全てのノード」を「特定のSlot」にパッキングします。
つまりちょっと間違えると全てのノードが表層に出てきて地獄を見ます。気を付けましょう。
おわりに
アプデにより挙動が変わって何かが起きる可能性があります。何も起きなくなる可能性もあります。どちらにせよ何が起きても責任はとりません。
割と理解していないと地獄を量産する危険物ばかりなので、これを読んでる人はちゃんとインベントリから便利なツールを取り出しましょう。