From 33647b230a1b8e088c37e7f6f95c231dc42e4058 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Wed, 25 Feb 2026 14:40:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(waveform):=20=E6=B7=BB=E5=8A=A0=20ScreenTo?= =?UTF-8?q?pLine=20=E8=84=9A=E6=9C=AC=E5=92=8C=20EmotionWaveManager=20?= =?UTF-8?q?=E9=A2=84=E5=88=B6=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../Resources/Prefabs/EmotionWaveManager.meta | 8 + .../EmotionWaveManager.prefab | 267 ++++++++++++++++++ .../EmotionWaveManager.prefab.meta | 7 + .../HuoShan/Waveform/ScreenTopLine.cs | 44 +++ .../HuoShan/Waveform/ScreenTopLine.cs.meta | 11 + 5 files changed, 337 insertions(+) create mode 100644 Assets/Resources/Prefabs/EmotionWaveManager.meta create mode 100644 Assets/Resources/Prefabs/EmotionWaveManager/EmotionWaveManager.prefab create mode 100644 Assets/Resources/Prefabs/EmotionWaveManager/EmotionWaveManager.prefab.meta create mode 100644 Assets/Scripts/MiniGame/HuoShan/Waveform/ScreenTopLine.cs create mode 100644 Assets/Scripts/MiniGame/HuoShan/Waveform/ScreenTopLine.cs.meta diff --git a/Assets/Resources/Prefabs/EmotionWaveManager.meta b/Assets/Resources/Prefabs/EmotionWaveManager.meta new file mode 100644 index 000000000..829a34883 --- /dev/null +++ b/Assets/Resources/Prefabs/EmotionWaveManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 33289bbb17e58634ca92731828ff0f3a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/EmotionWaveManager/EmotionWaveManager.prefab b/Assets/Resources/Prefabs/EmotionWaveManager/EmotionWaveManager.prefab new file mode 100644 index 000000000..b1a593cda --- /dev/null +++ b/Assets/Resources/Prefabs/EmotionWaveManager/EmotionWaveManager.prefab @@ -0,0 +1,267 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1158474293439102150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3208031037347286977} + - component: {fileID: 4957590901175815995} + m_Layer: 0 + m_Name: screen + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3208031037347286977 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158474293439102150} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 6, y: 4.5, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5725491576331893208} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &4957590901175815995 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158474293439102150} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 467777933 + m_SortingLayer: 12 + m_SortingOrder: 1 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &3850820144419654366 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3633542397260023535} + m_Layer: 0 + m_Name: EmotionWaveManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3633542397260023535 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3850820144419654366} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5725491576331893208} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3955116583166139733 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3391205051311966470} + m_Layer: 0 + m_Name: EmotionWaveRenderer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3391205051311966470 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3955116583166139733} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5725491576331893208} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5152220053619694838 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5725491576331893208} + m_Layer: 0 + m_Name: deviceContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5725491576331893208 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5152220053619694838} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -17.52, y: -2.31, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3391205051311966470} + - {fileID: 3208031037347286977} + - {fileID: 794389296329185367} + m_Father: {fileID: 3633542397260023535} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8931433174015964894 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 794389296329185367} + - component: {fileID: 4617409182804816234} + m_Layer: 0 + m_Name: background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &794389296329185367 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8931433174015964894} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 6.6, y: 4.95, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5725491576331893208} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &4617409182804816234 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8931433174015964894} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 467777933 + m_SortingLayer: 12 + m_SortingOrder: 0 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} + m_Color: {r: 0.3773585, g: 0.3773585, b: 0.3773585, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/Assets/Resources/Prefabs/EmotionWaveManager/EmotionWaveManager.prefab.meta b/Assets/Resources/Prefabs/EmotionWaveManager/EmotionWaveManager.prefab.meta new file mode 100644 index 000000000..4e3ab57e2 --- /dev/null +++ b/Assets/Resources/Prefabs/EmotionWaveManager/EmotionWaveManager.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a3d09c8bc9f4b4f47897ef20e8610f81 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/HuoShan/Waveform/ScreenTopLine.cs b/Assets/Scripts/MiniGame/HuoShan/Waveform/ScreenTopLine.cs new file mode 100644 index 000000000..fd58faf00 --- /dev/null +++ b/Assets/Scripts/MiniGame/HuoShan/Waveform/ScreenTopLine.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using Shapes; + +namespace AibisDream.MiniGame.HuoShan +{ + [ExecuteAlways] + public class ScreenTopLine : ImmediateModeShapeDrawer + { + [Header("Line Settings")] + [Tooltip("Reference to the screen transform")] + [SerializeField] private Transform screenTransform; + + [SerializeField] private Color lineColor = Color.cyan; + [SerializeField] private float thickness = 0.05f; + [SerializeField] private ThicknessSpace thicknessSpace = ThicknessSpace.Meters; + [SerializeField] private float yOffset = 0f; + + public override void DrawShapes(Camera cam) + { + if (screenTransform == null) return; + + using (Draw.Command(cam)) + { + Draw.ResetAllDrawStates(); + Draw.BlendMode = ShapesBlendMode.Transparent; + Draw.LineGeometry = LineGeometry.Flat2D; + Draw.ThicknessSpace = thicknessSpace; + Draw.Thickness = thickness; + + Vector3 pos = screenTransform.position; + Vector3 scale = screenTransform.lossyScale; + + float halfWidth = scale.x / 2f; + float halfHeight = scale.y / 2f; + + float topY = pos.y + halfHeight + yOffset; + Vector3 start = new Vector3(pos.x - halfWidth, topY, pos.z); + Vector3 end = new Vector3(pos.x + halfWidth, topY, pos.z); + + Draw.Line(start, end, lineColor); + } + } + } +} diff --git a/Assets/Scripts/MiniGame/HuoShan/Waveform/ScreenTopLine.cs.meta b/Assets/Scripts/MiniGame/HuoShan/Waveform/ScreenTopLine.cs.meta new file mode 100644 index 000000000..83e3a7a7e --- /dev/null +++ b/Assets/Scripts/MiniGame/HuoShan/Waveform/ScreenTopLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e4ac6bd4eb4ca24d9afebb3233bb676 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: