VitalRouter.MRuby - mrubyの実用的なゲーム組み込み例
自己紹介
https://gyazo.com/de1fafd691436cb1c1ca3d18cdded180
OSS Featured Work
私とRuby
Rails でこの道に入った。。
モバイル向け MMORPG など 2016〜
「ホワイの感動的Rubyガイド」
でプログラミングとその周辺の見え方が変わった
近年の仕事
大規模オンラインゲームサーバ開発
ゲームクライアント開発
サーバサイドリプレイス
etc..
近年の私とRuby..
好きだっただけに言いたいことは色々あんだよな…
スループット..
自然言語風のかっこいい字面はいいのだが、そこでトップランナーで居続けているか。またバランスはどうか。
vs 最近の言語の進化方向
mruby
組み込み用Ruby
軽量、省リソースフレキシブルなビルドをつくれる
Rite VM (mruby仮想マシン)
コンパイラを含めないビルドをつくれる
ここに目をつけたMatz氏はsugoi
ゲームにおけるスクリプト組み込み
https://gyazo.com/6f2df6dbb232f43e7bd4578ee3576a74
ゲームにおけるスクリプト組み込み
code:rb
text "しっぽが枝毛になっちゃった。"
ゲームにおけるスクリプト組み込み
ゲームシステムプログラミングとコンテンツのレイヤは通常明確に分かれる
ゲーム開発とLua
Luaを組み込むのは比較的一般的。
Luaは処理系の実装が楽
結果、本家以外の実装が無数にある
= ネイティブライブラリのビルドやリンクの必要すらない。
C#ならC#のLua処理系の選択肢が複数ある。
mrubyポータビリティ?
mrbgem は C/C++ 配布
mruby標準ライブラリの多くがC
mruby はカスタムビルドをつくってこそ真価を発揮するが、たとえば Rust/Go/Zig のようなクロスビルドがないため、自前ビルドはけっこう難儀
ゲーム開発とRuby
Rubyのもっとも得意な分野は構造化されたDSLの自作能力
構造化されたシーケンス
code:ruby
with(:ヨゴロウザ) do
talk 'あんたは誰だ'
motion :suprize
end
with(:黒猫) do
talk 'おまえじゃないか'
motion :laugh
talk 'おまえは、じぶんのことをだんだん忘れていくようだな'
talk 'そうじゃないかね'
end
そういえば
シンタックスノイズを廃す、ネスト構造を好きに構築できる、というのは
最近だとKotlinが非常に注力している。正直字面のよさでRubyを上回っている点もあると思うのだ
シンタックスノイズなしでの非同期メソッド(kotlin coroutine) とかさ…
このへんの評価をRubyistに聞いてみたい
VitalRouter.MRuby
VitalRouter.MRuby
iOS/Android/Wasm/Windows/macOS (x86 & arm64)
がりがりに機能を削ったmrubyをUnityに組み込んでいる
ちなみに MRB_WORD_BOXING モード対応
役割分担
あくまでRubyにはスクリプトだけやらせる
VitalRouter.MRuby
Ruby から Unity へ 「メッセージ」を発行
あえてこれしかできない
「メッセージ」は宣言的ルーティングやイベントハンドラで受け取る
async/await 統合
高速なハンドラ。高速なmrb_value - C#
Fiber
https://scrapbox.io/files/672ca2fb003836791f91bf10.png
インターセプター
https://scrapbox.io/files/672c7ed440123b9f04850db3.webp
mrb_value シリアライザ
VitalRoute.MRuby は、mrb_value を直接C#のメモリ表現に変換する
C# の SourceGenerator (マクロのような機能)が活用されている
deno の serde_v8 から着想を得ている
そんなかんじです
ruby + ゲーム開発(Unity) おすすめです。
実はピュアC# で mruby VMも実装中なので、くわしい人いろいろ教えてください