FloatSoda 初の正式リリースです。Flutter ライクな宣言的 UI で SteamVR オーバーレイを構築するためのコア機能一式を公開します。
Alpha 段階です。 API は予告なく破壊的に変更されることがあります。
✨ ハイライト
- 宣言的 UI コアの完成
StatelessWidget/StatefulWidget+SetState()/InheritedWidgetBuildOwnerによる差分ビルド(Key付き子リストの二端差分を含む)- RenderObject ツリーの差分レイアウト・差分ペイント
- アニメーションシステム(
AnimationController/Ticker/FadeTransition/Curves)
- 3種のオーバーレイを統一管理:
DashboardWindow/WorldSpaceWindow/DeviceTrackedWindow - SteamVR プロセス登録:
OVRApplication.Identify()(#146)
📦 公開パッケージ(NuGet)
本リリースから公開はコア4パッケージに整理しました。
| パッケージ | 役割 |
|---|---|
| FloatSoda | フレームワーク本体(Widget / RenderObject / パイプライン) |
| FloatSoda.Common | ジオメトリ型・レイヤーツリー |
| FloatSoda.Engine | OpenGL / レンダースレッド / オーバーレイウィンドウ |
| FloatSoda.OVR | OpenVR ラッパー・オーバーレイ種別・イベント |
FloatSoda.UI / FloatSoda.UI.Cream / FloatSoda.UI.FizzyPop(デザインシステム、v0.6.0 予定)と FloatSoda.Hooks(実験的、v0.5.0 目安)は完成まで公開を停止します。
🐛 修正
- レンダーツリー: 子の動的削除で無限再帰(StackOverflow) —
CleanChildRelayoutBoundaryが自分自身に再帰していた問題を修正。トーストのように子を増減させる UI で必ず発生していたクリティカルなバグです(#149) - 💥 破壊的変更:
WithOpenVRFrameLimiter()を削除 —WaitGetPosesはシーンアプリ専用 API のため、オーバーレイアプリでは必ずIsNotSceneApplicationでクラッシュしていました。フレームレート制御はWithTargetFrameRate()(既定 30fps)を使用してください(#149) - SteamVR に AppKey 未登録でも起動可能に(#147 相当の修正)
⚠️ 既知の制限
- 入力(ヒットテスト / ボタン / ジェスチャ)は未実装 — v0.2.0 で対応予定
Container/Padding/ListViewなどの便利ウィジェットは未実装スタブ — v0.3.0〜- バックグラウンドスレッドからの
SetStateは未サポート(#150) - オーバーレイの実世界サイズは
Dpm経由の間接指定のみ(#151)
📖 はじめかた
dotnet add package FloatSodaドキュメントは Wiki から。最小構成のコードは GettingStarted を参照してください。
🤖 Generated with Claude Code