1
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,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
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user