@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user