增加更新接口

This commit is contained in:
MuHua-123
2025-08-28 14:24:09 +08:00
parent 301030487e
commit 04b65e6945
38 changed files with 155 additions and 509 deletions
@@ -0,0 +1,71 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.UIElements;
public class CircularBar : VisualElement {
public new class UxmlFactory : UxmlFactory<CircularBar, UxmlTraits> { }
public new class UxmlTraits : VisualElement.UxmlTraits {
private readonly UxmlFloatAttributeDescription Fill = new() { name = "fill", defaultValue = 0.1f };
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc) {
base.Init(ve, bag, cc);
var circularBar = ve as CircularBar;
circularBar.Fill = Fill.GetValueFromBag(bag, cc);
circularBar.UpdateValue();
}
}
public readonly Material material;
public readonly RenderTexture rt;
public VisualElement visual;
public float Fill { get; set; }
public CircularBar() {
visual = new VisualElement();
visual.style.flexGrow = 1;
hierarchy.Add(visual);
var shader = Shader.Find("MuHua/UI/CircularBar");
if (shader == null) {
Debug.LogError("Failed to find Shader Graphs/CircularBar.");
return;
}
material = new Material(shader);
rt = new RenderTexture(128, 128, 0, RenderTextureFormat.ARGBFloat);
Background background = Background.FromRenderTexture(rt);
visual.style.backgroundImage = new StyleBackground(background);
}
public void UpdateValue(float fill) {
Fill = fill;
UpdateValue();
}
public void UpdateValue() {
if (material == null) { return; }
Texture2D texture = resolvedStyle.backgroundImage.texture;
if (texture == null) { return; }
material.SetFloat("_fill", Fill);
CommandBuffer command = CommandBufferPool.Get();
// 设置渲染目标为tempRTHandle
CoreUtils.SetRenderTarget(command, rt);
// 清除纹理内容
CoreUtils.ClearRenderTarget(command, ClearFlag.All, Color.clear);
// 渲染
command.Blit(texture, rt, material, 0);
Graphics.ExecuteCommandBuffer(command);
CommandBufferPool.Release(command);
Background background = Background.FromRenderTexture(rt);
visual.style.backgroundImage = new StyleBackground(background);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dd9bb527169c05848b8946bc93645079
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,30 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace MuHua {
public class UIFloatField : FloatField {
public new class UxmlFactory : UxmlFactory<UIFloatField, UxmlTraits> { }
public new class UxmlTraits : FloatField.UxmlTraits { }
public VisualElement inputElement;
public VisualElement textElement;
public UIFloatField() {
ClearClassList();
AddToClassList("input-field");
labelElement.ClearClassList();
labelElement.AddToClassList("unity-text-element");
labelElement.AddToClassList("input-field-label");
inputElement = this.Q<VisualElement>("unity-text-input");
inputElement.ClearClassList();
inputElement.AddToClassList("input-field-box");
textElement = inputElement.Q<VisualElement>("");
textElement.ClearClassList();
textElement.AddToClassList("unity-text-element");
textElement.AddToClassList("input-field-text");
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7046acdb2e5ef0c458969a4022ee9ab4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,28 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace MuHua {
public class UILongField : LongField {
public new class UxmlFactory : UxmlFactory<UILongField, UxmlTraits> { }
public new class UxmlTraits : LongField.UxmlTraits { }
public UILongField() {
ClearClassList();
AddToClassList("input-field");
labelElement.ClearClassList();
labelElement.AddToClassList("unity-text-element");
labelElement.AddToClassList("input-field-label");
VisualElement inputElement = this.Q<VisualElement>("unity-text-input");
inputElement.ClearClassList();
inputElement.AddToClassList("input-field-box");
VisualElement textElement = inputElement.Q<VisualElement>("");
textElement.ClearClassList();
textElement.AddToClassList("unity-text-element");
textElement.AddToClassList("input-field-text");
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1d30b5caf969d9b4ab1464d329cf16ca
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,58 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace MuHua {
/// <summary>
/// 文本输入字段
/// </summary>
public class UITextField : TextField {
public new class UxmlFactory : UxmlFactory<UITextField, UxmlTraits> { }
public new class UxmlTraits : TextField.UxmlTraits {
public UxmlStringAttributeDescription DefaultPrompt = new UxmlStringAttributeDescription {
name = "default-prompt"
};
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc) {
UITextField textField = (UITextField)ve;
textField.DefaultPrompt = DefaultPrompt.GetValueFromBag(bag, cc);
textField.SetDefaultPrompt();
base.Init(ve, bag, cc);
}
}
public string DefaultPrompt { get; set; }
public VisualElement inputElement => this.Q<VisualElement>("unity-text-input");
public VisualElement textElement => inputElement.Q<VisualElement>("");
public UITextField() {
ClearClassList();
AddToClassList("input-field");
labelElement.ClearClassList();
labelElement.AddToClassList("unity-text-element");
labelElement.AddToClassList("input-field-label");
inputElement.ClearClassList();
inputElement.AddToClassList("input-field-box");
textElement.ClearClassList();
textElement.AddToClassList("unity-text-element");
textElement.AddToClassList("input-field-text");
RegisterCallback<FocusInEvent>((evt) => { PrepareInput(); });
RegisterCallback<FocusOutEvent>((evt) => { SetDefaultPrompt(); });
}
public void PrepareInput() {
textElement.RemoveFromClassList("input-field-text-d");
if (text != DefaultPrompt) { return; }
text = "";
}
public void SetDefaultPrompt() {
textElement.RemoveFromClassList("input-field-text-d");
if (value != "") { return; }
text = DefaultPrompt;
textElement.AddToClassList("input-field-text-d");
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3bbf7cc5bf423304dbb4eac4f82b2bee
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: