Inspector-2

加入Text,以及一些必要注释
This commit is contained in:
SoulliesOfficial
2025-02-12 00:01:23 -05:00
parent f949cd3229
commit 675c571e86
18 changed files with 895 additions and 47 deletions

View File

@@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
@@ -7,6 +8,7 @@ namespace Ichni.Editor
{
public class DynamicUIContainer : MonoBehaviour
{
public TMP_Text title;
public List<DynamicUIElement> dynamicUIElements = new List<DynamicUIElement>();
[FormerlySerializedAs("container")] public RectTransform rect;
}

View File

@@ -1,15 +1,32 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
namespace Ichni.Editor
{
public abstract class DynamicUIElement : MonoBehaviour
{
public GameElement connectedGameElement => EditorManager.instance.uiManager.inspector.connectedGameElement;
public bool isAlwaysUpdated;
public abstract void Initialize(string parameterName);
public TMP_Text title;
protected GameElement connectedGameElement => EditorManager.instance.uiManager.inspector.connectedGameElement;
/// <summary>
/// 参数名,通过反射获取饿修改对应变量的值
/// </summary>
public string parameterName;
/// <summary>
/// 是否始终更新如果子类可能用到此变量则在子类中写Update即可
/// </summary>
public bool isAlwaysUpdated;
public virtual void Initialize(string title, string parameterName)
{
this.parameterName = parameterName;
this.title.text = title;
}
//public abstract void ApplyParameters();
}
}

View File

@@ -7,14 +7,13 @@ namespace Ichni.Editor
{
public class DynamicUIInputField : DynamicUIElement
{
public string parameterName;
public TMP_InputField inputField;
public override void Initialize(string parameterName)
public override void Initialize(string title, string parameterName)
{
this.parameterName = parameterName;
inputField.text = connectedGameElement.GetType().GetField(parameterName).GetValue(connectedGameElement).ToString();
inputField.onEndEdit.AddListener(ApplyParameters);
base.Initialize(title, parameterName);
inputField.text = connectedGameElement.GetType().GetField(parameterName).GetValue(connectedGameElement).ToString(); //获取对应变量的值
inputField.onEndEdit.AddListener(ApplyParameters); //输入结束后修改变量
}
private void ApplyParameters(string text)

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
namespace Ichni.Editor
{
public class DynamicUIText : DynamicUIElement
{
public TMP_Text text;
public override void Initialize(string title, string parameterName)
{
base.Initialize(title, parameterName);
text.text = connectedGameElement.GetType().GetField(parameterName).GetValue(connectedGameElement).ToString();
}
private void Update()
{
if (isAlwaysUpdated)
{
text.text = connectedGameElement.GetType().GetField(parameterName).GetValue(connectedGameElement).ToString();
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bd156b66e112a4120a775c14113c0738
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -93,8 +93,7 @@ namespace Ichni.Editor
private void SelectGameElement()
{
EditorManager.instance.uiManager.inspector.connectedGameElement = connectedGameElement;
connectedGameElement.SetUpInspector();
EditorManager.instance.uiManager.inspector.SelectGameElement(connectedGameElement);
}
private void ExpandOrFold()

View File

@@ -5,9 +5,58 @@ using UnityEngine;
namespace Ichni.Editor
{
public class Inspector : StaticWindow
public partial class Inspector : StaticWindow
{
public GameElement connectedGameElement;
public RectTransform inspectorRect;
public List<DynamicUIContainer> containers;
/// <summary>
/// 先清空所有的容器然后为当前的GameElement设置Inspector
/// </summary>
/// <param name="gameElement"></param>
public void SelectGameElement(GameElement gameElement)
{
containers.ForEach(container => Destroy(container.gameObject));
containers.Clear();
connectedGameElement = gameElement;
connectedGameElement.SetUpInspector();
}
}
public partial class Inspector
{
public DynamicUIContainer GenerateContainer(string title)
{
DynamicUIContainer container = Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, inspectorRect).GetComponent<DynamicUIContainer>();
container.title.text = title;
containers.Add(container);
return container;
}
public DynamicUIContainer GenerateContainer()
{
DynamicUIContainer container = Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, inspectorRect).GetComponent<DynamicUIContainer>();
Destroy(container.title.gameObject);
containers.Add(container);
return container;
}
public DynamicUIInputField GenerateInputField(DynamicUIContainer container, string title, string parameterName)
{
DynamicUIInputField inputField = Instantiate(EditorManager.instance.basePrefabs.inputField, container.rect).GetComponent<DynamicUIInputField>();
inputField.Initialize(title, parameterName);
container.dynamicUIElements.Add(inputField);
return inputField;
}
public DynamicUIText GenerateText(DynamicUIContainer container, string title, string parameterName, bool isAlwaysUpdate = false)
{
DynamicUIText text = Instantiate(EditorManager.instance.basePrefabs.text, container.rect).GetComponent<DynamicUIText>();
text.Initialize(title, parameterName);
text.isAlwaysUpdated = isAlwaysUpdate;
container.dynamicUIElements.Add(text);
return text;
}
}
}