This commit is contained in:
MuHua-123
2025-01-08 18:02:44 +08:00
parent a08bd06617
commit 8f387837db
46 changed files with 5196 additions and 117 deletions
+22 -11
View File
@@ -6,24 +6,35 @@ using UnityEngine;
/// <summary>
/// 资源模块
/// </summary>
/// <typeparam name="Data">绑定的资源类型</typeparam>
public abstract class ModuleAssets<Data> : MonoBehaviour {
/// <summary> 必须要初始化 </summary>
protected abstract void Awake();
public class ModuleAssets<Data> {
protected List<Data> datas = new List<Data>();
/// <summary> 核心模块 </summary>
protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// <summary> 数据计数 </summary>
public abstract int Count { get; }
/// <summary> 更改事件 </summary>
public virtual event Action OnChange;
/// <summary> 数据列表 </summary>
public abstract List<Data> Datas { get; }
public virtual List<Data> Datas => datas;
/// <summary> 数据计数 </summary>
public virtual int Count => Datas.Count;
/// <summary> 数据计数 </summary
public virtual Data this[int index] => Datas[index];
/// <summary> 添加数据 </summary>
public abstract void Add(Data data);
public virtual void Add(Data data) { Datas.Add(data); OnChange?.Invoke(); }
/// <summary> 添加数据 </summary>
public virtual void AddRange(IList<Data> data) { Datas.AddRange(data); OnChange?.Invoke(); }
/// <summary> 删除数据 </summary>
public abstract void Remove(Data data);
public virtual void Remove(Data data) { Datas.Remove(data); OnChange?.Invoke(); }
/// <summary> 保存数据 </summary>
public virtual void Save() { throw new NotImplementedException(); }
/// <summary> 加载数据 </summary>
public virtual void Load() { throw new NotImplementedException(); }
/// <summary> 查询数据 </summary>
public abstract Data Find(int index);
public virtual Data Find(int index) { throw new NotImplementedException(); }
public virtual Data Find(Guid guid) { throw new NotImplementedException(); }
/// <summary> 循环列表 </summary>
public abstract void ForEach(Action<Data> action);
public virtual void ForEach(Action<Data> action) => Datas.ForEach(action);
}
+58 -11
View File
@@ -19,22 +19,69 @@ public abstract class ModuleCamera : MonoBehaviour {
public abstract Vector3 EulerAngles { get; set; }
/// <summary> 相机视野 </summary>
public abstract float VisualField { get; set; }
/// <summary> 当前相机 </summary>
public abstract Camera ViewCamera { get; }
/// <summary> 渲染纹理 </summary>
public abstract RenderTexture RenderTexture { get; }
public virtual RenderTexture RenderTexture { get; }
/// <summary> 更新渲染纹理 </summary>
public abstract void UpdateRenderTexture(int x, int y);
/// <summary> 屏幕坐标转换视图坐标(0-1) </summary>
public abstract Vector3 ScreenToViewPosition(Vector3 screenPosition);
/// <summary> 屏幕坐标转换世界坐标 </summary>
public abstract Vector3 ScreenToWorldPosition(Vector3 screenPosition);
public virtual void UpdateRenderTexture(int x, int y) { }
#region
/// <summary> 屏幕坐标转换视图坐标(0-1) </summary>
public virtual Vector3 ScreenToViewPosition(Vector3 screenPosition) {
return ViewCamera.ScreenToViewportPoint(screenPosition);
}
/// <summary> 屏幕坐标转换世界坐标 </summary>
public virtual Vector3 ScreenToWorldPosition(Vector3 screenPosition) {
return ViewCamera.ScreenToWorldPoint(screenPosition);
}
/// <summary> 视图坐标(0-1)转换屏幕坐标</summary>
public virtual Vector3 ViewToScreenPosition(Vector3 screenPosition) {
return ViewCamera.ViewportToScreenPoint(screenPosition);
}
/// <summary> 视图坐标(0-1)转换世界坐标 </summary>
public virtual Vector3 ViewToWorldPosition(Vector3 screenPosition) {
return ViewCamera.ViewportToWorldPoint(screenPosition);
}
/// <summary> 世界坐标转换屏幕坐标 </summary>
public virtual Vector3 WorldToScreenPosition(Vector3 screenPosition) {
return ViewCamera.WorldToScreenPoint(screenPosition);
}
/// <summary> 世界坐标转换视图坐标(0-1) </summary>
public virtual Vector3 WorldToViewPosition(Vector3 screenPosition) {
return ViewCamera.WorldToViewportPoint(screenPosition);
}
#endregion
#region 线
private Ray ray;
private RaycastHit hitInfo;
/// <summary> 屏幕坐标获取世界对象 </summary>
public abstract bool ScreenToWorldObject<T>(Vector3 screenPosition, out T value) where T : Object;
public virtual bool ScreenToWorldObject<T>(Vector3 screenPosition, out T value) where T : Object {
return ScreenToWorldObject(screenPosition, out value, DefaultLayerMask);
}
/// <summary> 屏幕坐标获取世界对象 </summary>
public abstract bool ScreenToWorldObject<T>(Vector3 screenPosition, out T value, LayerMask planeLayerMask) where T : Object;
public virtual bool ScreenToWorldObject<T>(Vector3 screenPosition, out T value, LayerMask planeLayerMask) where T : Object {
ray = ViewCamera.ScreenPointToRay(screenPosition);
Physics.Raycast(ray, out hitInfo, 200, planeLayerMask);
value = hitInfo.transform?.GetComponent<T>();
return value != null;
}
/// <summary> 屏幕坐标获取世界对象的父对象 </summary>
public abstract bool ScreenToWorldObjectParent<T>(Vector3 screenPosition, out T value) where T : Object;
public virtual bool ScreenToWorldObjectParent<T>(Vector3 screenPosition, out T value) where T : Object {
return ScreenToWorldObjectParent(screenPosition, out value, DefaultLayerMask);
}
/// <summary> 屏幕坐标获取世界对象的父对象 </summary>
public abstract bool ScreenToWorldObjectParent<T>(Vector3 screenPosition, out T value, LayerMask planeLayerMask) where T : Object;
public virtual bool ScreenToWorldObjectParent<T>(Vector3 screenPosition, out T value, LayerMask planeLayerMask) where T : Object {
ray = ViewCamera.ScreenPointToRay(screenPosition);
Physics.Raycast(ray, out hitInfo, 200, planeLayerMask);
value = hitInfo.transform?.GetComponentInParent<T>();
return value != null;
}
#endregion
protected virtual void Update() {
Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);
}
}
+7
View File
@@ -7,4 +7,11 @@ using UnityEngine;
/// </summary>
public class ModuleCore : Module<ModuleCore> {
#region
/// <summary> 不会被销毁的全局唯一页面模块 (UIDocument) </summary>
public ModuleUIPage GlobalPage;
/// <summary> 当前的主要页面模块 (UIDocument) </summary>
public ModuleUIPage CurrentPage;
#endregion
}
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ce17d4a855942e747b3a1a85af3fbf7b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,26 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 数据处理器模块
/// </summary>
public class ModuleHandle<T> {
/// <summary> 数据 </summary>
protected T value;
/// <summary> 核心模块 </summary>
protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// <summary> 当前数据 </summary>
public virtual T Current => value;
/// <summary> 当前数据是否有效 </summary>
public virtual bool IsValid => Current != null;
/// <summary> 改变当前数据 Event </summary>
public virtual event Action<T> OnChange;
/// <summary> 改变当前数据 </summary>
public virtual void Change() => OnChange?.Invoke(value);
/// <summary> 改变当前数据 </summary>
public virtual void Change(T value) {this.value = value; OnChange?.Invoke(value); }
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 73ab810e12f76f449ba3e6351467ebcb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -7,14 +7,14 @@ using UnityEngine;
/// </summary>
public abstract class ModuleSingle<Data> : MonoBehaviour {
/// <summary> 必须要初始化 </summary>
protected abstract void Awake();
protected virtual void Awake() { }
/// <summary> 核心模块 </summary>
protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// <summary> 打开 </summary>
public abstract void Open(Data data);
public virtual void Open(Data data) { }
/// <summary> 完成 </summary>
public abstract void Complete();
public virtual void Complete() { }
/// <summary> 关闭 </summary>
public abstract void Close();
public virtual void Close() { }
}
@@ -0,0 +1,14 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIGlobalPage : ModuleUIPage {
protected override void Awake() => ModuleCore.GlobalPage = this;
private void Start() {
string url = "https://neiyihuizhouilabtest.zgfzjy.cn/api/client/color/categroies";
DataRequestGet request = new DataRequestGet(url);
request.OnCallback = (obj) => { Debug.Log(obj); };
WebRequest.Send(request);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6f0700aede140c44fb927acc112b9998
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -20,11 +20,13 @@ public abstract class ModuleUIPanel : MonoBehaviour {
/// <summary>
/// UI项
/// </summary>
public abstract class UIItem<Data, T> where T : UIItem<Data, T> {
public abstract class UIItem<Data> {
/// <summary> 选择事件 </summary>
public static event Action<Data> OnSelect;
/// <summary> 触发事件 </summary>
public static void Select(Data data) => OnSelect?.Invoke(data);
/// <summary> 核心模块 </summary>
protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// <summary> 绑定的数据 </summary>
public readonly Data value;
/// <summary> 绑定的元素 </summary>
@@ -33,12 +35,12 @@ public abstract class UIItem<Data, T> where T : UIItem<Data, T> {
public UIItem(Data value, VisualElement element) {
this.value = value;
this.element = element;
OnSelect += UnitUIPanelItem_OnSelect;
OnSelect += UIItem_OnSelect;
}
/// <summary> 触发选择事件 </summary>
public virtual void Select() => OnSelect?.Invoke(value);
/// <summary> 侦听选择事件 </summary>
public virtual void UnitUIPanelItem_OnSelect(Data obj) {
public virtual void UIItem_OnSelect(Data obj) {
if (value.Equals(obj)) { SelectState(); }
else { DefaultState(); }
}
@@ -47,5 +49,5 @@ public abstract class UIItem<Data, T> where T : UIItem<Data, T> {
/// <summary> 选中状态 </summary>
public virtual void SelectState() { }
/// <summary> 释放 </summary>
public virtual void Release() => OnSelect -= UnitUIPanelItem_OnSelect;
}
public virtual void Release() => OnSelect -= UIItem_OnSelect;
}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2c6f02c8edd5f1241b53b0c7e538e84a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 可视化内容生成模块
/// 生成可视化内容模块
/// </summary>
public abstract class ModuleVisual<Data> : MonoBehaviour {
/// <summary> 必须要初始化 </summary>
@@ -11,7 +11,7 @@ public abstract class ModuleVisual<Data> : MonoBehaviour {
/// <summary> 核心模块 </summary>
protected virtual ModuleCore ModuleCore => ModuleCore.I;
/// <summary> 更新可视化 </summary>
/// <summary> 更新可视化内容 </summary>
public abstract void UpdateVisual(Data data);
/// <summary> 释放可视化内容 </summary>
public abstract void ReleaseVisual(Data data);