111111111111

Signed-off-by: TRAfoer <lhf190@outlook.com>
This commit is contained in:
2026-01-18 13:11:38 +08:00
parent a31269c632
commit de4e399d78
76 changed files with 3199823 additions and 10619 deletions

View File

@@ -16,7 +16,7 @@ namespace Ichni.RhythmGame
public Material skyboxMaterial;
public string backgroundSpriteName;
public Sprite backgroundSprite;
public SkyboxSubsetter skyboxSubsetter;
public static BackgroundSetter GenerateElement(string elementName, Guid id, List<string> tags,
@@ -28,7 +28,7 @@ namespace Ichni.RhythmGame
LogWindow.Log("There is already a Background Setter in the scene.", Color.red);
return null;
}
BackgroundSetter backgroundSetter = Instantiate(EditorManager.instance.basePrefabs.emptyObject)
.AddComponent<BackgroundSetter>();
EditorManager.instance.backgroundSetter = backgroundSetter;
@@ -39,7 +39,7 @@ namespace Ichni.RhythmGame
backgroundSetter.backgroundSpriteName = backgroundSpriteName;
return backgroundSetter;
}
public override void Refresh()
{
EditorManager.instance.backgroundController.EnableBackground(!useSkybox);
@@ -61,33 +61,79 @@ namespace Ichni.RhythmGame
matchedBM = new BackgroundSetter_BM(elementName, elementGuid, tags, null,
useSkybox, skyboxThemeBundleName, skyboxMaterialName, backgroundSpriteName);
}
// 新增:用于在 Inspector 中显示的列表数据
[HideInInspector] private List<string> themeBundleListForSelection;
[HideInInspector] private List<string> skyboxNameListForSelection;
private void UpdateSelectionLists()
{
themeBundleListForSelection = ThemeBundleManager.instance.loadedThemeBundleList.ConvertAll(x => x.themeBundleName);
skyboxNameListForSelection = new List<string>();
if (!string.IsNullOrEmpty(skyboxThemeBundleName) &&
ThemeBundleManager.instance.TryGetThemeBundle(skyboxThemeBundleName, out ThemeBundle themeBundle))
{
skyboxNameListForSelection = themeBundle.assetList_Material.ConvertAll(x => x.name);
}
}
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
Inspector inspectorMain = EditorManager.instance.uiManager.inspector; // 引用主检查器用于刷新
var container = inspector.GenerateContainer("Background Setter");
var backgroundSettings = container.GenerateSubcontainer(3);
// 1. 开关
var useSkyboxToggle = inspector.GenerateToggle(this, backgroundSettings, "Use Skybox", nameof(useSkybox));
var skyboxThemeBundleField = inspector.GenerateInputField(this, backgroundSettings, "Skybox Theme Bundle", nameof(skyboxThemeBundleName));
var skyboxMaterialNameField = inspector.GenerateInputField(this, backgroundSettings, "Skybox Material", nameof(skyboxMaterialName));
// 刷新可选列表
UpdateSelectionLists();
// 2. 天空盒资源包下拉框 (同步 SkyboxSubsetter 逻辑)
var themeDropdown = inspector.GenerateDropdown(this, backgroundSettings, "Skybox Theme Bundle",
themeBundleListForSelection, nameof(skyboxThemeBundleName));
themeDropdown.AddListenerFunction(() =>
{
UpdateSelectionLists();
inspectorMain.SetInspector(this); // 选择包后刷新 UI 以加载材质列表
});
// 3. 天空盒材质下拉框 (同步 SkyboxSubsetter 逻辑)
var materialDropdown = inspector.GenerateDropdown(this, backgroundSettings, "Skybox Material",
skyboxNameListForSelection, nameof(skyboxMaterialName));
if (string.IsNullOrEmpty(skyboxThemeBundleName) || skyboxNameListForSelection.Count == 0)
{
materialDropdown.dropdown.interactable = false;
}
// 4. 背景图片输入框 (保持原样)
var backgroundSpriteField = inspector.GenerateInputField(this, backgroundSettings, "Background Sprite", nameof(backgroundSpriteName));
// 5. 应用按钮
var applyButton = inspector.GenerateButton(this, backgroundSettings, "Apply", Refresh);
void SetInputFields(bool value) // 根据是否使用Skybox设置输入框的可交互性
// 控制交互性
void SetInputFields(bool value)
{
skyboxThemeBundleField.inputField.interactable = value;
skyboxMaterialNameField.inputField.interactable = value;
themeDropdown.dropdown.interactable = value;
materialDropdown.dropdown.interactable = value && !string.IsNullOrEmpty(skyboxThemeBundleName);
backgroundSpriteField.inputField.interactable = !value;
}
SetInputFields(useSkybox);
useSkyboxToggle.AddListenerFunction(() => EditorManager.instance.backgroundController.EnableBackground(!useSkybox));
useSkyboxToggle.AddListenerFunction(() => SetInputFields(useSkybox));
var generateContainer = inspector.GenerateContainer("Generate");
useSkyboxToggle.AddListenerFunction(() =>
{
EditorManager.instance.backgroundController.EnableBackground(!useSkybox);
SetInputFields(useSkybox);
});
// 生成 Skybox Subsetter 的按钮部分
var generateContainer = inspector.GenerateContainer("Advanced Controls");
var generateSubContainer = generateContainer.GenerateSubcontainer(3);
var generateSkyboxControllerButton = inspector.GenerateButton(this, generateSubContainer, "Skybox Controller", () =>
inspector.GenerateButton(this, generateSubContainer, "Create Skybox Controller", () =>
{
if (skyboxSubsetter == null)
{
@@ -153,7 +199,7 @@ namespace Ichni.RhythmGame
public override GameElement DuplicateBM(GameElement attached)
{
return BackgroundSetter.GenerateElement(elementName, Guid.NewGuid(), tags, false, attached,
return BackgroundSetter.GenerateElement(elementName, Guid.NewGuid(), tags, false, attached,
useSkybox, skyboxThemeBundleName, skyboxMaterialName, backgroundSpriteName);
}
}