From 937595b3b14d0b930de4609cc39a583602bbc3fd Mon Sep 17 00:00:00 2001 From: MuHua-123 <136542559+MuHua-123@users.noreply.github.com> Date: Fri, 23 May 2025 17:44:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/ModuleCore/ModuleCamera.meta | 8 +++ .../ModuleCamera/CameraController.cs | 29 ++++++++ .../ModuleCamera/CameraController.cs.meta | 11 +++ .../ModuleCamera/CameraController.meta | 8 +++ .../CameraController/CameraDefault.cs | 47 +++++++++++++ .../CameraController/CameraDefault.cs.meta | 11 +++ .../CameraController/CameraMoveAxis.cs | 68 +++++++++++++++++++ .../CameraController/CameraMoveAxis.cs.meta | 11 +++ .../ModuleCore/ModuleCamera/ModuleCamera.cs | 49 +++++++++++++ .../ModuleCamera/ModuleCamera.cs.meta | 11 +++ Assets/ModuleCore/ModuleInput.meta | 8 +++ Assets/ModuleCore/ModuleInput/InputBasic.cs | 20 ++++++ .../ModuleCore/ModuleInput/InputBasic.cs.meta | 11 +++ Assets/ModuleCore/ModuleInput/ModuleInput.cs | 52 ++++++++++++++ .../ModuleInput/ModuleInput.cs.meta | 11 +++ .../ModuleVisual/VisualController.meta | 8 +++ .../ModuleVisual/VisualGenerator.cs | 21 ++++++ .../ModuleVisual/VisualGenerator.cs.meta | 11 +++ .../ModuleVisual/VisualGenerator.meta | 8 +++ 19 files changed, 403 insertions(+) create mode 100644 Assets/ModuleCore/ModuleCamera.meta create mode 100644 Assets/ModuleCore/ModuleCamera/CameraController.cs create mode 100644 Assets/ModuleCore/ModuleCamera/CameraController.cs.meta create mode 100644 Assets/ModuleCore/ModuleCamera/CameraController.meta create mode 100644 Assets/ModuleCore/ModuleCamera/CameraController/CameraDefault.cs create mode 100644 Assets/ModuleCore/ModuleCamera/CameraController/CameraDefault.cs.meta create mode 100644 Assets/ModuleCore/ModuleCamera/CameraController/CameraMoveAxis.cs create mode 100644 Assets/ModuleCore/ModuleCamera/CameraController/CameraMoveAxis.cs.meta create mode 100644 Assets/ModuleCore/ModuleCamera/ModuleCamera.cs create mode 100644 Assets/ModuleCore/ModuleCamera/ModuleCamera.cs.meta create mode 100644 Assets/ModuleCore/ModuleInput.meta create mode 100644 Assets/ModuleCore/ModuleInput/InputBasic.cs create mode 100644 Assets/ModuleCore/ModuleInput/InputBasic.cs.meta create mode 100644 Assets/ModuleCore/ModuleInput/ModuleInput.cs create mode 100644 Assets/ModuleCore/ModuleInput/ModuleInput.cs.meta create mode 100644 Assets/ModuleCore/ModuleVisual/VisualController.meta create mode 100644 Assets/ModuleCore/ModuleVisual/VisualGenerator.cs create mode 100644 Assets/ModuleCore/ModuleVisual/VisualGenerator.cs.meta create mode 100644 Assets/ModuleCore/ModuleVisual/VisualGenerator.meta diff --git a/Assets/ModuleCore/ModuleCamera.meta b/Assets/ModuleCore/ModuleCamera.meta new file mode 100644 index 0000000..a15fb32 --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a132d392d2a46354fac4a0c16cc6dac5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleCamera/CameraController.cs b/Assets/ModuleCore/ModuleCamera/CameraController.cs new file mode 100644 index 0000000..c460e1d --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/CameraController.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 相机控制器 +/// +public abstract class CameraController : MonoBehaviour { + /// 位置 + public abstract Vector3 Position { get; set; } + /// 正向 + public abstract Vector3 Forward { get; set; } + /// 右向 + public abstract Vector3 Right { get; set; } + /// 旋转 + public abstract Vector3 EulerAngles { get; set; } + /// 距离 + public abstract float Distance { get; set; } + + /// 初始化 + public abstract void Initialize(); + /// 重置相机 + public abstract void ResetCamera(); + + /// 屏幕坐标转换世界坐标 + public virtual Vector3 ScreenToWorldPosition(Vector3 screenPosition) { + throw new System.NotImplementedException(); + } +} diff --git a/Assets/ModuleCore/ModuleCamera/CameraController.cs.meta b/Assets/ModuleCore/ModuleCamera/CameraController.cs.meta new file mode 100644 index 0000000..41ab6f7 --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/CameraController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96a98904bc59dd9468543e99e52f3d94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleCamera/CameraController.meta b/Assets/ModuleCore/ModuleCamera/CameraController.meta new file mode 100644 index 0000000..f6b233a --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/CameraController.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2408eae033f1fe54ebf17cdc3530f985 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleCamera/CameraController/CameraDefault.cs b/Assets/ModuleCore/ModuleCamera/CameraController/CameraDefault.cs new file mode 100644 index 0000000..8fa9dae --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/CameraController/CameraDefault.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 默认相机 +/// +public class CameraDefault : CameraController { + + public override Vector3 Position { + get => throw new System.NotImplementedException(); + set => throw new System.NotImplementedException(); + } + public override Vector3 Forward { + get => throw new System.NotImplementedException(); + set => throw new System.NotImplementedException(); + } + public override Vector3 Right { + get => throw new System.NotImplementedException(); + set => throw new System.NotImplementedException(); + } + public override Vector3 EulerAngles { + get => throw new System.NotImplementedException(); + set => throw new System.NotImplementedException(); + } + public override float Distance { + get => throw new System.NotImplementedException(); + set => throw new System.NotImplementedException(); + } + + public override void Initialize() { + ModuleCamera.OnCameraMode += ModuleCamera_OnCameraMode; + } + + private void ModuleCamera_OnCameraMode(EnumCameraMode mode) { +#if UNITY_STANDALONE_WIN && !UNITY_EDITOR + return; +#endif + gameObject.SetActive(mode == EnumCameraMode.None); + if (mode == EnumCameraMode.None) { ModuleCamera.CurrentCamera = this; } + } + + public override void ResetCamera() { + // transform.position = HotUpdateScene.I.StartPoint.position; + // transform.eulerAngles = HotUpdateScene.I.StartPoint.eulerAngles; + } +} diff --git a/Assets/ModuleCore/ModuleCamera/CameraController/CameraDefault.cs.meta b/Assets/ModuleCore/ModuleCamera/CameraController/CameraDefault.cs.meta new file mode 100644 index 0000000..97d779a --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/CameraController/CameraDefault.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f6f4a232485de9439914dc14b7df5a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleCamera/CameraController/CameraMoveAxis.cs b/Assets/ModuleCore/ModuleCamera/CameraController/CameraMoveAxis.cs new file mode 100644 index 0000000..97b59fc --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/CameraController/CameraMoveAxis.cs @@ -0,0 +1,68 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 移轴相机 +/// +public class CameraMoveAxis : CameraController { + + public Camera mainCamera; + public LayerMask layerMask; + + private RaycastHit hitInfo; + + public override Vector3 Position { + get => transform.position; + set => transform.position = value; + } + public override Vector3 Forward { + get => throw new System.NotImplementedException(); + set => throw new System.NotImplementedException(); + } + public override Vector3 Right { + get => throw new System.NotImplementedException(); + set => throw new System.NotImplementedException(); + } + public override Vector3 EulerAngles { + get => transform.eulerAngles; + set => transform.eulerAngles = value; + } + public override float Distance { + get => GetVisualField(); + set => SetVisualField(value); + } + + private float GetVisualField() { + return Vector3.Distance(mainCamera.transform.localPosition, Vector3.zero); + } + private void SetVisualField(float value) { + value = Mathf.Clamp(value, 10, 30); + Vector3 direction = mainCamera.transform.localPosition - Vector3.zero; + mainCamera.transform.localPosition = direction.normalized * value; + // if (!Volume.profile.TryGet(out DepthOfField depthOfField)) { return; } + // depthOfField.focusDistance.SetValue(new FloatParameter(value)); + } + + public override void Initialize() { + ModuleCamera.OnCameraMode += ModuleCamera_OnCameraMode; + } + + private void ModuleCamera_OnCameraMode(EnumCameraMode mode) { + gameObject.SetActive(mode == EnumCameraMode.MoveAxis); + if (mode == EnumCameraMode.MoveAxis) { ModuleCamera.CurrentCamera = this; } + } + + public override void ResetCamera() { + // transform.position = HotUpdateScene.I.StartPoint.position; + // transform.eulerAngles = HotUpdateScene.I.StartPoint.eulerAngles; + } + + public override Vector3 ScreenToWorldPosition(Vector3 screenPosition) { + Ray ray = mainCamera.ScreenPointToRay(screenPosition); + Physics.Raycast(ray, out hitInfo, 200f, layerMask); + Vector3 position = Vector3.zero; + if (hitInfo.transform != null) { position = hitInfo.point; } + return position; + } +} diff --git a/Assets/ModuleCore/ModuleCamera/CameraController/CameraMoveAxis.cs.meta b/Assets/ModuleCore/ModuleCamera/CameraController/CameraMoveAxis.cs.meta new file mode 100644 index 0000000..a2f2bc8 --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/CameraController/CameraMoveAxis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc9103ac1c158bb41af1ba45de4f9d08 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs b/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs new file mode 100644 index 0000000..2c094e6 --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MuHua; + +/// +/// 相机模块 +/// +public class ModuleCamera : ModuleSingle { + /// 当前相机 + public static CameraController CurrentCamera; + /// 相机模式事件 + public static event Action OnCameraMode; + /// 设置相机模式 + public static void Mode(EnumCameraMode mode, bool isReset = true) { + OnCameraMode?.Invoke(mode); + if (isReset) { I.ResetCamera(); } + } + + public List cameras; + + protected override void Awake() => NoReplace(); + + private void Start() => cameras.ForEach(obj => obj.Initialize()); + + /// 重置相机 + public void ResetCamera() => cameras.ForEach(obj => obj.ResetCamera()); + + /// + /// 转换方向 + /// + /// 相机的前方 + /// 相机的右方 + /// 输入的移动方向 + /// Y轴向上的平面移动方向 + public static Vector3 TransferDirection(Vector3 forward, Vector3 right, Vector2 moveInput) { + // 确保前方和右方方向在水平面上 + forward.y = 0; + right.y = 0; + + // 归一化方向向量 + forward.Normalize(); + right.Normalize(); + + // 计算移动方向 + return (forward * moveInput.y + right * moveInput.x).normalized; + } +} diff --git a/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs.meta b/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs.meta new file mode 100644 index 0000000..3667f07 --- /dev/null +++ b/Assets/ModuleCore/ModuleCamera/ModuleCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d436e33934b1feb4d8a3909ffb5292a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleInput.meta b/Assets/ModuleCore/ModuleInput.meta new file mode 100644 index 0000000..0992aa6 --- /dev/null +++ b/Assets/ModuleCore/ModuleInput.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da2e7bba0b4252e4fbe87dc9d280d2e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleInput/InputBasic.cs b/Assets/ModuleCore/ModuleInput/InputBasic.cs new file mode 100644 index 0000000..eeea5ca --- /dev/null +++ b/Assets/ModuleCore/ModuleInput/InputBasic.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + +/// +/// 基础输入 +/// +[RequireComponent(typeof(PlayerInput))] +public class InputBasic : MonoBehaviour { + public Vector3 mousePosition; + + #region 输入系统 + /// 鼠标位置 + public void OnMousePosition(InputValue inputValue) { + mousePosition = inputValue.Get(); + ModuleInput.mousePosition = mousePosition; + } + #endregion +} diff --git a/Assets/ModuleCore/ModuleInput/InputBasic.cs.meta b/Assets/ModuleCore/ModuleInput/InputBasic.cs.meta new file mode 100644 index 0000000..f5f40e6 --- /dev/null +++ b/Assets/ModuleCore/ModuleInput/InputBasic.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efd8b69b2d3f913448202357a1a084ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleInput/ModuleInput.cs b/Assets/ModuleCore/ModuleInput/ModuleInput.cs new file mode 100644 index 0000000..4908de7 --- /dev/null +++ b/Assets/ModuleCore/ModuleInput/ModuleInput.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using MuHua; + +/// +/// 输入模块 +/// +public class ModuleInput : ModuleSingle { + + /// 当前输入模式 + public static EnumInputMode inputMode; + /// 鼠标指针位置 + public static Vector3 mousePosition; + /// 转换模式事件 + public static event Action OnInputMode; + /// 临时禁用事件 + public static event Action OnTemporarilyDisable; + + private static bool isPointerOverUIObject;// 指针是否在UI上 + + /// 指针是否在UI上 + public static bool IsPointerOverUIObject => isPointerOverUIObject; + + /// 设置输入模式 + public static void Mode(EnumInputMode mode) { + inputMode = mode; + OnInputMode?.Invoke(mode); + } + /// 临时禁用输入 + public static void TemporarilyDisable(bool value) => OnTemporarilyDisable?.Invoke(value); + + protected override void Awake() => NoReplace(); + + private void Update() { +#if UNITY_STANDALONE + //电脑平台 + isPointerOverUIObject = EventSystem.current.IsPointerOverGameObject(); +#elif UNITY_WEBGL + //WebGL平台 + isPointerOverUIObject = EventSystem.current.IsPointerOverGameObject(); +#elif UNITY_ANDROID + //安卓平台 + isPointerOverUIObject = EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId); +#elif UNITY_IOS + //苹果平台 + isPointerOverUIObject = EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId); +#endif + } +} diff --git a/Assets/ModuleCore/ModuleInput/ModuleInput.cs.meta b/Assets/ModuleCore/ModuleInput/ModuleInput.cs.meta new file mode 100644 index 0000000..85d8bee --- /dev/null +++ b/Assets/ModuleCore/ModuleInput/ModuleInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0535501d69413b6439c33f5b9809d359 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleVisual/VisualController.meta b/Assets/ModuleCore/ModuleVisual/VisualController.meta new file mode 100644 index 0000000..3b62e06 --- /dev/null +++ b/Assets/ModuleCore/ModuleVisual/VisualController.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7bb6d05c681dd0c4bb87381b7c7862ae +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleVisual/VisualGenerator.cs b/Assets/ModuleCore/ModuleVisual/VisualGenerator.cs new file mode 100644 index 0000000..6de0297 --- /dev/null +++ b/Assets/ModuleCore/ModuleVisual/VisualGenerator.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 可视化生成器 +/// +public abstract class VisualGenerator : MonoBehaviour { + + /// 更新可视化内容 + public abstract void CreateVisual(ref T visual, Transform original); + /// 释放可视化内容 + public abstract void ReleaseVisual(T visual); + + /// 创建可视化内容 + public static Type Create(Transform original, Transform parent) { + Transform temp = Instantiate(original, parent); + temp.gameObject.SetActive(true); + return temp.GetComponent(); + } +} diff --git a/Assets/ModuleCore/ModuleVisual/VisualGenerator.cs.meta b/Assets/ModuleCore/ModuleVisual/VisualGenerator.cs.meta new file mode 100644 index 0000000..41b170c --- /dev/null +++ b/Assets/ModuleCore/ModuleVisual/VisualGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29a91fefa7bcfe24da30d8514a51d25e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleVisual/VisualGenerator.meta b/Assets/ModuleCore/ModuleVisual/VisualGenerator.meta new file mode 100644 index 0000000..369a310 --- /dev/null +++ b/Assets/ModuleCore/ModuleVisual/VisualGenerator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 155db3b2435c1314492a3e51d1e9b711 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: