コンテンツにスキップ

FloatSoda

SteamVR のオーバーレイを、C# のコードだけで。

オーバーレイを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 そのもので、ビルドのたびにここへ読み込まれます。

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 でできないことは、次のページにまとめています。

やりたいことから選ぶ

型やプロパティを引きたい

API リファレンス。準備中で、それまではソースコードの XML ドキュメントコメントを参照してください。