RecRoomの新プログラミング環境、Circuits Version2 (CV2)のまとめ

VRSNSのRecRoomの新プログラミング環境、Circuits Version2 (CV2)のチュートリアル動画を見ながらどんなことができるのかどんな癖があるのかをまとめました。
0
sifue(吉村 総一郎) @sifue

RecRoomの CircuitsV2の紹介動画を見ていて思うのは、これはScratchっていうよりかはVRChatのUdonって言った方がよさそう。順次実行の橙のexecシグナルをノードに渡して起動しないといけない。あと信号には型があってよく理解する必要がありそう。 An intro into CircuitsV2 youtu.be/J_vGEe5-rc8

2021-05-05 23:19:31
拡大
sifue(吉村 総一郎) @sifue

RecRoomの Circuits V2の各種ソケット ・ 橙ソケットは順次実行のためのexecシグナル ・ 黄色ソケットはオブジェクト取得 ・ その他のソケットは値取得 ということをしっかり意識しないといけない。またオブジェクトも値も型が分かりずらいので動かしてみないと動くのかわかりずらい問題があるな。

2021-05-05 23:25:38
sifue(吉村 総一郎) @sifue

RecRoomのCV2で大幅にできることが増えたのはAI挙動でやはりそこのうまみが大きいなぁ。

2021-05-05 23:29:54
sifue(吉村 総一郎) @sifue

そして、IF Expressionノード、実は受け取るのがbool値なので、Equalsノードも合わせて使わないといけないというところがちょっと癖がある。 pic.twitter.com/BtUxKkq0N2

2021-05-05 23:31:02
拡大
sifue(吉村 総一郎) @sifue

ちなみに、見ている動画は、 recroom.com/howtocreate の ・An intro into CircuitsV2 ・CV2 Pushing Buttons ・CV2 Direct Control ・CV2! 5 Need To Know Setups ・How To CV2: Logscreen Chatbox ・How to Piston in V2 一応出ているリソースとしてはこれに当たる様子。

2021-05-05 23:32:16
sifue(吉村 総一郎) @sifue

あとRecRoomのCV2でできること、Triger VolumeのV2が本当にすごい。過去検出できなかったオブジェクトの当たり判定が取得できる。さらにそのタグを検出して動作を分岐させられるのでこれで物理挙動をする複雑なゲームが大抵作れる。 pic.twitter.com/d6w2daNf1k

2021-05-05 23:39:21
拡大
sifue(吉村 総一郎) @sifue

RecRoomのCV2のEvent Recievier、実行シグナル自体をひたすら送り続けるヤバいイベントもあったりする。Update 30Hzで秒間30回更新するようなexecシグナルを送ることができる。ゲーム内ゲームのメインループを作れるという...。すごい。 pic.twitter.com/s6jTnbeb15

2021-05-05 23:50:44
拡大
sifue(吉村 総一郎) @sifue

RecRoomのCV2のSet Valueノードのかなりビックリするところ、なんとオブジェクトは全部参照変数になっており、ノードから受け取った変数に対して別の変数をセットすることができたりする。昔ならではのC++とかでよくある&で戻り値の値を引数に与えるアウトプットパラメーター方式という。 pic.twitter.com/srNEIf0TtA

2021-05-05 23:59:51
拡大
sifue(吉村 総一郎) @sifue

@PolarisPenguin いえいえ、大変すばらしい部屋でした~。自分はアートの才能がまったくないので、あんな素晴らしい部屋を作れるの本当に尊敬します!

2021-05-06 00:01:06
sifue(吉村 総一郎) @sifue

RecRoomのCV2のSet Valueノード、Instance booleanというのは参照変数であり、Set Valueノードでその値を書き換えるため、トグルスイッチの実装はこんな感じになる。Set系はオブジェクト指向プログラミング言語とは流れが逆になるので注意が必要だ。 pic.twitter.com/ql39F9HJW9

2021-05-06 00:06:59
拡大
sifue(吉村 総一郎) @sifue

ちなみにbool変数のデフォルト値はfalseの様子。

2021-05-06 00:07:52
sifue(吉村 総一郎) @sifue

RecRoomのCV2の参照変数ノードの違い ・Instance string ・Synced string とあるが、Instanceはいわゆるローカル変数で他のユーザーには同期しない、Syncedはいわゆる同期変数で部屋にいる全員が同期する。この辺の扱いはVRChatのUdonとかと同様。

2021-05-06 00:11:05
sifue(吉村 総一郎) @sifue

RecRoomのCV2のEvent Receiver Update 30Hzはまあ更新頻度がむちゃくちゃ高いので、もし仮に1秒に1回であればintローカル参照変数を使って、こういうReducerを作ってやる必要があるとのこと。強力だけどいろいろ癖があるな。 pic.twitter.com/zZTbasSjSr

2021-05-06 00:18:50
拡大
sifue(吉村 総一郎) @sifue

RecRoomのCV2、プレイヤーから位置情報を取得、位置情報の3次元ベクトルデータの取得、2つの三次元ベクトルから距離数値の取得、距離数値を文字列に変換とかまで一通りノードがそろっているが、とにかく型を意識した実装が必要。 pic.twitter.com/yXgtiz8GWS

2021-05-06 00:22:48
拡大
sifue(吉村 総一郎) @sifue

RecRoomのCircuitsV2のすごい部品の一つにLogScreenがある、実はVRChatのUdon開発をするときはlogファイルを確認しながら実装していくことになるのだけど、これをゲーム内で確認しながらデバッグできる。ちなみにVRChatは似たようなのを自作している人もいる。 pic.twitter.com/KHo6iBRzed

2021-05-06 00:29:23
拡大
sifue(吉村 総一郎) @sifue

RecRoomのCircuitsV2の機能としてあと地味にすごいのPromptというユーザーに文字列入力を促す部品があることだったりする。これがあることで、かなりリッチなゲームが作れる。

2021-05-06 00:31:55
sifue(吉村 総一郎) @sifue

RecRoomのCircuitsV2のTo Stringノード、どんなオブジェクトでも文字列化できるっぽいけど、To String自体の挙動はオブジェクトによりけりで、そこは変えられないっぽい。まあTo Stringできるだけでも御の字な気がする。Unity C#のToStringメソッドそのままなんじゃないかって気もする。

2021-05-06 00:33:29
sifue(吉村 総一郎) @sifue

RecRoomのCircuitsV2のString Fromatは"{0} is {1}"のような形式。この辺はV1時代のTextの"{A} is {B}" というAピンとBピンを使う記法をそのまま踏襲してるみたい。ただ今回は勝手に文字列化されずTo Stringを挟む必要ができた様子。この辺は型が厳密化してる。 pic.twitter.com/RfQaMmr0v2

2021-05-06 00:36:21
拡大
sifue(吉村 総一郎) @sifue

RecRoomのCircuitsV2のLogScreenはデバッグ用とということでローカル部品の様子。ただButtonとかはグローバル同期部品なので、部品ごとにそれがローカル部品なのかグローバル同期部品なのかは意識して実装する必要がありそう。なお情報はまとまってないので複数プレイヤーで実験するしかなさそう。

2021-05-06 00:40:55
sifue(吉村 総一郎) @sifue

ちなみにローカル部品の場合は、Event Senderを使ってEventを全員にブロードキャストして無理やり同期させるみたいだけども、イベントの到着順序や信頼性に関してはどれぐらい守られるかは謎。

2021-05-06 00:41:48
sifue(吉村 総一郎) @sifue

RecRoomの CircuitsV2の気軽なデバッグなら、とにかくパレットのSendTestEventボタンとEvent Recieverノード、あとはNotificationノードを使うのがとにかく便利そう。細かくデバッグするならLogScreenを使うのがいいかもしれない。

2021-05-06 00:46:44
sifue(吉村 総一郎) @sifue

RecRoomのCV2のPiston、Set Piston Positionで操作するのでピストンって言うよりかはオブジェクトの位置を操作する部品って考えた方がいいかもしれない。いわゆるオブジェクトポジションコントローラーになっている。これを使うと特定のオブジェクトや人を追いかけていくものも作れそう。

2021-05-06 00:54:58
sifue(吉村 総一郎) @sifue

RecRoom Circuites Version 2 (CV2) を完全に理解した! (フラグ

2021-05-06 00:55:35
sifue(吉村 総一郎) @sifue

でもまあ、これで思ったのはRec RoomのCircuits V2が正式リリースされたことで、まじでほぼなんでも実装できるようになった気がする。AI挙動も物理挙動も細かく作れる。これ頑張ればローマ字入力して日本語の文字を表示させるIMEも作れるなと思ったりもしたw まあそこまで頑張るかはあれだけどw

2021-05-06 01:03:32
sifue(吉村 総一郎) @sifue

あとRecRoomのCV2のEvent Sender、Scratchでもそうなんだけども、これを使って処理をまとめておいて外部から実行できるのでいわゆるオブジェクト指向プログラミングにおけるメソッドとして関数をまとめる、みたいなことができる。つまり処理の抽象化ができるのでプログラミングがより捗る!

2021-05-06 01:16:08