Inspector-2
加入Text,以及一些必要注释
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
27
Assets/Scripts/DynamicUI/DynamicUIElements/DynamicUIText.cs
Normal file
27
Assets/Scripts/DynamicUI/DynamicUIElements/DynamicUIText.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bd156b66e112a4120a775c14113c0738
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user