diff --git a/Assets/ModuleCore/ModuleAssets/ModuleAssets.cs b/Assets/ModuleCore/ModuleAssets/ModuleAssets.cs
index c5c23e9..dadf57c 100644
--- a/Assets/ModuleCore/ModuleAssets/ModuleAssets.cs
+++ b/Assets/ModuleCore/ModuleAssets/ModuleAssets.cs
@@ -6,10 +6,9 @@ using UnityEngine;
///
/// 资源模块
///
-public class ModuleAssets {
+public class ModuleAssets : Module> {
+ /// 数据列表
protected List datas = new List();
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// 更改事件
public virtual event Action OnChange;
@@ -32,9 +31,6 @@ public class ModuleAssets {
/// 加载数据
public virtual void Load() { throw new NotImplementedException(); }
- /// 查询数据
- public virtual Data Find(int index) { throw new NotImplementedException(); }
- public virtual Data Find(Guid guid) { throw new NotImplementedException(); }
/// 循环列表
public virtual void ForEach(Action action) => Datas.ForEach(action);
}
diff --git a/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs b/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs
index 503b47f..11da97f 100644
--- a/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs
+++ b/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs
@@ -10,8 +10,6 @@ public abstract class ModuleCamera : MonoBehaviour {
public static readonly LayerMask DefaultLayerMask = ~(1 << 0) | 1 << 0;
/// 必须要初始化
protected abstract void Awake();
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// 相机位置
public abstract Vector3 Position { get; set; }
diff --git a/Assets/ModuleCore/ModuleCore.cs b/Assets/ModuleCore/ModuleCore.cs
deleted file mode 100644
index b896425..0000000
--- a/Assets/ModuleCore/ModuleCore.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-///
-/// 核心模块,实现业务逻辑
-///
-public class ModuleCore : Module {
-
- #region 页面模块
- /// 不会被销毁的全局唯一页面模块 (UIDocument)
- public ModuleUIPage GlobalPage;
- /// 当前的主要页面模块 (UIDocument)
- public ModuleUIPage CurrentPage;
- #endregion
-
-}
diff --git a/Assets/ModuleCore/ModuleInput.meta b/Assets/ModuleCore/ModuleExecute.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleInput.meta
rename to Assets/ModuleCore/ModuleExecute.meta
diff --git a/Assets/ModuleCore/ModuleExecute/ModuleExecute.cs b/Assets/ModuleCore/ModuleExecute/ModuleExecute.cs
new file mode 100644
index 0000000..a3466b8
--- /dev/null
+++ b/Assets/ModuleCore/ModuleExecute/ModuleExecute.cs
@@ -0,0 +1,11 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 执行模块
+///
+public abstract class ModuleExecute {
+ /// 执行
+ public abstract void Compute(Data data);
+}
diff --git a/Assets/ModuleCore/ModuleInput/ModuleInput.cs.meta b/Assets/ModuleCore/ModuleExecute/ModuleExecute.cs.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleInput/ModuleInput.cs.meta
rename to Assets/ModuleCore/ModuleExecute/ModuleExecute.cs.meta
diff --git a/Assets/ModuleCore/ModuleHandle/ModuleHandle.cs b/Assets/ModuleCore/ModuleHandle/ModuleHandle.cs
index 4d49add..39aa9c6 100644
--- a/Assets/ModuleCore/ModuleHandle/ModuleHandle.cs
+++ b/Assets/ModuleCore/ModuleHandle/ModuleHandle.cs
@@ -6,21 +6,19 @@ using UnityEngine;
///
/// 数据处理器模块
///
-public class ModuleHandle {
+public class ModuleHandle : Module> {
/// 数据
- protected T value;
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
+ protected Data value;
/// 当前数据
- public virtual T Current => value;
+ public virtual Data Current => value;
/// 当前数据是否有效
public virtual bool IsValid => Current != null;
/// 改变当前数据 Event
- public virtual event Action OnChange;
+ public virtual event Action OnChange;
/// 改变当前数据
public virtual void Change() => OnChange?.Invoke(value);
/// 改变当前数据
- public virtual void Change(T value) {this.value = value; OnChange?.Invoke(value); }
+ public virtual void Change(Data value) { this.value = value; OnChange?.Invoke(value); }
}
diff --git a/Assets/ModuleCore/ModuleInput/ModuleInput.cs b/Assets/ModuleCore/ModuleInput/ModuleInput.cs
deleted file mode 100644
index cecc06c..0000000
--- a/Assets/ModuleCore/ModuleInput/ModuleInput.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-///
-/// 输入模块
-///
-public abstract class ModuleInput : MonoBehaviour {
- /// 必须要初始化
- protected abstract void Awake();
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
-
- public abstract Vector2 MousePosition { get; }
-}
diff --git a/Assets/ModuleCore/ModuleSingle/ModuleSingle.cs b/Assets/ModuleCore/ModuleSingle/ModuleSingle.cs
index a2f2a42..273ed3a 100644
--- a/Assets/ModuleCore/ModuleSingle/ModuleSingle.cs
+++ b/Assets/ModuleCore/ModuleSingle/ModuleSingle.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@@ -6,15 +7,20 @@ using UnityEngine;
/// 单个独立模块
///
public abstract class ModuleSingle : MonoBehaviour {
- /// 必须要初始化
- protected virtual void Awake() { }
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
+ /// 模块单例
+ public static ModuleSingle I => instance;
+ /// 模块单例
+ protected static ModuleSingle instance;
+ /// 初始化
+ protected virtual void Awake() {
+ if (instance != null) { Destroy(instance.gameObject); }
+ instance = this;
+ }
/// 打开
- public virtual void Open(Data data) { }
+ public virtual void Open(Data data) { throw new NotImplementedException(); }
/// 完成
- public virtual void Complete() { }
+ public virtual void Complete() { throw new NotImplementedException(); }
/// 关闭
- public virtual void Close() { }
+ public virtual void Close() { throw new NotImplementedException(); }
}
diff --git a/Assets/ModuleCore/ModuleSingle/SingleTest.cs b/Assets/ModuleCore/ModuleSingle/SingleTest.cs
new file mode 100644
index 0000000..7d19cf2
--- /dev/null
+++ b/Assets/ModuleCore/ModuleSingle/SingleTest.cs
@@ -0,0 +1,15 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class SingleTest : ModuleSingle {
+ // Start is called before the first frame update
+ void Start() {
+ I.Open("ss");
+ }
+
+ // Update is called once per frame
+ void Update() {
+
+ }
+}
diff --git a/Assets/ModuleCore/ModuleCore.cs.meta b/Assets/ModuleCore/ModuleSingle/SingleTest.cs.meta
similarity index 83%
rename from Assets/ModuleCore/ModuleCore.cs.meta
rename to Assets/ModuleCore/ModuleSingle/SingleTest.cs.meta
index 393d01d..22ed2ff 100644
--- a/Assets/ModuleCore/ModuleCore.cs.meta
+++ b/Assets/ModuleCore/ModuleSingle/SingleTest.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 831967c83916dda4a9cc48e672e4599c
+guid: 7cd3fb8ca73868a46bf1ff920e0cdc13
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/ModuleCore/ModuleVisual/ModuleVisual.cs b/Assets/ModuleCore/ModuleVisual/ModuleVisual.cs
index 22f336c..99a9373 100644
--- a/Assets/ModuleCore/ModuleVisual/ModuleVisual.cs
+++ b/Assets/ModuleCore/ModuleVisual/ModuleVisual.cs
@@ -8,8 +8,6 @@ using UnityEngine;
public abstract class ModuleVisual : MonoBehaviour {
/// 必须要初始化
protected abstract void Awake();
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// 更新可视化内容
public abstract void UpdateVisual(Data data);
@@ -17,12 +15,13 @@ public abstract class ModuleVisual : MonoBehaviour {
public abstract void ReleaseVisual(Data data);
/// 创建可视化内容
- public void Create(ref T value, Transform original, Transform parent) {
+ public static void Create(ref T value, Transform original, Transform parent) {
if (value != null) { return; }
Transform temp = CreateTransform(original, parent);
value = temp.GetComponent();
}
- public Transform CreateTransform(Transform original, Transform parent) {
+ /// 创建Transform
+ public static Transform CreateTransform(Transform original, Transform parent) {
Transform temp = Instantiate(original, parent);
temp.gameObject.SetActive(true);
return temp;
diff --git a/Assets/ModuleCoreUI.meta b/Assets/ModuleCoreUI.meta
new file mode 100644
index 0000000..83195cf
--- /dev/null
+++ b/Assets/ModuleCoreUI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ffdce56728c4f0943b14d5dd2f1a4434
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCoreUI/ModuleUIControl.meta b/Assets/ModuleCoreUI/ModuleUIControl.meta
new file mode 100644
index 0000000..3c368c6
--- /dev/null
+++ b/Assets/ModuleCoreUI/ModuleUIControl.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3e5a783a4eff92d4da56483985f0a2a1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCoreUI/ModuleUIControl/ModuleUIControl.cs b/Assets/ModuleCoreUI/ModuleUIControl/ModuleUIControl.cs
new file mode 100644
index 0000000..02b41cc
--- /dev/null
+++ b/Assets/ModuleCoreUI/ModuleUIControl/ModuleUIControl.cs
@@ -0,0 +1,14 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UIElements;
+
+///
+/// UI控件
+///
+public abstract class ModuleUIControl {
+ /// 绑定的元素
+ public readonly VisualElement element;
+ /// 基础实例
+ public ModuleUIControl(VisualElement element) => this.element = element;
+}
diff --git a/Assets/ModuleCoreUI/ModuleUIControl/ModuleUIControl.cs.meta b/Assets/ModuleCoreUI/ModuleUIControl/ModuleUIControl.cs.meta
new file mode 100644
index 0000000..f5ea9b1
--- /dev/null
+++ b/Assets/ModuleCoreUI/ModuleUIControl/ModuleUIControl.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 634630f2be3c7074db93baa4289bf093
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCoreUI/ModuleUIItem.meta b/Assets/ModuleCoreUI/ModuleUIItem.meta
new file mode 100644
index 0000000..f0af745
--- /dev/null
+++ b/Assets/ModuleCoreUI/ModuleUIItem.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5213b7240a67ca7489050d7d0bc8a935
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCoreUI/ModuleUIItem/ModuleUIItem.cs b/Assets/ModuleCoreUI/ModuleUIItem/ModuleUIItem.cs
new file mode 100644
index 0000000..bf468d1
--- /dev/null
+++ b/Assets/ModuleCoreUI/ModuleUIItem/ModuleUIItem.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UIElements;
+
+///
+/// UI项
+///
+public abstract class ModuleUIItem {
+ /// 选择事件
+ public static event Action OnSelect;
+ /// 触发事件
+ public static void Select(Data data) => OnSelect?.Invoke(data);
+ /// 绑定的数据
+ public readonly Data value;
+ /// 绑定的元素
+ public readonly VisualElement element;
+ /// 基础实例
+ public ModuleUIItem(Data value, VisualElement element) {
+ this.value = value;
+ this.element = element;
+ OnSelect += UIItem_OnSelect;
+ }
+ /// 触发选择事件
+ public virtual void Select() => OnSelect?.Invoke(value);
+ /// 侦听选择事件
+ public virtual void UIItem_OnSelect(Data obj) {
+ if (value.Equals(obj)) { SelectState(); }
+ else { DefaultState(); }
+ }
+ /// 默认状态
+ public virtual void DefaultState() { }
+ /// 选中状态
+ public virtual void SelectState() { }
+ /// 释放
+ public virtual void Release() => OnSelect -= UIItem_OnSelect;
+}
diff --git a/Assets/ModuleCoreUI/ModuleUIItem/ModuleUIItem.cs.meta b/Assets/ModuleCoreUI/ModuleUIItem/ModuleUIItem.cs.meta
new file mode 100644
index 0000000..61c2fe4
--- /dev/null
+++ b/Assets/ModuleCoreUI/ModuleUIItem/ModuleUIItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6b31786a09cb95646a3068a93ad21834
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleUIPage.meta b/Assets/ModuleCoreUI/ModuleUIPage.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleUIPage.meta
rename to Assets/ModuleCoreUI/ModuleUIPage.meta
diff --git a/Assets/ModuleCore/ModuleUIPage/ModuleUIPage.cs b/Assets/ModuleCoreUI/ModuleUIPage/ModuleUIPage.cs
similarity index 87%
rename from Assets/ModuleCore/ModuleUIPage/ModuleUIPage.cs
rename to Assets/ModuleCoreUI/ModuleUIPage/ModuleUIPage.cs
index d62a652..33e0333 100644
--- a/Assets/ModuleCore/ModuleUIPage/ModuleUIPage.cs
+++ b/Assets/ModuleCoreUI/ModuleUIPage/ModuleUIPage.cs
@@ -12,8 +12,6 @@ public abstract class ModuleUIPage : MonoBehaviour {
public VisualElement root => document.rootVisualElement;
/// 必须初始化
protected abstract void Awake();
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// 添加UI元素
public void Add(VisualElement child) => root.Add(child);
/// 查询UI元素
diff --git a/Assets/ModuleCore/ModuleUIPage/ModuleUIPage.cs.meta b/Assets/ModuleCoreUI/ModuleUIPage/ModuleUIPage.cs.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleUIPage/ModuleUIPage.cs.meta
rename to Assets/ModuleCoreUI/ModuleUIPage/ModuleUIPage.cs.meta
diff --git a/Assets/ModuleCore/ModuleUIPage/UIGlobalPage.cs b/Assets/ModuleCoreUI/ModuleUIPage/UIGlobalPage.cs
similarity index 85%
rename from Assets/ModuleCore/ModuleUIPage/UIGlobalPage.cs
rename to Assets/ModuleCoreUI/ModuleUIPage/UIGlobalPage.cs
index bd40c07..4e61f46 100644
--- a/Assets/ModuleCore/ModuleUIPage/UIGlobalPage.cs
+++ b/Assets/ModuleCoreUI/ModuleUIPage/UIGlobalPage.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using UnityEngine;
public class UIGlobalPage : ModuleUIPage {
- protected override void Awake() => ModuleCore.GlobalPage = this;
+ protected override void Awake() { }
private void Start() {
string url = "https://neiyihuizhouilabtest.zgfzjy.cn/api/client/color/categroies";
diff --git a/Assets/ModuleCore/ModuleUIPage/UIGlobalPage.cs.meta b/Assets/ModuleCoreUI/ModuleUIPage/UIGlobalPage.cs.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleUIPage/UIGlobalPage.cs.meta
rename to Assets/ModuleCoreUI/ModuleUIPage/UIGlobalPage.cs.meta
diff --git a/Assets/ModuleCore/ModuleUIPanel.meta b/Assets/ModuleCoreUI/ModuleUIPanel.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleUIPanel.meta
rename to Assets/ModuleCoreUI/ModuleUIPanel.meta
diff --git a/Assets/ModuleCore/ModuleUIPanel/ModuleUIPanel.cs b/Assets/ModuleCoreUI/ModuleUIPanel/ModuleUIPanel.cs
similarity index 88%
rename from Assets/ModuleCore/ModuleUIPanel/ModuleUIPanel.cs
rename to Assets/ModuleCoreUI/ModuleUIPanel/ModuleUIPanel.cs
index d89d701..2b4e39f 100644
--- a/Assets/ModuleCore/ModuleUIPanel/ModuleUIPanel.cs
+++ b/Assets/ModuleCoreUI/ModuleUIPanel/ModuleUIPanel.cs
@@ -12,8 +12,6 @@ public abstract class ModuleUIPanel : MonoBehaviour {
public ModuleUIPage ModuleUIPage;
/// 可选初始化
protected virtual void Awake() { }
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
public abstract VisualElement Element { get; }
}
@@ -25,8 +23,6 @@ public abstract class UIItem {
public static event Action OnSelect;
/// 触发事件
public static void Select(Data data) => OnSelect?.Invoke(data);
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// 绑定的数据
public readonly Data value;
/// 绑定的元素
diff --git a/Assets/ModuleCore/ModuleUIPanel/ModuleUIPanel.cs.meta b/Assets/ModuleCoreUI/ModuleUIPanel/ModuleUIPanel.cs.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleUIPanel/ModuleUIPanel.cs.meta
rename to Assets/ModuleCoreUI/ModuleUIPanel/ModuleUIPanel.cs.meta
diff --git a/Assets/ModuleCore/ModuleUIPanel/UIGlobalPage.meta b/Assets/ModuleCoreUI/ModuleUIPanel/UIGlobalPage.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleUIPanel/UIGlobalPage.meta
rename to Assets/ModuleCoreUI/ModuleUIPanel/UIGlobalPage.meta
diff --git a/Assets/ModuleCore/ModuleUIWindow.meta b/Assets/ModuleCoreUI/ModuleUIWindow.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleUIWindow.meta
rename to Assets/ModuleCoreUI/ModuleUIWindow.meta
diff --git a/Assets/ModuleCore/ModuleUIWindow/ModuleUIWindow.cs b/Assets/ModuleCoreUI/ModuleUIWindow/ModuleUIWindow.cs
similarity index 87%
rename from Assets/ModuleCore/ModuleUIWindow/ModuleUIWindow.cs
rename to Assets/ModuleCoreUI/ModuleUIWindow/ModuleUIWindow.cs
index 4026132..bd6b6fa 100644
--- a/Assets/ModuleCore/ModuleUIWindow/ModuleUIWindow.cs
+++ b/Assets/ModuleCoreUI/ModuleUIWindow/ModuleUIWindow.cs
@@ -12,8 +12,6 @@ public abstract class ModuleUIWindow : MonoBehaviour {
public ModuleUIPage ModuleUIPage;
/// 必须初始化
public abstract void Awake();
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// 绑定的根元素
public abstract VisualElement Element { get; }
diff --git a/Assets/ModuleCore/ModuleUIWindow/ModuleUIWindow.cs.meta b/Assets/ModuleCoreUI/ModuleUIWindow/ModuleUIWindow.cs.meta
similarity index 100%
rename from Assets/ModuleCore/ModuleUIWindow/ModuleUIWindow.cs.meta
rename to Assets/ModuleCoreUI/ModuleUIWindow/ModuleUIWindow.cs.meta
diff --git a/Assets/ModuleFixed/ModuleFixed.cs b/Assets/ModuleFixed/ModuleFixed.cs
index 9eec4eb..0e11a22 100644
--- a/Assets/ModuleFixed/ModuleFixed.cs
+++ b/Assets/ModuleFixed/ModuleFixed.cs
@@ -6,6 +6,5 @@ using UnityEngine;
/// 固定数据物体模块
///
public abstract class ModuleFixed : MonoBehaviour {
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
+
}
diff --git a/Assets/ModulePrefab/ModulePrefab.cs b/Assets/ModulePrefab/ModulePrefab.cs
index ecf68d9..a1f1843 100644
--- a/Assets/ModulePrefab/ModulePrefab.cs
+++ b/Assets/ModulePrefab/ModulePrefab.cs
@@ -8,8 +8,6 @@ using UnityEngine;
public abstract class ModulePrefab : MonoBehaviour {
/// 关联的数据
protected Data value;
- /// 核心模块
- protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// 关联的数据
public virtual Data Value => value;
diff --git a/Assets/ModuleTools/LayerMaskTool.cs b/Assets/ModuleTools/LayerMaskTool.cs
new file mode 100644
index 0000000..764124f
--- /dev/null
+++ b/Assets/ModuleTools/LayerMaskTool.cs
@@ -0,0 +1,17 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 图层遮罩工具
+///
+public static class LayerMaskTool {
+ ///// 板片
+ //public static readonly LayerMask Plate = 1 << LayerMask.NameToLayer("Plate");
+ ///// 形状
+ //public static readonly LayerMask Shape = 1 << LayerMask.NameToLayer("Shape");
+ ///// 安排点
+ //public static readonly LayerMask Arrange = 1 << LayerMask.NameToLayer("Arrange");
+ ///// 模特
+ //public static readonly LayerMask Model = 1 << LayerMask.NameToLayer("Model");
+}
diff --git a/Assets/ModuleTools/LayerMaskTool.cs.meta b/Assets/ModuleTools/LayerMaskTool.cs.meta
new file mode 100644
index 0000000..becfc83
--- /dev/null
+++ b/Assets/ModuleTools/LayerMaskTool.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d32659481db1a124c9b564f885ee75a8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleTools/LoopIndexTool.cs b/Assets/ModuleTools/LoopIndexTool.cs
new file mode 100644
index 0000000..e3e14f3
--- /dev/null
+++ b/Assets/ModuleTools/LoopIndexTool.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public static class LoopIndexTool {
+ /// 头尾循环标准化索引
+ public static Data LoopIndex(this List list, int index) {
+ return list[LoopIndex(index, list.Count)];
+ }
+ /// 头尾循环标准化索引
+ public static Data LoopIndex(this Data[] array, int index) {
+ return array[LoopIndex(index, array.Length)];
+ }
+ /// 头尾循环标准化索引
+ public static int LoopIndex(int index, int maxIndex) {
+ if (maxIndex == 0) { Debug.LogError("错误索引:maxIndex = 0"); return 0; }
+ if (index < 0) { return LoopIndex(index + maxIndex, maxIndex); }
+ if (index >= maxIndex) { return LoopIndex(index - maxIndex, maxIndex); }
+ return index;
+ }
+}
diff --git a/Assets/ModuleTools/LoopIndexTool.cs.meta b/Assets/ModuleTools/LoopIndexTool.cs.meta
new file mode 100644
index 0000000..107f610
--- /dev/null
+++ b/Assets/ModuleTools/LoopIndexTool.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f410a5e521f087048804a823d1c02e6c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/RenderingPipeline/Feature.meta b/Assets/RenderingPipeline/Feature.meta
new file mode 100644
index 0000000..8efc3d7
--- /dev/null
+++ b/Assets/RenderingPipeline/Feature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 821f2aa73c2761649a4466ee441ad752
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/RenderingPipeline/Feature/OutlineRendererFeature.cs b/Assets/RenderingPipeline/Feature/OutlineRendererFeature.cs
new file mode 100644
index 0000000..3d8cd39
--- /dev/null
+++ b/Assets/RenderingPipeline/Feature/OutlineRendererFeature.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Rendering;
+using UnityEngine.Rendering.Universal;
+
+public class OutlineRendererFeature : ScriptableRendererFeature {
+ /// 渲染设置
+ public OutlineSettings settings;
+ /// 渲染Event
+ public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
+ /// 渲染通道
+ private OutlineRendererPass OutlineBlendRenderPass;
+ public override void Create() {
+ OutlineBlendRenderPass = new OutlineRendererPass(settings);
+ OutlineBlendRenderPass.renderPassEvent = renderPassEvent;
+ }
+ public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) {
+ OutlineBlendRenderPass.Setup(renderingData);
+ renderer.EnqueuePass(OutlineBlendRenderPass);
+ Dispose();
+ }
+
+ #region 渲染设置
+ [Serializable]
+ public class OutlineSettings {
+ [Tooltip("渲染对象")] public float size = 5;
+ [Tooltip("渲染对象")] public Material unlit;
+ [Tooltip("轮廓材质")] public Material outline;
+ [Tooltip("混合颜色")] public Material color;
+ [Tooltip("渲染对象")] public List RenderObjs = new List();
+ /// 是否有效设置
+ public bool isValid => unlit != null && outline != null && color != null;
+ }
+ #endregion
+
+ #region 渲染通道
+ public class OutlineRendererPass : ScriptableRenderPass {
+ public const string ProfilerTag = "OutlineBlend";
+ /// 临时纹理
+ public RTHandle TempRTHandel;
+ /// 轮廓纹理
+ public RTHandle OutlineRTHandel;
+ /// 渲染设置
+ public OutlineSettings settings;
+ /// 渲染通道
+ public OutlineRendererPass(OutlineSettings settings) {
+ this.settings = settings;
+ }
+ /// 渲染前设置
+ public void Setup(in RenderingData renderingData) {
+ if (!settings.isValid) { return; }
+ settings.outline.SetFloat("_Size", settings.size);
+ RenderTextureDescriptor descriptor = renderingData.cameraData.cameraTargetDescriptor;
+ descriptor.depthBufferBits = (int)DepthBits.None;
+ RenderingUtils.ReAllocateIfNeeded(ref OutlineRTHandel, descriptor, name: "OutlineRT");
+ RenderingUtils.ReAllocateIfNeeded(ref TempRTHandel, descriptor, name: "TempRT");
+ }
+ public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) {
+ if (!settings.isValid) { return; }
+ CommandBuffer command = CommandBufferPool.Get(ProfilerTag);
+ //在临时纹理上渲染物体的轮廓
+ CoreUtils.SetRenderTarget(command, TempRTHandel);
+ DrawRenderer(command, settings.unlit);
+ settings.outline.SetTexture("_MainTex", TempRTHandel);
+ Blitter.BlitTexture(command, TempRTHandel, OutlineRTHandel, settings.outline, 0);
+ //轮廓+颜色 混合到源上
+ settings.color.SetTexture("_MainTex", OutlineRTHandel);
+ Blit(command, ref renderingData, settings.color);
+ context.ExecuteCommandBuffer(command);
+ CommandBufferPool.Release(command);
+ TempRTHandel.Release();
+ OutlineRTHandel?.Release();
+ }
+ public void DrawRenderer(CommandBuffer command, Material material) {
+ settings.RenderObjs.RemoveAll(obj => obj == null);
+ for (int i = 0; i < settings.RenderObjs.Count; i++) {
+ Transform obj = settings.RenderObjs[i];
+ if (!obj.gameObject.activeInHierarchy) { continue; }
+ DrawRenderer(obj, command, material);
+ }
+ }
+ public void DrawRenderer(Transform obj, CommandBuffer command, Material material) {
+ Renderer[] renderers = obj.GetComponentsInChildren();
+ for (int i = 0; i < renderers.Length; i++) {
+ command.DrawRenderer(renderers[i], material, 0, 0);
+ }
+ if (obj.TryGetComponent(out Renderer renderer)) {
+ command.DrawRenderer(renderer, material, 0, 0);
+ }
+ }
+ }
+ #endregion
+
+}
diff --git a/Assets/RenderingPipeline/Feature/OutlineRendererFeature.cs.meta b/Assets/RenderingPipeline/Feature/OutlineRendererFeature.cs.meta
new file mode 100644
index 0000000..6a1fdb5
--- /dev/null
+++ b/Assets/RenderingPipeline/Feature/OutlineRendererFeature.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4a94c64b69e2e9d42af70e81f06c52a1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/UIControl/Runtime/MUSliderHorizontal.cs b/Packages/UIControl/Runtime/MUSliderHorizontal.cs
index 148aaaf..5424532 100644
--- a/Packages/UIControl/Runtime/MUSliderHorizontal.cs
+++ b/Packages/UIControl/Runtime/MUSliderHorizontal.cs
@@ -106,21 +106,15 @@ namespace MuHua {
tracker.style.width = CurrentPosition;
UpdateFloatField();
}
- internal void UpdateFloatField(ChangeEvent evt) {
- float value = Mathf.Clamp(evt.newValue, MinValue, MaxValue);
- slidingValue = (value - MinValue) / (MaxValue - MinValue);
- tracker.style.width = CurrentPosition;
- SlidingValueChanged?.Invoke(Value);
- }
internal void UpdateFloatField(bool value) {
isDisplayInput = value;
floatField.style.display = isDisplayInput ? DisplayStyle.Flex : DisplayStyle.None;
}
internal void UpdateFloatField() {
- floatField.SetValueWithoutNotify(Value);
+ floatField.value = Value;
}
internal float UpdateValue() {
- float value = Mathf.Lerp(MinValue, MaxValue, SlidingValue);
+ float value = (MaxValue - MinValue) * SlidingValue;
if (dataType == RoundDataType.保留两位小数) { value = (float)Math.Round(value, 2); }
if (dataType == RoundDataType.整数) { value = Mathf.FloorToInt(value); }
return Mathf.Clamp(value, MinValue, MaxValue);
@@ -171,8 +165,6 @@ namespace MuHua {
dragger.RegisterCallback((evt) => isDragger = false);
dragger.RegisterCallback((evt) => isDragger = false);
- floatField.RegisterCallback>(UpdateFloatField);
-
container.RegisterCallback(ContainerDown);
}
private void DraggerDown(PointerDownEvent evt) {
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index 428fcc8..134210e 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -752,7 +752,7 @@ PlayerSettings:
embeddedLinuxEnableGamepadInput: 1
hmiLogStartupTiming: 0
hmiCpuConfiguration:
- apiCompatibilityLevel: 6
+ apiCompatibilityLevel: 3
activeInputHandler: 0
windowsGamepadBackendHint: 0
cloudProjectId: