diff --git a/Assets/ModuleControl.meta b/Assets/ModuleControl.meta new file mode 100644 index 0000000..fcd831e --- /dev/null +++ b/Assets/ModuleControl.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e350a719b66eb849983fdce5dcb2025 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit.meta b/Assets/ModuleControl/ViewInputUnit.meta new file mode 100644 index 0000000..50353fc --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5ae9284505c4b940b508a7f812159eb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/VIUBezierMobile.cs b/Assets/ModuleControl/ViewInputUnit/VIUBezierMobile.cs new file mode 100644 index 0000000..e90ebb9 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUBezierMobile.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VIUBezierMobile : ModuleViewInputUnit { + private Vector3 mousePosition; + private Vector3 originalPosition; + private readonly ModuleViewCamera viewCamera; + private ModulePlateDesign PlateDesign => ModuleCore.I.PlateDesign; + public VIUBezierMobile(ModuleViewCamera viewCamera) { + this.viewCamera = viewCamera; + } + public override void DownMouse(DataMouseInput data) { + PlateDesign.SelectBezierPoint(data.ScreenPosition); + if (!PlateDesign.IsValidBezierPoint) { return; } + mousePosition = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + originalPosition = PlateDesign.BezierPointPosition; + } + public override void DragMouse(DataMouseInput data) { + if (!PlateDesign.IsValidBezierPoint) { return; } + Vector3 current = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + Vector3 offset = current - mousePosition; + PlateDesign.ChangeBezierPoint(originalPosition + offset); + } + public override void ReleaseMouse(DataMouseInput data) { + PlateDesign.ReleaseBezierPoint(); + } + public override void ScrollWheel(DataMouseInput data) { + PlateDesign.ReleaseBezierPoint(); + } +} diff --git a/Assets/ModuleControl/ViewInputUnit/VIUBezierMobile.cs.meta b/Assets/ModuleControl/ViewInputUnit/VIUBezierMobile.cs.meta new file mode 100644 index 0000000..7879d56 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUBezierMobile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a819c02b79cf50242803b88efbb134c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/VIUCameraMobile.cs b/Assets/ModuleControl/ViewInputUnit/VIUCameraMobile.cs new file mode 100644 index 0000000..67a1fad --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUCameraMobile.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VIUCameraMobile : ModuleViewInputUnit { + private Vector3 mousePosition; + private Vector3 originalPosition; + private readonly ModuleViewCamera viewCamera; + public VIUCameraMobile(ModuleViewCamera viewCamera) { + this.viewCamera = viewCamera; + } + public override void DownMouse(DataMouseInput data) { + mousePosition = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + originalPosition = viewCamera.Position; + } + public override void DragMouse(DataMouseInput data) { + Vector3 current = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + Vector3 offset = current - mousePosition; + viewCamera.Position = originalPosition + offset; + } + public override void ReleaseMouse(DataMouseInput data) { + + } + public override void ScrollWheel(DataMouseInput data) { + + } +} diff --git a/Assets/ModuleControl/ViewInputUnit/VIUCameraMobile.cs.meta b/Assets/ModuleControl/ViewInputUnit/VIUCameraMobile.cs.meta new file mode 100644 index 0000000..b271585 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUCameraMobile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ba32fb2f11bf1948bdaae8823a824b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/VIUCameraRotate.cs b/Assets/ModuleControl/ViewInputUnit/VIUCameraRotate.cs new file mode 100644 index 0000000..56b9a01 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUCameraRotate.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VIUCameraRotate : ModuleViewInputUnit { + private float mouseRotate; + private float originalRotate; + private readonly ModuleViewCamera viewCamera; + public VIUCameraRotate(ModuleViewCamera viewCamera) { + this.viewCamera = viewCamera; + } + public override void DownMouse(DataMouseInput data) { + mouseRotate = viewCamera.ScreenToViewPosition(data.ScreenPosition).x; + originalRotate = viewCamera.EulerAngles.y; + } + public override void DragMouse(DataMouseInput data) { + float current = viewCamera.ScreenToViewPosition(data.ScreenPosition).x; + float offset = (current - mouseRotate) * 360; + viewCamera.EulerAngles = new Vector3(0, originalRotate - offset, 0); + } +} diff --git a/Assets/ModuleControl/ViewInputUnit/VIUCameraRotate.cs.meta b/Assets/ModuleControl/ViewInputUnit/VIUCameraRotate.cs.meta new file mode 100644 index 0000000..d486031 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUCameraRotate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 535c46cee34ae5e49802e537ad5a7a13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/VIUCameraScale.cs b/Assets/ModuleControl/ViewInputUnit/VIUCameraScale.cs new file mode 100644 index 0000000..3e48534 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUCameraScale.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VIUCameraScale : ModuleViewInputUnit { + public enum ScaleType { Scale, Orthographic } + private readonly ScaleType scaleType; + private readonly ModuleViewCamera viewCamera; + public VIUCameraScale(ModuleViewCamera viewCamera, ScaleType scaleType = ScaleType.Scale) { + this.viewCamera = viewCamera; + this.scaleType = scaleType; + } + public override void DownMouse(DataMouseInput data) { + + } + public override void DragMouse(DataMouseInput data) { + + } + public override void ReleaseMouse(DataMouseInput data) { + + } + public override void ScrollWheel(DataMouseInput data) { + if (scaleType == ScaleType.Scale) { + float size = viewCamera.LocalScale.x + data.ScrollWheel; + size = Mathf.Clamp(size, 0.5f, 4); + Vector3 localScale = new Vector3(size, size, size); + viewCamera.LocalScale = Vector3.Lerp(viewCamera.LocalScale, localScale, Time.deltaTime * 20); + } + if (scaleType == ScaleType.Orthographic) { + float size = viewCamera.OrthographicSize + data.ScrollWheel; + size = Mathf.Clamp(size, 0.1f, 4); + viewCamera.OrthographicSize = Mathf.Lerp(viewCamera.OrthographicSize, size, Time.deltaTime * 20); + } + } +} diff --git a/Assets/ModuleControl/ViewInputUnit/VIUCameraScale.cs.meta b/Assets/ModuleControl/ViewInputUnit/VIUCameraScale.cs.meta new file mode 100644 index 0000000..41dba13 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUCameraScale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e00fcc9528ea97040bcdee04b0279778 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/VIUDesignPointInsert.cs b/Assets/ModuleControl/ViewInputUnit/VIUDesignPointInsert.cs new file mode 100644 index 0000000..432fff1 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUDesignPointInsert.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VIUDesignPointInsert : ModuleViewInputUnit { + private readonly ModuleViewCamera viewCamera; + private ModulePlateDesign PlateDesign => ModuleCore.I.PlateDesign; + public VIUDesignPointInsert(ModuleViewCamera viewCamera) { + this.viewCamera = viewCamera; + } + public override void DownMouse(DataMouseInput data) { + PlateDesign.InsertDesignPoint(data.ScreenPosition); + } +} diff --git a/Assets/ModuleControl/ViewInputUnit/VIUDesignPointInsert.cs.meta b/Assets/ModuleControl/ViewInputUnit/VIUDesignPointInsert.cs.meta new file mode 100644 index 0000000..8079b18 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUDesignPointInsert.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b8b6a3b0a7e1e649bdcd0615dfa80ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/VIUDesignPointMobile.cs b/Assets/ModuleControl/ViewInputUnit/VIUDesignPointMobile.cs new file mode 100644 index 0000000..5f1f467 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUDesignPointMobile.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VIUDesignPointMobile : ModuleViewInputUnit { + private Vector3 mousePosition; + private Vector3 originalPosition; + private readonly ModuleViewCamera viewCamera; + private ModulePlateDesign PlateDesign => ModuleCore.I.PlateDesign; + public VIUDesignPointMobile(ModuleViewCamera viewCamera) { + this.viewCamera = viewCamera; + } + public override void DownMouse(DataMouseInput data) { + PlateDesign.SelectDesignPoint(data.ScreenPosition); + if (!PlateDesign.IsValidDesignPoint) { return; } + mousePosition = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + originalPosition = PlateDesign.DesignPointPosition; + } + public override void DragMouse(DataMouseInput data) { + if (!PlateDesign.IsValidDesignPoint) { return; } + Vector3 current = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + Vector3 offset = current - mousePosition; + PlateDesign.ChangeDesignPoint(originalPosition + offset); + } + public override void ReleaseMouse(DataMouseInput data) { + PlateDesign.ReleaseDesignPoint(); + } + public override void ScrollWheel(DataMouseInput data) { + PlateDesign.ReleaseDesignPoint(); + } +} diff --git a/Assets/ModuleControl/ViewInputUnit/VIUDesignPointMobile.cs.meta b/Assets/ModuleControl/ViewInputUnit/VIUDesignPointMobile.cs.meta new file mode 100644 index 0000000..d0e49fc --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUDesignPointMobile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb31bfbd0ef82f24b823836852bd846c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/VIUEdgePointAdd.cs b/Assets/ModuleControl/ViewInputUnit/VIUEdgePointAdd.cs new file mode 100644 index 0000000..5f76fd7 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUEdgePointAdd.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VIUEdgePointAdd : ModuleViewInputUnit { + private readonly ModuleViewCamera viewCamera; + private ModulePlateDesign PlateDesign => ModuleCore.I.PlateDesign; + public VIUEdgePointAdd(ModuleViewCamera viewCamera) { + this.viewCamera = viewCamera; + } + public override void DownMouse(DataMouseInput data) { + PlateDesign.InsertEdgePoint(data.ScreenPosition); + } + public override void MoveMouse(DataMouseInput data) { + //Vector3 position = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + //Vector3 worldPosition = position + viewCamera.CameraWorldPosition; + //worldPosition.z = 0; + //Collider2D[] colliders = Physics2D.OverlapCircleAll(worldPosition, range, DefaultLayerMask); + //if (colliders.Length == 0) { return; } + //edgePoint = colliders[0].GetComponentInParent(); + } +} diff --git a/Assets/ModuleControl/ViewInputUnit/VIUEdgePointAdd.cs.meta b/Assets/ModuleControl/ViewInputUnit/VIUEdgePointAdd.cs.meta new file mode 100644 index 0000000..b9e3745 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUEdgePointAdd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c0e8f369912dbb4e9d906ca3d14a628 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/VIUEdgePointMobile.cs b/Assets/ModuleControl/ViewInputUnit/VIUEdgePointMobile.cs new file mode 100644 index 0000000..057251d --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUEdgePointMobile.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VIUEdgePointMobile : ModuleViewInputUnit { + private Vector3 mousePosition; + private Vector3 originalPosition; + private readonly ModuleViewCamera viewCamera; + private ModulePlateDesign PlateDesign => ModuleCore.I.PlateDesign; + public VIUEdgePointMobile(ModuleViewCamera viewCamera) { + this.viewCamera = viewCamera; + } + public override void DownMouse(DataMouseInput data) { + PlateDesign.SelectEdgePoint(data.ScreenPosition); + if (!PlateDesign.IsValidEdgePoint) { return; } + mousePosition = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + originalPosition = PlateDesign.EdgePointPosition; + } + public override void DragMouse(DataMouseInput data) { + if (!PlateDesign.IsValidEdgePoint) { return; } + Vector3 current = viewCamera.ScreenToWorldPosition(data.ScreenPosition); + Vector3 offset = current - mousePosition; + PlateDesign.ChangeEdgePoint(originalPosition + offset); + } + public override void ReleaseMouse(DataMouseInput data) { + PlateDesign.ReleaseEdgePoint(); + } + public override void ScrollWheel(DataMouseInput data) { + PlateDesign.ReleaseEdgePoint(); + } +} diff --git a/Assets/ModuleControl/ViewInputUnit/VIUEdgePointMobile.cs.meta b/Assets/ModuleControl/ViewInputUnit/VIUEdgePointMobile.cs.meta new file mode 100644 index 0000000..9155460 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/VIUEdgePointMobile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae2a8f6a151f160479bd605f2c407a8d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleControl/ViewInputUnit/ViewInputUnit.cs b/Assets/ModuleControl/ViewInputUnit/ViewInputUnit.cs new file mode 100644 index 0000000..0e2a5b3 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/ViewInputUnit.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class ModuleViewInputUnit { + /// 核心模块 + protected virtual ModuleCore ModuleCore => ModuleCore.I; + /// 按下鼠标左键 + public virtual void DownMouse(DataMouseInput data) { } + /// 拖拽鼠标左键 + public virtual void DragMouse(DataMouseInput data) { } + /// 释放鼠标左键 + public virtual void ReleaseMouse(DataMouseInput data) { } + /// 移动鼠标 + public virtual void MoveMouse(DataMouseInput data) { } + /// 鼠标滚轮 + public virtual void ScrollWheel(DataMouseInput data) { } +} diff --git a/Assets/ModuleControl/ViewInputUnit/ViewInputUnit.cs.meta b/Assets/ModuleControl/ViewInputUnit/ViewInputUnit.cs.meta new file mode 100644 index 0000000..249b0c1 --- /dev/null +++ b/Assets/ModuleControl/ViewInputUnit/ViewInputUnit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15cfd3c63263fc14fbb47c12c18447ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAgent.cs b/Assets/ModuleCore/ModuleAgent.cs index d45937d..0925130 100644 --- a/Assets/ModuleCore/ModuleAgent.cs +++ b/Assets/ModuleCore/ModuleAgent.cs @@ -1,10 +1,9 @@ -using System; using System.Collections; using System.Collections.Generic; using UnityEngine; -/// 代理模块 public abstract class ModuleAgent : MonoBehaviour { - public abstract void AgentNetwork(DataNetwork data); - public abstract void AgentLoadingNetwork(DataNetwork data); + protected abstract void Awake(); + + protected virtual ModuleCore ModuleCore => ModuleCore.I; } diff --git a/Assets/ModuleCore/ModuleAgent.cs.meta b/Assets/ModuleCore/ModuleAgent.cs.meta index 3ef9175..b36c685 100644 --- a/Assets/ModuleCore/ModuleAgent.cs.meta +++ b/Assets/ModuleCore/ModuleAgent.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 84e24d973daa9564db536bd009ec11cc +guid: 7922d1530e2c0f94f9ef1bdff77aa89b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ModuleCore/ModuleAlgorithm.cs b/Assets/ModuleCore/ModuleAlgorithm.cs new file mode 100644 index 0000000..e3732b7 --- /dev/null +++ b/Assets/ModuleCore/ModuleAlgorithm.cs @@ -0,0 +1,10 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class ModuleAlgorithm { + /// 核心模块 + protected virtual ModuleCore ModuleCore => ModuleCore.I; + /// 执行算法 + public abstract void Compute(Data data); +} diff --git a/Assets/ModuleCore/ModuleAlgorithm.cs.meta b/Assets/ModuleCore/ModuleAlgorithm.cs.meta new file mode 100644 index 0000000..c103c3b --- /dev/null +++ b/Assets/ModuleCore/ModuleAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 080083324a409f24788f08ea7c670304 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAssets.cs b/Assets/ModuleCore/ModuleAssets.cs new file mode 100644 index 0000000..1a8a709 --- /dev/null +++ b/Assets/ModuleCore/ModuleAssets.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class ModuleAssets : MonoBehaviour { + [SerializeField] protected List assets; + /// 资产列表 + public virtual List Assets => assets; + /// 必须要初始化 + protected abstract void Awake(); + /// 核心模块 + protected virtual ModuleCore ModuleCore => ModuleCore.I; + /// 循环列表 + public abstract void ForEach(Action action); +} diff --git a/Assets/ModuleCore/ModuleAssets.cs.meta b/Assets/ModuleCore/ModuleAssets.cs.meta new file mode 100644 index 0000000..e8d77c7 --- /dev/null +++ b/Assets/ModuleCore/ModuleAssets.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 424b00686a91cd64989e546f204155a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleCore.cs b/Assets/ModuleCore/ModuleCore.cs index 87aa514..8eed6df 100644 --- a/Assets/ModuleCore/ModuleCore.cs +++ b/Assets/ModuleCore/ModuleCore.cs @@ -4,36 +4,43 @@ using System.Collections.Generic; using UnityEngine; using MuHua; -/// -/// 核心模块,提供全部的抽象接口 -/// public class ModuleCore : Module { - /*---------------------------------------------功能模块--------------------------------------------------------*/ - /// 视频模块 - public ModuleVideo ModuleVideo; - /// 场景模块 - public ModuleScene ModuleScene; - /// 代理模块 - public ModuleAgent ModuleAgent; - /*---------------------------------------------页面模块--------------------------------------------------------*/ - /// 当前的主要页面模块 (UIDocument) - public ModuleUIPage CurrentPage; + + #region 资产模块 + /// 预设模板资产 + public ModuleAssets PresetsPlateAssets; + #endregion + + #region 页面模块 /// 不会被销毁的全局唯一页面模块 (UIDocument) public ModuleUIPage GlobalPage; - /*---------------------------------------------页面模块--------------------------------------------------------*/ - /// 加载页面模块 (回调Action) - public ModuleUIPanel LoadingPanel; - /// 弹出提示模块 - public ModuleUIPanel PopupPromptPanel; - /// 弹出窗口模块 - public ModuleUIPanel PopupWindowPanel; + /// 当前的主要页面模块 (UIDocument) + public ModuleUIPage CurrentPage; + /// 预设模板窗口 (回调Action) + public ModuleUIWindow PresetsPlateWindow; + #endregion - /// 设备视频交互模块 - public ModuleUIPanel VideoPanel; - /// 设备视频图文交互模块 - public ModuleUIPanel VideoImagePanel; - /// 学习视频模块 (回调Action) - public ModuleUIPanel LearningVideoPanel; - /// 全屏播放视频模块 (回调Action) - public ModuleUIPanel FullScreenVideoPanel; + #region 功能模块 + /// 代理模块 + public ModuleAgent ModuleAgent; + /// 根据设计点生成边缘算法模块 + public ModuleAlgorithm GenerateEdge = new AlgorithmGenerateEdge(); + /// 边缘排序算法模块 + public ModuleAlgorithm EdgeSort = new AlgorithmEdge(); + /// 多边形算法模块 + public ModuleAlgorithm Polygon = new AlgorithmPolygon(); + /// 板片设计模块 + public ModulePlateDesign PlateDesign; + /// 板片设计相机视图 + public ModuleViewCamera PlateDesignViewCamera; + /// 板片烘焙相机视图 + public ModuleViewCamera PlateBakingViewCamera; + #endregion + + #region 控制模块 + /// 板片设计输入模块 + public ModuleViewInput PlateDesignViewInput; + /// 板片烘焙输入模块 + public ModuleViewInput PlateBakingViewInput; + #endregion } diff --git a/Assets/ModuleCore/ModuleCore.cs.meta b/Assets/ModuleCore/ModuleCore.cs.meta index 896642f..825325d 100644 --- a/Assets/ModuleCore/ModuleCore.cs.meta +++ b/Assets/ModuleCore/ModuleCore.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 98eb035eb7e5cc14694ed78d4215f579 +guid: 8b523f207d584d649bb29f4a06b5428d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ModuleCore/ModulePlateDesign.cs b/Assets/ModuleCore/ModulePlateDesign.cs new file mode 100644 index 0000000..fb01ef4 --- /dev/null +++ b/Assets/ModuleCore/ModulePlateDesign.cs @@ -0,0 +1,61 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class ModulePlateDesign : MonoBehaviour { + /// 必须初始化 + protected virtual void Awake() { + ModuleCore.PlateDesign = this; + } + /// 核心模块 + protected virtual ModuleCore ModuleCore => ModuleCore.I; + /// 视图相机模块 + protected virtual ModuleViewCamera ViewCamera => ModuleCore.PlateDesignViewCamera; + + /// 添加一个板片数据 + public abstract void AddData(DataPlate data); + + #region 边缘点操作 + /// 是否有效的边缘点 + public abstract bool IsValidEdgePoint { get; } + /// 返回当前边缘点位置 + public abstract Vector3 EdgePointPosition { get; } + /// 选中一个边缘点 + public abstract void SelectEdgePoint(Vector3 screenPosition); + /// 改变边缘点位置 + public abstract void ChangeEdgePoint(Vector3 localPosition); + /// 插入一个边缘点 + public abstract void InsertEdgePoint(Vector3 screenPosition); + /// 释放边缘点 + public abstract void ReleaseEdgePoint(); + #endregion + + #region 设计点操作 + /// 是否有效的设计点 + public abstract bool IsValidDesignPoint { get; } + /// 返回当前设计点位置 + public abstract Vector3 DesignPointPosition { get; } + /// 选中一个设计点 + public abstract void SelectDesignPoint(Vector3 screenPosition); + /// 改变设计点位置 + public abstract void ChangeDesignPoint(Vector3 localPosition); + /// 插入一个设计点 + public abstract void InsertDesignPoint(Vector3 screenPosition); + /// 释放设计点 + public abstract void ReleaseDesignPoint(); + #endregion + + #region 贝塞尔曲线操作 + /// 是否有效的贝塞尔点 + public abstract bool IsValidBezierPoint { get; } + /// 返回当前贝塞尔点位置 + public abstract Vector3 BezierPointPosition { get; } + /// 选中一个贝塞尔点 + public abstract void SelectBezierPoint(Vector3 screenPosition); + /// 改变贝塞尔点位置 + public abstract void ChangeBezierPoint(Vector3 localPosition); + /// 释放贝塞尔点 + public abstract void ReleaseBezierPoint(); + #endregion + +} diff --git a/Assets/ModuleCore/ModulePlateDesign.cs.meta b/Assets/ModuleCore/ModulePlateDesign.cs.meta new file mode 100644 index 0000000..ed9c240 --- /dev/null +++ b/Assets/ModuleCore/ModulePlateDesign.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5b9eb7c85f467e42a3632003cc5c1c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleScene.cs b/Assets/ModuleCore/ModuleScene.cs index 3342080..63297b6 100644 --- a/Assets/ModuleCore/ModuleScene.cs +++ b/Assets/ModuleCore/ModuleScene.cs @@ -5,9 +5,9 @@ using UnityEngine; public abstract class ModuleScene : MonoBehaviour { protected virtual ModuleCore ModuleCore => ModuleCore.I; protected virtual void Awake() { - if (ModuleCore.ModuleScene != null) { Destroy(gameObject); return; } - ModuleCore.ModuleScene = this; - DontDestroyOnLoad(gameObject); + //if (ModuleCore.ModuleScene != null) { Destroy(gameObject); return; } + //ModuleCore.ModuleScene = this; + //DontDestroyOnLoad(gameObject); } public virtual void LoadSceneAsync(string scene) { StartCoroutine(ILoadSceneAsync(scene)); diff --git a/Assets/ModuleCore/ModuleUIPage.cs b/Assets/ModuleCore/ModuleUIPage.cs index 9f88a4e..f3bd5ad 100644 --- a/Assets/ModuleCore/ModuleUIPage.cs +++ b/Assets/ModuleCore/ModuleUIPage.cs @@ -5,15 +5,14 @@ using UnityEngine.UIElements; public abstract class ModuleUIPage : MonoBehaviour { public UIDocument document; + /// 根目录文档 public VisualElement root => document.rootVisualElement; - + /// 必须初始化 + protected abstract void Awake(); + /// 核心模块 protected virtual ModuleCore ModuleCore => ModuleCore.I; - protected virtual void Awake() => ModuleCore.FunctionRegister(this); - - public void Add(VisualElement child) { - root.Add(child); - } - public T Q(string name = null, string className = null) where T : VisualElement { - return root.Q(name, className); - } + /// 添加UI元素 + public void Add(VisualElement child) => root.Add(child); + /// 查询UI元素 + public T Q(string name = null, string className = null) where T : VisualElement => root.Q(name, className); } diff --git a/Assets/ModuleCore/ModuleUIPage.cs.meta b/Assets/ModuleCore/ModuleUIPage.cs.meta index c4eceee..1ffceff 100644 --- a/Assets/ModuleCore/ModuleUIPage.cs.meta +++ b/Assets/ModuleCore/ModuleUIPage.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 56be1d651140a1d4fb90c3fb34136a4b +guid: a81cd0646bee3624b941f3d0b2c272f4 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ModuleCore/ModuleUIWindow.cs b/Assets/ModuleCore/ModuleUIWindow.cs new file mode 100644 index 0000000..ed9fd62 --- /dev/null +++ b/Assets/ModuleCore/ModuleUIWindow.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class ModuleUIWindow : MonoBehaviour { + /// 绑定的页面 + public ModuleUIPage ModuleUIPage; + /// 必须初始化 + public abstract void Awake(); + /// 核心模块 + protected virtual ModuleCore ModuleCore => ModuleCore.I; + /// 打开模块,并且传进参数 + public abstract void Open(Data data); + /// 关闭模块 + public abstract void Close(); +} diff --git a/Assets/ModuleCore/ModuleUIWindow.cs.meta b/Assets/ModuleCore/ModuleUIWindow.cs.meta new file mode 100644 index 0000000..3517b16 --- /dev/null +++ b/Assets/ModuleCore/ModuleUIWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 928a5dbb2497f0145b1da8645720ac89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleViewCamera.cs b/Assets/ModuleCore/ModuleViewCamera.cs new file mode 100644 index 0000000..f672428 --- /dev/null +++ b/Assets/ModuleCore/ModuleViewCamera.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class ModuleViewCamera : MonoBehaviour { + /// 视图空间位置 + public abstract Vector3 Position { get; set; } + /// 视图空间旋转 + public abstract Vector3 EulerAngles { get; set; } + /// 视图空间缩放 + public abstract Vector3 LocalScale { get; set; } + /// 相机正交大小 + public abstract float OrthographicSize { get; set; } + /// 当前视图空间的中心点 + public abstract Vector3 CurrentViewSpaceCenter { get; } + /// 相机的世界位置 + public abstract Vector3 CameraWorldPosition { get; } + /// 渲染纹理 + public abstract RenderTexture RenderTexture { get; } + + protected abstract void Awake(); + + protected virtual ModuleCore ModuleCore => ModuleCore.I; + + /// 更新渲染纹理 + public abstract void UpdateRenderTexture(int x, int y); + /// 屏幕坐标转换世界坐标 + public abstract Vector2 ScreenToWorldPosition(Vector2 screenPosition); + /// 屏幕坐标转换世界坐标 (0-1) + public abstract Vector2 ScreenToViewPosition(Vector2 screenPosition); + /// 从屏幕坐标发射一条射线 + public abstract Ray ScreenPointToRay(Vector2 screenPosition); +} diff --git a/Assets/ModuleCore/ModuleViewCamera.cs.meta b/Assets/ModuleCore/ModuleViewCamera.cs.meta new file mode 100644 index 0000000..c877ebd --- /dev/null +++ b/Assets/ModuleCore/ModuleViewCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93bd8c351a140654da540f55d0d7091f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleViewInput.cs b/Assets/ModuleCore/ModuleViewInput.cs new file mode 100644 index 0000000..5d24c63 --- /dev/null +++ b/Assets/ModuleCore/ModuleViewInput.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class ModuleViewInput : MonoBehaviour { + /// 主键输入模块类型 + public abstract event Action OnInputType; + /// 必须要初始化 + protected abstract void Awake(); + /// 核心模块 + protected virtual ModuleCore ModuleCore => ModuleCore.I; + + public abstract void SetPrimaryKeyInput(T inputUnit) where T : ModuleViewInputUnit; + + /// 按下鼠标左键 + public abstract void DownLeftMouse(DataMouseInput data); + /// 拖拽鼠标左键 + public abstract void DragLeftMouse(DataMouseInput data); + /// 移动鼠标左键 + public abstract void MoveLeftMouse(DataMouseInput data); + /// 释放鼠标左键 + public abstract void ReleaseLeftMouse(DataMouseInput data); + + /// 按下鼠标右键 + public abstract void DownRightMouse(DataMouseInput data); + /// 拖拽鼠标右键 + public abstract void DragRightMouse(DataMouseInput data); + /// 移动鼠标右键 + public abstract void MoveRightMouse(DataMouseInput data); + /// 释放鼠标右键 + public abstract void ReleaseRightMouse(DataMouseInput data); + + /// 按下鼠标中键 + public abstract void DownMiddleMouse(DataMouseInput data); + /// 拖拽鼠标中键 + public abstract void DragMiddleMouse(DataMouseInput data); + /// 移动鼠标中键 + public abstract void MoveMiddleMouse(DataMouseInput data); + /// 释放鼠标中键 + public abstract void ReleaseMiddleMouse(DataMouseInput data); + + /// 鼠标滚轮 + public abstract void ScrollWheel(DataMouseInput data); +} \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleViewInput.cs.meta b/Assets/ModuleCore/ModuleViewInput.cs.meta new file mode 100644 index 0000000..7dd80c3 --- /dev/null +++ b/Assets/ModuleCore/ModuleViewInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f56f94c154ec7d84eb464a1509810d78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataDesignPoint.meta b/Assets/ModuleData/DataDesignPoint.meta new file mode 100644 index 0000000..560d014 --- /dev/null +++ b/Assets/ModuleData/DataDesignPoint.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ce7a65aa37a4934ba8d85a6136d8c32 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataDesignPoint/DataDesignPoint.cs b/Assets/ModuleData/DataDesignPoint/DataDesignPoint.cs new file mode 100644 index 0000000..13bf1ed --- /dev/null +++ b/Assets/ModuleData/DataDesignPoint/DataDesignPoint.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class DataDesignPoint { + public readonly DataPlate dataPlate; + public DataDesignPoint(DataPlate dataPlate) { this.dataPlate = dataPlate; } + + public int index; + public Vector2 postiton; + public Vector2 leftBezier;//贝塞尔曲线左(逆时针+) + public Vector2 rightBezier;//贝塞尔曲线右(顺时针-) + public List edgePoints = new List(); +} diff --git a/Assets/ModuleData/DataDesignPoint/DataDesignPoint.cs.meta b/Assets/ModuleData/DataDesignPoint/DataDesignPoint.cs.meta new file mode 100644 index 0000000..e347f22 --- /dev/null +++ b/Assets/ModuleData/DataDesignPoint/DataDesignPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 215036ac2145e9f45835ea28080aee53 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataDesignPoint/PrefabBezierPoint.cs b/Assets/ModuleData/DataDesignPoint/PrefabBezierPoint.cs new file mode 100644 index 0000000..776d37c --- /dev/null +++ b/Assets/ModuleData/DataDesignPoint/PrefabBezierPoint.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PrefabBezierPoint : MonoBehaviour { + public LineRenderer bezierLine; + private Vector2 position; + private DataDesignPoint value; + private Action callback; + public DataPlate DataPlate => value.dataPlate; + public Vector2 Position => position + value.postiton; + public void SetValue(DataDesignPoint value, Action callback) { + this.value = value; + this.callback = callback; + } + public void SetPosition(Vector2 position) { + this.position = position; + float lx = position.x * 50; + float ly = position.y * 50; + transform.localPosition = new Vector3(lx, ly, transform.localPosition.z); + bezierLine.SetPosition(1, position); + } + public void Change(Vector2 localPosition) { + Vector2 position = localPosition - value.postiton; + SetPosition(position); + callback?.Invoke(position); + } +} diff --git a/Assets/ModuleData/DataDesignPoint/PrefabBezierPoint.cs.meta b/Assets/ModuleData/DataDesignPoint/PrefabBezierPoint.cs.meta new file mode 100644 index 0000000..2b230ad --- /dev/null +++ b/Assets/ModuleData/DataDesignPoint/PrefabBezierPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a3d9fd1b34a70c4ca6a4edaf6715131 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataDesignPoint/PrefabDesignPoint.cs b/Assets/ModuleData/DataDesignPoint/PrefabDesignPoint.cs new file mode 100644 index 0000000..97e7fac --- /dev/null +++ b/Assets/ModuleData/DataDesignPoint/PrefabDesignPoint.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MuHua; + +public class PrefabDesignPoint : MonoBehaviour, ITemplate { + public LineRenderer lineRenderer; + public EdgeCollider2D edgeCollider; + + public PrefabBezierPoint bezierPoint1; + public PrefabBezierPoint bezierPoint2; + + private DataDesignPoint value; + public int Index => value.index; + public Vector2 Position => value.postiton; + public List EdgePoints => value.edgePoints; + public DataPlate DataPlate => value.dataPlate; + public int MaxIndex => DataPlate.designPoints.Count; + public int NextIndex => DataPlateTool.NormalIndex(Index + 1, MaxIndex); + public void SetValue(DataDesignPoint value) { + this.value = value; + bezierPoint1.SetValue(value, (obj) => { value.leftBezier = obj; }); + bezierPoint2.SetValue(value, (obj) => { value.rightBezier = obj; }); + DataPlate.OnChangeDesignPoint += DataPlate_OnChangeDesignPoint; + DataPlate_OnChangeDesignPoint(Index); + } + private void OnDestroy() { + DataPlate.OnChangeDesignPoint -= DataPlate_OnChangeDesignPoint; + } + private void DataPlate_OnChangeDesignPoint(int index) { + if (index != Index) { return; } + transform.localPosition = Position; + //添加全部点 + int maxIndex = EdgePoints.Count + 1; + lineRenderer.positionCount = maxIndex; + Vector2[] vectors = new Vector2[maxIndex]; + for (int i = 0; i < EdgePoints.Count; i++) { + Vector2 position = EdgePoints[i] - Position; + lineRenderer.SetPosition(i, position); + vectors[i] = position; + } + //添加最后一个点 + int last = maxIndex - 1; + DataDesignPoint nextDesignPoint = DataPlate.FindDesignPoint(NextIndex); + Vector2 position2 = nextDesignPoint.postiton - Position; + lineRenderer.SetPosition(last, position2); + vectors[last] = position2; + //更新2D线段碰撞器 + edgeCollider.points = vectors; + //更新贝塞尔曲线 + bezierPoint1.SetPosition(value.leftBezier); + bezierPoint2.SetPosition(value.rightBezier); + } +} diff --git a/Assets/ModuleData/DataDesignPoint/PrefabDesignPoint.cs.meta b/Assets/ModuleData/DataDesignPoint/PrefabDesignPoint.cs.meta new file mode 100644 index 0000000..0e9bbfc --- /dev/null +++ b/Assets/ModuleData/DataDesignPoint/PrefabDesignPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76c13895912b8cd48a099779cbd0af65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataMouseInput.cs b/Assets/ModuleData/DataMouseInput.cs new file mode 100644 index 0000000..09dc1cd --- /dev/null +++ b/Assets/ModuleData/DataMouseInput.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UIElements; + +public class DataMouseInput { + public Vector3 ScreenPosition; + public float ScrollWheel; + public DataMouseInput(MouseDownEvent evt) { + ScreenPosition = evt.localMousePosition; + } + public DataMouseInput(MouseMoveEvent evt) { + ScreenPosition = evt.localMousePosition; + } + public DataMouseInput(MouseUpEvent evt) { + ScreenPosition = evt.localMousePosition; + } + public DataMouseInput(MouseOutEvent evt) { + ScreenPosition = evt.localMousePosition; + } + public DataMouseInput(WheelEvent evt) { + ScreenPosition = evt.localMousePosition; + ScrollWheel = evt.delta.y; + } +} diff --git a/Assets/ModuleData/DataMouseInput.cs.meta b/Assets/ModuleData/DataMouseInput.cs.meta new file mode 100644 index 0000000..3a76788 --- /dev/null +++ b/Assets/ModuleData/DataMouseInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d06cc200114296b4c9aef60a8def59b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataPlate.meta b/Assets/ModuleData/DataPlate.meta new file mode 100644 index 0000000..9d155b9 --- /dev/null +++ b/Assets/ModuleData/DataPlate.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a9716b7730eb4544cae971a8de6cf9d4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataPlate/DataPlate.cs b/Assets/ModuleData/DataPlate/DataPlate.cs new file mode 100644 index 0000000..0e165a8 --- /dev/null +++ b/Assets/ModuleData/DataPlate/DataPlate.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class DataPlate { + public Action OnChange; + public Action OnChangeDesignPoint; + public Action OnChangeEdgePoint; + + /// 边缘平滑度 + public float edgeSmooth = 0.01f; + /// 设计点 + public List designPoints = new List(); + + /// 模型中心点偏移 + public Vector3 centerOffset; + /// 边缘点 + public List edgePoints = new List(); + + //平面网格数据 + /// 顶点 + public List vertices = new List(); + /// UV + public List uv = new List(); + /// 三角形 + public List triangles = new List(); +} \ No newline at end of file diff --git a/Assets/ModuleData/DataPlate/DataPlate.cs.meta b/Assets/ModuleData/DataPlate/DataPlate.cs.meta new file mode 100644 index 0000000..20e1cff --- /dev/null +++ b/Assets/ModuleData/DataPlate/DataPlate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f57f20fad19ed740adccdb0da9c4469 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataPlate/PrefabPlate.cs b/Assets/ModuleData/DataPlate/PrefabPlate.cs new file mode 100644 index 0000000..789bc50 --- /dev/null +++ b/Assets/ModuleData/DataPlate/PrefabPlate.cs @@ -0,0 +1,61 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MuHua; + +public class PrefabPlate : MonoBehaviour, ITemplate { + public Transform DesignPointParent; + public Transform DesignPointTemplate; + public Transform PlateEdgeParent; + public Transform PlateEdgeTemplate; + + private DataPlate value; + private Vector3 localPosition; + + public MeshFilter MeshFilter => GetComponent(); + public MeshCollider MeshCollider => GetComponent(); + public ModuleViewCamera viewCamera => ModuleCore.I.PlateDesignViewCamera; + public void SetValue(DataPlate value) { + this.value = value; + localPosition = viewCamera.CurrentViewSpaceCenter; + value.OnChange += DataPlate_OnChange; + value.Compute(); + } + private void OnDestroy() { + value.OnChange -= DataPlate_OnChange; + } + public void DataPlate_OnChange() { + CreateDesignPoint(); + //CreatePrefabEdgePoint(); + CreatePolygonMesh(); + //重置坐标 + transform.localPosition = localPosition + value.centerOffset; + localPosition = transform.localPosition; + } + /// 生成设计点 + private void CreateDesignPoint() { + DesignPointParent.Instantiate(DesignPointTemplate, value.designPoints); + } + /// 生成边缘点 + private void CreatePrefabEdgePoint() { + PlateEdgeParent.DestroySon(PlateEdgeTemplate); + for (int i = 0; i < value.edgePoints.Count; i++) { + Transform temp = Instantiate(PlateEdgeTemplate, PlateEdgeParent); + temp.gameObject.SetActive(true); + PrefabPlateEdge plateEdge = temp.GetComponent(); + plateEdge.SetValue(i, value); + } + } + /// 生成网格 + private void CreatePolygonMesh() { + Mesh mesh = new Mesh(); + mesh.vertices = value.vertices.ToArray(); + mesh.uv = value.uv.ToArray(); + mesh.triangles = value.triangles.ToArray(); + mesh.RecalculateBounds(); + mesh.RecalculateNormals(); + mesh.RecalculateTangents(); + MeshFilter.mesh = mesh; + MeshCollider.sharedMesh = mesh; + } +} diff --git a/Assets/ModuleData/DataPlate/PrefabPlate.cs.meta b/Assets/ModuleData/DataPlate/PrefabPlate.cs.meta new file mode 100644 index 0000000..5f88010 --- /dev/null +++ b/Assets/ModuleData/DataPlate/PrefabPlate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efaf2ad171011c7448092aa48eaf41c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataPlate/PrefabPlateEdge.cs b/Assets/ModuleData/DataPlate/PrefabPlateEdge.cs new file mode 100644 index 0000000..7b96e98 --- /dev/null +++ b/Assets/ModuleData/DataPlate/PrefabPlateEdge.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MuHua; + +public class PrefabPlateEdge : MonoBehaviour { + public LineRenderer lineRenderer; + public EdgeCollider2D edgeCollider; + + [HideInInspector] public int index; + [HideInInspector] public DataPlate value; + + public int MaxIndex => value.edgePoints.Count; + public int NextIndex => DataPlateTool.NormalIndex(index + 1, MaxIndex); + public Vector3 CurrentPosition => value.FindEdgePoint(index); + public Vector3 NextPosition => value.FindEdgePoint(NextIndex); + public void SetValue(int index, DataPlate value) { + this.index = index; + this.value = value; + value.OnChangeEdgePoint += UpdateLineRenderer; + UpdateLineRenderer(index); + } + private void OnDestroy() { + value.OnChangeEdgePoint -= UpdateLineRenderer; + } + public void UpdateLineRenderer(int index) { + if (index != this.index && index != NextIndex) { return; } + transform.localPosition = CurrentPosition; + + Vector3 direction = NextPosition - CurrentPosition; + lineRenderer.SetPosition(1, direction); + edgeCollider.points = new Vector2[] { Vector2.zero, direction }; + } +} diff --git a/Assets/ModuleData/DataPlate/PrefabPlateEdge.cs.meta b/Assets/ModuleData/DataPlate/PrefabPlateEdge.cs.meta new file mode 100644 index 0000000..8cd7787 --- /dev/null +++ b/Assets/ModuleData/DataPlate/PrefabPlateEdge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e74baea99ddf044c8a16b4d0eacf8ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleData/DataPresetsPlate.cs b/Assets/ModuleData/DataPresetsPlate.cs new file mode 100644 index 0000000..6b81fa8 --- /dev/null +++ b/Assets/ModuleData/DataPresetsPlate.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(fileName = "PresetsPlate", menuName = "数据模块/预设模板")] +public class DataPresetsPlate : ScriptableObject { + public List designPoints; + public DataPlate ToPlate() { + DataPlate data = new DataPlate(); + data.designPoints = new List(); + int maxIndex = designPoints.Count; + for (int i = 0; i < designPoints.Count; i++) { + Vector2 position = designPoints[i]; + int left = DataPlateTool.NormalIndex(i + 1, maxIndex); + int right = DataPlateTool.NormalIndex(i - 1, maxIndex); + Vector2 leftBezier = (designPoints[left] - position) * 0.5f; + Vector2 rightBezier = (designPoints[right] - position) * 0.5f; + DataDesignPoint designPoint = CreateDataDesignPoint(i, position, data); + designPoint.leftBezier = leftBezier; + designPoint.rightBezier = rightBezier; + data.designPoints.Add(designPoint); + } + return data; + } + private DataDesignPoint CreateDataDesignPoint(int index, Vector2 position, DataPlate data) { + DataDesignPoint designPoint = new DataDesignPoint(data); + designPoint.index = index; + designPoint.postiton = position; + return designPoint; + } +} diff --git a/Assets/ModuleData/DataPresetsPlate.cs.meta b/Assets/ModuleData/DataPresetsPlate.cs.meta new file mode 100644 index 0000000..3abaa47 --- /dev/null +++ b/Assets/ModuleData/DataPresetsPlate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de9e8e0217c52a447a49c55f818131ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleFunction/Algorithm.meta b/Assets/ModuleFunction/Algorithm.meta new file mode 100644 index 0000000..31f3e44 --- /dev/null +++ b/Assets/ModuleFunction/Algorithm.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eda56199f140e8e41bde06c79efd4b8e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleFunction/Algorithm/AlgorithmEdge.cs b/Assets/ModuleFunction/Algorithm/AlgorithmEdge.cs new file mode 100644 index 0000000..a888d3c --- /dev/null +++ b/Assets/ModuleFunction/Algorithm/AlgorithmEdge.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +/// +/// 算法:中心角度排序法 +/// 依据:??? +/// +public class AlgorithmEdge : ModuleAlgorithm { + /// 算法:中心角度排序法 + public AlgorithmEdge() { } + + public class EdgeAngle { + public float angle; + public Vector3 position; + } + + public override void Compute(DataPlate data) { + List edgePoints = data.edgePoints; + //计算多边形中心点 + float x = edgePoints.Average((v3) => v3.x); + float y = edgePoints.Average((v3) => v3.y); + Vector2 center = new Vector2(x, y); + //计算所有点的夹角 + Vector3 direction = edgePoints[0] - center; + List angleList = new List(); + for (int i = 0; i < edgePoints.Count; i++) { + Vector3 normal = edgePoints[i] - center; + EdgeAngle edgeAngle = new EdgeAngle(); + edgeAngle.angle = Angle(direction, normal); + edgeAngle.position = normal; + angleList.Add(edgeAngle); + } + data.centerOffset = center; + //排序 + angleList.Sort((x, y) => x.angle.CompareTo(y.angle)); + //把排序好的边缘点重新添加 + data.edgePoints = new List(); + for (int i = 0; i < angleList.Count; i++) { + data.edgePoints.Add(angleList[i].position); + } + } + /// + /// 计算两点夹角 + /// + /// 0度点位置 + /// 目标点 + /// + private float Angle(Vector3 direction, Vector3 position) { + float angle = Vector2.SignedAngle(direction, position); + return angle; + } +} diff --git a/Assets/ModuleFunction/Algorithm/AlgorithmEdge.cs.meta b/Assets/ModuleFunction/Algorithm/AlgorithmEdge.cs.meta new file mode 100644 index 0000000..3a9d8d8 --- /dev/null +++ b/Assets/ModuleFunction/Algorithm/AlgorithmEdge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d17cdf61cce7657489b657640646a786 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleFunction/Algorithm/AlgorithmGenerateEdge.cs b/Assets/ModuleFunction/Algorithm/AlgorithmGenerateEdge.cs new file mode 100644 index 0000000..4b7ddda --- /dev/null +++ b/Assets/ModuleFunction/Algorithm/AlgorithmGenerateEdge.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 算法:根据设计点来生成边缘点 +/// 依据:??? +/// +public class AlgorithmGenerateEdge : ModuleAlgorithm { + /// 算法:根据设计点来生成边缘点 + public AlgorithmGenerateEdge() { } + + public override void Compute(DataPlate data) { + data.edgePoints = new List(); + int maxIndex = data.designPoints.Count; + for (int i = 0; i < maxIndex; i++) { + DataDesignPoint designPoint = data.FindDesignPoint(i); + DataDesignPoint nextDesignPoint = data.FindDesignPoint(i + 1); + CreateStraightLine(data, designPoint, nextDesignPoint); + } + } + public void CreateStraightLine(DataPlate data, DataDesignPoint designPoint, DataDesignPoint nextDesignPoint) { + designPoint.edgePoints = new List(); + //方向,距离 + Vector2 direction = (nextDesignPoint.postiton - designPoint.postiton).normalized; + float distance = Vector2.Distance(nextDesignPoint.postiton, designPoint.postiton); + //求余,得商数 + int a = (int)(distance * 1000); + int b = (int)(data.edgeSmooth * 1000); + int quotient = Math.DivRem(a, b, out int remainder); + //点位间距 + float segment = distance / quotient; + Vector3 ap = designPoint.postiton; + Vector3 bp = designPoint.leftBezier + designPoint.postiton; + Vector3 cp = nextDesignPoint.rightBezier + nextDesignPoint.postiton; + Vector3 dp = nextDesignPoint.postiton; + for (int i = 0; i < quotient; i++) { + float t = segment * i / distance; + Vector2 position = ComputeBezier(ap, bp, cp, dp, t); + designPoint.edgePoints.Add(position); + } + data.edgePoints.AddRange(designPoint.edgePoints); + } + /// + /// + /// + /// 起点 + /// 起点的贝塞尔点 + /// 终点的贝塞尔点 + /// 终点 + /// 进度 + /// + public Vector3 ComputeBezier(Vector3 a, Vector3 b, Vector3 c, Vector3 d, float t) { + Vector3 aa = a + (b - a) * t; + Vector3 bb = b + (c - b) * t; + Vector3 cc = c + (d - c) * t; + + Vector3 aaa = aa + (bb - aa) * t; + Vector3 bbb = bb + (cc - bb) * t; + return aaa + (bbb - aaa) * t; + } + +} diff --git a/Assets/ModuleFunction/Algorithm/AlgorithmGenerateEdge.cs.meta b/Assets/ModuleFunction/Algorithm/AlgorithmGenerateEdge.cs.meta new file mode 100644 index 0000000..f872f70 --- /dev/null +++ b/Assets/ModuleFunction/Algorithm/AlgorithmGenerateEdge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d0c7458fc5119243b7db98671184058 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleFunction/Algorithm/AlgorithmPolygon.cs b/Assets/ModuleFunction/Algorithm/AlgorithmPolygon.cs new file mode 100644 index 0000000..2ece9da --- /dev/null +++ b/Assets/ModuleFunction/Algorithm/AlgorithmPolygon.cs @@ -0,0 +1,186 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 算法:耳切法 +/// 依据:简单多边形的双耳定理 +/// +public class AlgorithmPolygon : ModuleAlgorithm { + /// 算法:耳切法 + public AlgorithmPolygon() { } + + public enum AngleType { + /// 平角 = 180 + StraightAngle = 0, + /// 优角 >180 + ReflexAngle = 1, + /// 劣角 <180 + InferiorAngle = 2 + } + + public class PointNode { + public int index; + public Vector2 Position; + public Vector2 PreviousPosition; + public Vector2 NextPosition; + } + + public class Triangle { + public Vector2 a; + public Vector2 b; + public Vector2 c; + } + + public override void Compute(DataPlate data) { + List edgePoints = new List(data.edgePoints); + List polygons = new List(); + Vector2[] allArray = edgePoints.ToArray(); + bool isClockWise = IsClockWise(allArray); + //耳切法生成三角形 + ComputeEarTriangle(polygons, edgePoints, allArray, isClockWise); + MergeTriangles(data, polygons); + } + /// 循环计算耳点 + public void ComputeEarTriangle(List polygons, List edgePoints, Vector2[] allArray, bool isClockWise) { + List temp = ComputeEarTriangle(edgePoints, allArray, isClockWise); + if (temp.Count == 0) { return; } + polygons.AddRange(temp); + ComputeEarTriangle(polygons, edgePoints, allArray, isClockWise); + } + /// 计算一个耳点 + public List ComputeEarTriangle(List edgePoints, Vector2[] allArray, bool isClockWise) { + Vector2[] array = edgePoints.ToArray(); + List polygons = new List(); + for (int i = 0; i < array.Length; i++) { + PointNode pointNode = CreatePointNode(i, array); + AngleType angleType = GetAngleType(pointNode, isClockWise); + // 等于180,不可能为耳点 + if (angleType == AngleType.StraightAngle) { continue; } + // 大于180,不可能为耳点 + if (angleType == AngleType.ReflexAngle) { continue; } + // 包含其他点,不可能为耳点 + if (IsInsideTriangle(pointNode, allArray)) { continue; } + // 包含其他耳点,不可能成为耳点 + if (!IsInsideEarTriangle(pointNode, edgePoints)) { continue; } + edgePoints.Remove(pointNode.Position); + polygons.Add(CreateTriangle(pointNode)); + } + return polygons; + } + /// 创建节点 + public PointNode CreatePointNode(int index, Vector2[] array) { + int maxIndex = array.Length; + PointNode pointNode = new PointNode(); + pointNode.index = index; + pointNode.PreviousPosition = array[NormalIndex(index - 1, maxIndex)]; + pointNode.Position = array[NormalIndex(index + 0, maxIndex)]; + pointNode.NextPosition = array[NormalIndex(index + 1, maxIndex)]; + return pointNode; + } + /// 计算三角形内是否包含其他点 + public bool IsInsideTriangle(PointNode node, Vector2[] array) { + for (int i = 0; i < array.Length; i++) { + if (array[i] == node.Position) { continue; } + if (array[i] == node.PreviousPosition) { continue; } + if (array[i] == node.NextPosition) { continue; } + if (IsInsideTriangle(node, array[i])) { return true; } + } + return false; + } + /// 计算三角形内是否包含其他点 + public bool IsInsideEarTriangle(PointNode node, List edgePoints) { + if (!edgePoints.Contains(node.Position)) { return false; } + if (!edgePoints.Contains(node.PreviousPosition)) { return false; } + if (!edgePoints.Contains(node.NextPosition)) { return false; } + return true; + } + /// 从节点创建三角形 + public Triangle CreateTriangle(PointNode node) { + Triangle triangle = new Triangle(); + triangle.a = node.Position; + triangle.b = node.PreviousPosition; + triangle.c = node.NextPosition; + return triangle; + } + /// 合并三角形 + public void MergeTriangles(DataPlate data, List polygons) { + //创建数据容器 + List vertices = new List(); + List uv = new List(); + List triangles = new List(); + //三角形合并 + for (int i = 0; i < polygons.Count; i++) { + Vector3 a = polygons[i].a; + int aIndex = vertices.Count - 1; + if (!vertices.Contains(a)) { vertices.Add(a); aIndex = vertices.Count - 1; } + else { aIndex = vertices.IndexOf(a); } + + Vector3 b = polygons[i].b; + int bIndex = vertices.Count - 1; + if (!vertices.Contains(b)) { vertices.Add(b); bIndex = vertices.Count - 1; } + else { bIndex = vertices.IndexOf(b); } + + Vector3 c = polygons[i].c; + int cIndex = vertices.Count - 1; + if (!vertices.Contains(c)) { vertices.Add(c); cIndex = vertices.Count - 1; } + else { cIndex = vertices.IndexOf(c); } + + triangles.Add(aIndex); + triangles.Add(bIndex); + triangles.Add(cIndex); + } + //展开uv (顶点去掉z坐标就是未缩放的平面UV) + for (int i = 0; i < vertices.Count; i++) { uv.Add(vertices[i]); } + //附加数据 + data.vertices = vertices; + data.uv = uv; + data.triangles = triangles; + } + + /// 头尾循环标准化索引 + public static int NormalIndex(int index, int maxIndex) { + if (maxIndex == 0) { Debug.LogError("错误索引:maxIndex = 0"); return 0; } + if (index < 0) { return NormalIndex(index + maxIndex, maxIndex); } + if (index >= maxIndex) { return NormalIndex(index - maxIndex, maxIndex); } + return index; + } + /// 当前的点方向是否为顺时针 + public static bool IsClockWise(Vector2[] array) { + // 通过计算叉乘来确定方向 + float sum = 0f; + double count = array.Length; + Vector3 va, vb; + for (int i = 0; i < array.Length; i++) { + va = array[i]; + vb = (i == count - 1) ? array[0] : array[i + 1]; + sum += va.x * vb.y - va.y * vb.x; + } + return sum < 0; + } + /// 判断角的类型 + public static AngleType GetAngleType(PointNode node, bool isClockWise) { + // 角度是否小于180 + // oa & ob 之间的夹角,(右手法则) + // 逆时针顺序是相反的 + Vector2 o = node.Position; + Vector2 a = node.PreviousPosition; + Vector2 b = node.NextPosition; + float f = (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x); + bool flag = isClockWise ? f > 0 : f < 0; + if (f == 0) { return AngleType.StraightAngle; } + else if (flag) { return AngleType.InferiorAngle; } + else { return AngleType.ReflexAngle; } + } + /// p点是否在点和其左右两个点组成的三角形内,或ca,cb边上 + public static bool IsInsideTriangle(PointNode node, Vector2 p) { + // p点是否在abc三角形内 + Vector2 a = node.PreviousPosition; + Vector2 b = node.NextPosition; + Vector2 c = node.Position; + float c1 = (b.x - a.x) * (p.y - b.y) - (b.y - a.y) * (p.x - b.x); + float c2 = (c.x - b.x) * (p.y - c.y) - (c.y - b.y) * (p.x - c.x); + float c3 = (a.x - c.x) * (p.y - a.y) - (a.y - c.y) * (p.x - a.x); + return (c1 > 0f && c2 >= 0f && c3 >= 0f) || (c1 < 0f && c2 <= 0f && c3 <= 0f); + } +} \ No newline at end of file diff --git a/Assets/ModuleFunction/Algorithm/AlgorithmPolygon.cs.meta b/Assets/ModuleFunction/Algorithm/AlgorithmPolygon.cs.meta new file mode 100644 index 0000000..1169029 --- /dev/null +++ b/Assets/ModuleFunction/Algorithm/AlgorithmPolygon.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad1a08fdeb67d3048a88c3668e3b6764 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleFunction/Assets.meta b/Assets/ModuleFunction/Assets.meta new file mode 100644 index 0000000..f76d037 --- /dev/null +++ b/Assets/ModuleFunction/Assets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 485602713f4e17344b5dc7f627ed1a81 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleFunction/Assets/AssetsPresetsPlate.cs b/Assets/ModuleFunction/Assets/AssetsPresetsPlate.cs new file mode 100644 index 0000000..416f846 --- /dev/null +++ b/Assets/ModuleFunction/Assets/AssetsPresetsPlate.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class AssetsPresetsPlate : ModuleAssets { + protected override void Awake() { + ModuleCore.PresetsPlateAssets = this; + } + public override void ForEach(Action action) { + assets.ForEach(action); + } +} diff --git a/Assets/ModuleFunction/Assets/AssetsPresetsPlate.cs.meta b/Assets/ModuleFunction/Assets/AssetsPresetsPlate.cs.meta new file mode 100644 index 0000000..1196253 --- /dev/null +++ b/Assets/ModuleFunction/Assets/AssetsPresetsPlate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8198c73995924524d985c3beb338f033 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleFunction/EnumeratorAgent.cs b/Assets/ModuleFunction/EnumeratorAgent.cs index 2f1a13c..5dcb36d 100644 --- a/Assets/ModuleFunction/EnumeratorAgent.cs +++ b/Assets/ModuleFunction/EnumeratorAgent.cs @@ -3,10 +3,7 @@ using System.Collections.Generic; using UnityEngine; public class EnumeratorAgent : ModuleAgent { - public override void AgentLoadingNetwork(DataNetwork data) { - StartCoroutine(data.IWebRequest()); - } - public override void AgentNetwork(DataNetwork data) { - StartCoroutine(data.IWebRequest()); + protected override void Awake() { + ModuleCore.ModuleAgent = this; } } diff --git a/Assets/ModuleFunction/EnumeratorAgent.cs.meta b/Assets/ModuleFunction/EnumeratorAgent.cs.meta index bb7d974..321d8be 100644 --- a/Assets/ModuleFunction/EnumeratorAgent.cs.meta +++ b/Assets/ModuleFunction/EnumeratorAgent.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7f14f51c40117cc4db70bd544f9ee461 +guid: e79a947f40825b54a8b65cb2714fbe6e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ModuleFunction/ModuleUIPage/UICuttingWorkshop.cs b/Assets/ModuleFunction/ModuleUIPage/UICuttingWorkshop.cs index 8233bad..8800236 100644 --- a/Assets/ModuleFunction/ModuleUIPage/UICuttingWorkshop.cs +++ b/Assets/ModuleFunction/ModuleUIPage/UICuttingWorkshop.cs @@ -15,7 +15,7 @@ public class UICuttingWorkshop : ModuleUIPage { private Button Button4 => root.Q