|
|
|
|
@@ -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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|