型やプロパティを引きたい
FloatSoda
オーバーレイを1枚作るだけで、こんなにコードを書くの?
SteamVR のオーバーレイは、VR の中に浮かぶ 2D のパネルです。自分用のオーバーレイを作るときの主な作り方は、これまで次の3つでした。
- Unity で作る。オーバーレイ1枚のために、ゲームエンジンを丸ごと動かす
- C++ で OpenVR を直接呼ぶ。並べ方の計算も描画も、自分で書く
- Qt などのデスクトップ向けの UI を、自分で OpenVR につなぐ
時計を1つ浮かべたいだけでも、この3つのどれかから始めることになります。
欲しいのは画面のレイアウト
FloatSoda では、「状態がこうなら、画面はこう見える」を C# のコードで書きます。並べ方の計算、描画、SteamVR への受け渡し、状態が変わったときの描き直しは、FloatSoda が受け持ちます。書き方は Flutter と同じ形で、Unity のシーンやプレハブの代わりに、画面をコードで組み立てます。
次のコードは、SteamVR のダッシュボードに出す、最小のオーバーレイです。samples/FloatSoda.Samples.GettingStarted の Program.cs そのもので、ビルドのたびにここへ読み込まれます。
using FloatSoda;using FloatSoda.Abstractions.Geometries;using FloatSoda.Geometrics;using FloatSoda.Widgets;using FloatSoda.Widgets.Layout;using FloatSoda.Widgets.Paint;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using SkiaSharp;
var builder = Host.CreateApplicationBuilder(args);builder.Services.AddFloatSoda();
using var host = builder.Build();var app = host.Services.GetRequiredService<FloatSodaApp>();
Widget root = new Align{ Alignment = Alignment.Center, Child = new SizedBox { Width = 100, Height = 100, Child = new ColoredBox { Color = SKColors.CornflowerBlue } }};
app.CreateWindow(new DashboardWindow{ Dpm = new Dpm(100), Title = "MyDashboard", Child = root});await host.RunAsync();FloatSoda が裏で何をしているかは、「FloatSoda の仕組み」にあります。
コードだから、全部読めるし探しやすい
FloatSoda の UI はすべて C# のコードで、シーンもプレハブも持ちません。画面がどこで組まれているかは、コードを検索すれば見つかります。変更は diff で追え、コードを AI に書かせることもできます。このサイトは、コーディングエージェントがそのまま読めるように作ってあります。
各ページは URL 末尾の / を .md に置き換えると素の Markdown で取得できます(例: /tutorials/first-overlay/ のページは /tutorials/first-overlay.md)。
どうやって使うの?
FloatSoda は、SteamVR で動くオーバーレイを作るためのフレームワークです。作ったアプリを動かすときは、SteamVR を起動しておきます。開発に要る環境と、今の FloatSoda でできないことは、次のページにまとめています。