Unity向けの汎用設定画面システム。R3リアクティブプログラミングとVContainerを活用した、拡張性の高い設定管理パッケージ。
- リアクティブ設計: R3を使用した設定値の変更監視と自動反映
- 型安全な設定項目: スライダー、ボタン、列挙型の3種類をサポート
- 永続化対応: JSON形式でのデータ保存・読み込み
- カスタマイズ可能: プロジェクト固有の設定を
ISettingsDefinitionで定義 - UIナビゲーション: ゲームパッド対応の設定画面ナビゲーション
- R3 - リアクティブプログラミング
- UniTask - 非同期処理
- VContainer - 依存性注入
- TextMeshPro - UI表示
# リポジトリルートに追加
git submodule add https://github.com/void2610/my-unity-settings.git my-unity-settings
# Assets/Scripts/にシンボリックリンク作成
ln -s ../../my-unity-settings Assets/Scripts/SettingsSystemプロジェクト固有の設定をISettingsDefinitionを実装して定義:
public class GameSettingsDefinition : ISettingsDefinition
{
public IEnumerable<ISettingBase> CreateSettings()
{
yield return new SliderSetting(
name: "BGM音量",
desc: "BGMの音量を設定します",
defaultVal: 0.5f,
min: 0f,
max: 1f
);
yield return new EnumSetting(
name: "画質",
desc: "グラフィック品質を設定",
opts: new[] { "low", "medium", "high" },
defaultValue: "medium",
displayNames: new[] { "低", "中", "高" }
);
yield return new ButtonSetting(
name: "データ削除",
desc: "セーブデータを削除",
btnText: "削除",
needsConfirmation: true,
confirmMsg: "本当に削除しますか?"
);
}
public void BindSettingActions(IReadOnlyList<ISettingBase> settings, CompositeDisposable disposables)
{
foreach (var setting in settings)
{
switch (setting)
{
case SliderSetting { SettingName: "BGM音量" } s:
s.OnSettingChanged
.Subscribe(_ => AudioManager.Instance.BgmVolume = s.CurrentValue)
.AddTo(disposables);
break;
}
}
}
}public class RootLifetimeScope : LifetimeScope
{
protected override void Configure(IContainerBuilder builder)
{
// 設定システムの登録
builder.Register<SettingsManager>(Lifetime.Singleton);
builder.Register<GameSettingsDefinition>(Lifetime.Singleton).As<ISettingsDefinition>();
builder.Register<DataPersistence>(Lifetime.Singleton);
}
}ボタン設定で確認が必要な場合、IConfirmationDialogを実装:
public class ConfirmationDialogService : IConfirmationDialog
{
public async UniTask<bool> ShowDialog(string message, string confirmText)
{
// ダイアログ表示ロジック
return await ShowConfirmationUI(message, confirmText);
}
}SettingsSystem/
├── Core/ # 設定タイプ定義
│ ├── SettingBase.cs # 基底クラス
│ ├── SliderSetting.cs # スライダー設定
│ ├── ButtonSetting.cs # ボタン設定
│ └── EnumSetting.cs # 列挙型設定
├── Manager/
│ ├── SettingsManager.cs # 設定管理
│ └── ISettingsDefinition.cs
├── Persistence/
│ └── DataPersistence.cs # データ永続化
├── UI/
│ ├── Abstractions/ # インターフェース
│ ├── Items/ # 設定項目UI
│ ├── Presenters/ # MVP Presenter
│ ├── Utils/ # ユーティリティ
│ └── Views/ # MVP View
└── SettingsSystem.asmdef
| タイプ | 用途 | 値の型 |
|---|---|---|
SliderSetting |
数値調整(音量、感度等) | float |
EnumSetting |
選択肢から選択 | string |
ButtonSetting |
アクション実行 | - |
MIT License