From 76809a829e33be03ad96766a0cdbfbddc05b5fa0 Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Thu, 20 Nov 2025 18:07:15 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E7=BD=91=E6=A0=BC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/AddressableAssetsData/link.xml | 535 ------------------ .../Editor/Inspector/BlockPuzzleGridEditor.cs | 30 + .../Inspector/BlockPuzzleGridEditor.cs.meta | 11 + Assets/Scenes/网格测试.unity | 345 +++++++++++ .../网格测试.unity.meta} | 4 +- Assets/Scripts/MiniGame/BlockPuzzle.meta | 8 + .../MiniGame/BlockPuzzle/BlockPuzzleGrid.cs | 214 +++++++ .../BlockPuzzle/BlockPuzzleGrid.cs.meta | 11 + .../BlockPuzzle/BlockPuzzleGridExample.cs | 148 +++++ .../BlockPuzzleGridExample.cs.meta | 11 + .../MiniGame/BlockPuzzle/BlockPuzzleSystem.cs | 16 + .../BlockPuzzle/BlockPuzzleSystem.cs.meta | 11 + .../MiniGame/BlockPuzzle/GridVisualizer.cs | 337 +++++++++++ .../BlockPuzzle/GridVisualizer.cs.meta | 11 + .../BlockPuzzle/IBlockPuzzleGameLogic.cs | 139 +++++ .../BlockPuzzle/IBlockPuzzleGameLogic.cs.meta | 11 + .../MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs | 122 ++++ .../BlockPuzzle/IBlockPuzzleGrid.cs.meta | 11 + .../MiniGame/BlockPuzzle/IBlockShape.cs | 106 ++++ .../MiniGame/BlockPuzzle/IBlockShape.cs.meta | 11 + .../BlockPuzzle/IBlockShapeFactory.cs | 57 ++ .../BlockPuzzle/IBlockShapeFactory.cs.meta | 11 + .../BlockPuzzle/IPlacementValidator.cs | 51 ++ .../BlockPuzzle/IPlacementValidator.cs.meta | 11 + 24 files changed, 1685 insertions(+), 537 deletions(-) delete mode 100644 Assets/AddressableAssetsData/link.xml create mode 100644 Assets/Editor/Inspector/BlockPuzzleGridEditor.cs create mode 100644 Assets/Editor/Inspector/BlockPuzzleGridEditor.cs.meta create mode 100644 Assets/Scenes/网格测试.unity rename Assets/{AddressableAssetsData/link.xml.meta => Scenes/网格测试.unity.meta} (62%) create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs.meta diff --git a/Assets/AddressableAssetsData/link.xml b/Assets/AddressableAssetsData/link.xml deleted file mode 100644 index 607d992ff..000000000 --- a/Assets/AddressableAssetsData/link.xml +++ /dev/null @@ -1,535 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs b/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs new file mode 100644 index 000000000..2ad6302c4 --- /dev/null +++ b/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs @@ -0,0 +1,30 @@ +using UnityEditor; +using UnityEngine; + +namespace AibisDream.SystemEditor +{ + [CustomEditor(typeof(BlockPuzzleGrid))] + public class BlockPuzzleGridEditor : Editor + { + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + var example = (BlockPuzzleGrid)target; + + EditorGUILayout.Separator(); + EditorGUILayout.BeginHorizontal(); + // 保存按钮 + if (GUILayout.Button("保存")) + { + // example.SaveStyle(); + } + + // 加载按钮 + if (GUILayout.Button("加载")) + { + // example.LoadStyle(); + } + EditorGUILayout.EndHorizontal(); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs.meta b/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs.meta new file mode 100644 index 000000000..fb40dde14 --- /dev/null +++ b/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7eb275cadab046c44a9f46f3f475145e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/网格测试.unity b/Assets/Scenes/网格测试.unity new file mode 100644 index 000000000..c8dffcca1 --- /dev/null +++ b/Assets/Scenes/网格测试.unity @@ -0,0 +1,345 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &791020753 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 791020756} + - component: {fileID: 791020755} + - component: {fileID: 791020754} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &791020754 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791020753} + m_Enabled: 1 +--- !u!20 &791020755 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791020753} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &791020756 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791020753} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1429030510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1429030511} + - component: {fileID: 1429030512} + m_Layer: 0 + m_Name: Block Puzzle Game + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1429030511 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1429030510} + 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: 1928610076} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1429030512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1429030510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfe4f41ce15355345b390aa2701f3f46, type: 3} + m_Name: + m_EditorClassIdentifier: + gridComponent: {fileID: 0} + gridVisualizer: {fileID: 0} + testPlaceKey: 32 + testClearKey: 99 +--- !u!1 &1928610075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1928610076} + - component: {fileID: 1928610078} + - component: {fileID: 1928610077} + m_Layer: 0 + m_Name: Grid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1928610076 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928610075} + 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: 1429030511} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1928610077 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928610075} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d364afd8a560b4447b86f55c52c73d7a, type: 3} + m_Name: + m_EditorClassIdentifier: + gridComponent: {fileID: 1928610078} + gridWidth: 10 + gridHeight: 10 + cellSize: 1 + showGridLines: 1 + showCellSprites: 1 + emptyCellColor: {r: 0.9, g: 0.9, b: 0.9, a: 0.3} + occupiedCellColor: {r: 0.2, g: 0.6, b: 1, a: 1} + gridLineColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} + gridLineWidth: 0.02 + cellSprite: {fileID: 0} + cellMaterial: {fileID: 0} +--- !u!114 &1928610078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928610075} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 990de8ef2a6774544b9bc9b64af0a8a5, type: 3} + m_Name: + m_EditorClassIdentifier: + width: 10 + height: 10 + cellSize: 1 + initializeOnStart: 1 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 791020756} + - {fileID: 1429030511} diff --git a/Assets/AddressableAssetsData/link.xml.meta b/Assets/Scenes/网格测试.unity.meta similarity index 62% rename from Assets/AddressableAssetsData/link.xml.meta rename to Assets/Scenes/网格测试.unity.meta index a297ca980..6d9ec06a5 100644 --- a/Assets/AddressableAssetsData/link.xml.meta +++ b/Assets/Scenes/网格测试.unity.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: d54d55d9be1bc4d4b9eadd960d993a80 -TextScriptImporter: +guid: d4b95f599ab563c45a074014a67459fb +DefaultImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle.meta b/Assets/Scripts/MiniGame/BlockPuzzle.meta new file mode 100644 index 000000000..f936d9cbc --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f38a6a6bc9a88284496050743d6247e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs new file mode 100644 index 000000000..4936c995c --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs @@ -0,0 +1,214 @@ +using UnityEngine; + +namespace AibisDream +{ + /// + /// BlockPuzzle网格组件 + /// 实现IBlockPuzzleGrid接口,管理整个游戏网格的状态和操作 + /// + public class BlockPuzzleGrid : MonoBehaviour, IBlockPuzzleGrid + { + [Header("网格设置")] + [SerializeField] private int width = 10; + [SerializeField] private int height = 10; + [SerializeField] private float cellSize = 1f; + [SerializeField] private bool initializeOnStart = true; + + private GridCellState[,] _grid; + private bool _isInitialized = false; + + // IBlockPuzzleGrid 接口实现 + public int Width { get; private set; } + public int Height { get; private set; } + public float CellSize { get; private set; } + public Vector3 Origin { get; private set; } + + private void Start() + { + if (initializeOnStart) + { + Initialize(width, height, cellSize, transform.position); + } + } + + /// + /// 初始化网格 + /// + public void Initialize(int width, int height, float cellSize, Vector3 origin) + { + if (width <= 0 || height <= 0) + { + Debug.LogError($"BlockPuzzleGridComponent: 无效的网格尺寸 {width}x{height}"); + return; + } + + if (cellSize <= 0) + { + Debug.LogError($"BlockPuzzleGridComponent: 无效的单元格大小 {cellSize}"); + return; + } + + this.width = width; + this.height = height; + this.cellSize = cellSize; + + Width = width; + Height = height; + CellSize = cellSize; + Origin = origin; + _grid = new GridCellState[width, height]; + _isInitialized = true; + + Clear(); + } + + /// + /// 使用Inspector中的参数初始化网格 + /// + public void Initialize() + { + Initialize(width, height, cellSize, transform.position); + } + + /// + /// 重新初始化网格(使用新的参数) + /// + public void Reinitialize(int newWidth, int newHeight, float newCellSize) + { + Initialize(newWidth, newHeight, newCellSize, transform.position); + } + + public GridCellState GetCellState(int x, int y) + { + if (!_isInitialized) + { + Debug.LogWarning("BlockPuzzleGridComponent: 网格未初始化"); + return GridCellState.Empty; + } + + if (!IsValidPosition(x, y)) + { + Debug.LogWarning($"BlockPuzzleGridComponent: 尝试访问无效位置 ({x}, {y})"); + return GridCellState.Empty; + } + + return _grid[x, y]; + } + + public void SetCellState(int x, int y, GridCellState state) + { + if (!_isInitialized) + { + Debug.LogWarning("BlockPuzzleGridComponent: 网格未初始化"); + return; + } + + if (!IsValidPosition(x, y)) + { + Debug.LogWarning($"BlockPuzzleGridComponent: 尝试设置无效位置 ({x}, {y})"); + return; + } + + _grid[x, y] = state; + } + + public bool IsValidPosition(int x, int y) + { + return _isInitialized && x >= 0 && x < Width && y >= 0 && y < Height; + } + + public bool IsCellEmpty(int x, int y) + { + return IsValidPosition(x, y) && GetCellState(x, y) == GridCellState.Empty; + } + + public bool WorldToGrid(Vector3 worldPos, out int gridX, out int gridY) + { + if (!_isInitialized) + { + gridX = 0; + gridY = 0; + return false; + } + + Vector3 localPos = worldPos - Origin; + gridX = Mathf.FloorToInt(localPos.x / CellSize); + gridY = Mathf.FloorToInt(localPos.y / CellSize); + + // 检查是否在有效范围内 + if (!IsValidPosition(gridX, gridY)) + { + return false; + } + + return true; + } + + public Vector3 GridToWorld(int gridX, int gridY) + { + if (!_isInitialized) + { + return transform.position; + } + + // 返回单元格中心的世界坐标 + float worldX = Origin.x + (gridX + 0.5f) * CellSize; + float worldY = Origin.y + (gridY + 0.5f) * CellSize; + return new Vector3(worldX, worldY, Origin.z); + } + + public void Clear() + { + if (!_isInitialized || _grid == null) return; + + for (int x = 0; x < Width; x++) + { + for (int y = 0; y < Height; y++) + { + _grid[x, y] = GridCellState.Empty; + } + } + } + + public int GetOccupiedCount() + { + if (!_isInitialized || _grid == null) return 0; + + int count = 0; + for (int x = 0; x < Width; x++) + { + for (int y = 0; y < Height; y++) + { + if (_grid[x, y] == GridCellState.Occupied) + { + count++; + } + } + } + + return count; + } + + public int GetTotalCellCount() + { + return Width * Height; + } + + /// + /// 检查网格是否已初始化 + /// + public bool IsInitialized() + { + return _isInitialized; + } + + private void OnValidate() + { + // 确保参数有效 + width = Mathf.Max(1, width); + height = Mathf.Max(1, height); + cellSize = Mathf.Max(0.1f, cellSize); + } + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs.meta new file mode 100644 index 000000000..4d53546f0 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 990de8ef2a6774544b9bc9b64af0a8a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs new file mode 100644 index 000000000..bf298d12a --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs @@ -0,0 +1,148 @@ +using UnityEngine; + +namespace AibisDream +{ + /// + /// BlockPuzzle网格系统使用示例 + /// 演示如何使用网格系统和可视化组件 + /// + public class BlockPuzzleGridExample : MonoBehaviour + { + [Header("组件引用")] + [SerializeField] private BlockPuzzleGrid gridComponent; + [SerializeField] private GridVisualizer gridVisualizer; + + [Header("测试设置")] + [SerializeField] private KeyCode testPlaceKey = KeyCode.Space; + [SerializeField] private KeyCode testClearKey = KeyCode.C; + + private IBlockPuzzleGrid _grid; + + private void Start() + { + // 初始化网格组件 + if (gridComponent != null) + { + gridComponent.Initialize(); + _grid = gridComponent; // 组件直接实现IBlockPuzzleGrid接口 + } + + // 设置可视化器 + if (gridVisualizer != null && _grid != null) + { + gridVisualizer.SetGrid(_grid); + } + } + + private void Update() + { + if (_grid == null) return; + + // 测试:按空格键随机放置一个格子 + if (Input.GetKeyDown(testPlaceKey)) + { + TestPlaceRandomCell(); + } + + // 测试:按C键清空网格 + if (Input.GetKeyDown(testClearKey)) + { + TestClearGrid(); + } + + // 测试:鼠标点击放置格子 + if (Input.GetMouseButtonDown(0)) + { + TestPlaceCellAtMouse(); + } + } + + /// + /// 测试:在随机位置放置一个格子 + /// + private void TestPlaceRandomCell() + { + if (_grid == null) return; + + int x = Random.Range(0, _grid.Width); + int y = Random.Range(0, _grid.Height); + + if (_grid.IsCellEmpty(x, y)) + { + _grid.SetCellState(x, y, GridCellState.Occupied); + Debug.Log($"放置格子到位置 ({x}, {y})"); + + // 更新可视化 + if (gridVisualizer != null) + { + gridVisualizer.UpdateCellVisual(x, y); + } + } + } + + /// + /// 测试:在鼠标位置放置格子 + /// + private void TestPlaceCellAtMouse() + { + if (_grid == null) return; + + // 获取鼠标世界坐标(需要根据你的相机设置调整) + Camera cam = Camera.main; + if (cam == null) return; + + Vector3 mousePos = Input.mousePosition; + mousePos.z = cam.nearClipPlane + 1f; // 设置合适的Z距离 + Vector3 worldPos = cam.ScreenToWorldPoint(mousePos); + + // 转换为网格坐标 + if (_grid.WorldToGrid(worldPos, out int gridX, out int gridY)) + { + if (_grid.IsCellEmpty(gridX, gridY)) + { + _grid.SetCellState(gridX, gridY, GridCellState.Occupied); + Debug.Log($"鼠标点击放置格子到位置 ({gridX}, {gridY})"); + + // 更新可视化 + if (gridVisualizer != null) + { + gridVisualizer.UpdateCellVisual(gridX, gridY); + } + } + } + } + + /// + /// 测试:清空网格 + /// + private void TestClearGrid() + { + if (_grid == null) return; + + _grid.Clear(); + Debug.Log("清空网格"); + + // 更新可视化 + if (gridVisualizer != null) + { + gridVisualizer.UpdateAllCellsVisual(); + } + } + + private void OnGUI() + { + if (_grid == null) return; + + GUILayout.BeginArea(new Rect(10, 10, 300, 200)); + GUILayout.Label($"网格尺寸: {_grid.Width} x {_grid.Height}"); + GUILayout.Label($"单元格大小: {_grid.CellSize}"); + GUILayout.Label($"已占用: {_grid.GetOccupiedCount()} / {_grid.GetTotalCellCount()}"); + GUILayout.Space(10); + GUILayout.Label($"按 {testPlaceKey} 键:随机放置格子"); + GUILayout.Label($"按 {testClearKey} 键:清空网格"); + GUILayout.Label("鼠标左键:在鼠标位置放置格子"); + GUILayout.EndArea(); + } + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs.meta new file mode 100644 index 000000000..0fdf9130c --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cfe4f41ce15355345b390aa2701f3f46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs new file mode 100644 index 000000000..b77d7b446 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AibisDream +{ + /// + /// BlockPuzzle游戏系统 + /// 整合所有子系统的核心控制器 + /// + public class BlockPuzzleSystem : MonoBehaviour + { + // 接口引用将在实现类中注入 + // 这里先定义基础框架接口结构 + } +} diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs.meta new file mode 100644 index 000000000..12d2b626c --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c452a931d2651e5449cf3779882cad19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs b/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs new file mode 100644 index 000000000..1e6838497 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs @@ -0,0 +1,337 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace AibisDream +{ + /// + /// 网格可视化组件 + /// 负责在Unity场景中可视化显示网格和单元格状态 + /// + public class GridVisualizer : MonoBehaviour + { + [Header("网格配置")] + [SerializeField] private BlockPuzzleGrid gridComponent; + [SerializeField] private int gridWidth = 10; + [SerializeField] private int gridHeight = 10; + [SerializeField] private float cellSize = 1f; + + private IBlockPuzzleGrid _grid; + + [Header("可视化设置")] + [SerializeField] private bool showGridLines = true; + [SerializeField] private bool showCellSprites = true; + [SerializeField] private Color emptyCellColor = new Color(0.9f, 0.9f, 0.9f, 0.3f); + [SerializeField] private Color occupiedCellColor = new Color(0.2f, 0.6f, 1f, 1f); + [SerializeField] private Color gridLineColor = new Color(0.5f, 0.5f, 0.5f, 0.5f); + [SerializeField] private float gridLineWidth = 0.02f; + + [Header("预制体(可选)")] + [SerializeField] private Sprite cellSprite; + [SerializeField] private Material cellMaterial; + + // 单元格可视化对象池 + private Dictionary<(int x, int y), GameObject> _cellObjects = new Dictionary<(int x, int y), GameObject>(); + private GameObject _gridLinesParent; + private GameObject _cellsParent; + private BlockPuzzleGrid _internalGrid; + + private void Awake() + { + // 创建父对象用于组织层级 + _gridLinesParent = new GameObject("GridLines"); + _gridLinesParent.transform.SetParent(transform); + _gridLinesParent.transform.localPosition = Vector3.zero; + + _cellsParent = new GameObject("Cells"); + _cellsParent.transform.SetParent(transform); + _cellsParent.transform.localPosition = Vector3.zero; + } + + private void Start() + { + InitializeGrid(); + } + + /// + /// 初始化网格 + /// + public void InitializeGrid() + { + // 优先使用外部网格组件 + if (gridComponent != null) + { + // 如果组件还没有初始化,先初始化它 + if (!gridComponent.IsInitialized()) + { + gridComponent.Initialize(); + } + _grid = gridComponent; + } + else + { + // 如果没有外部网格,创建内部网格组件 + if (_internalGrid == null) + { + _internalGrid = gameObject.GetComponent(); + if (_internalGrid == null) + { + _internalGrid = gameObject.AddComponent(); + } + } + _internalGrid.Initialize(gridWidth, gridHeight, cellSize, transform.position); + _grid = _internalGrid; + } + + CreateVisualization(); + } + + /// + /// 设置网格引用 + /// + public void SetGrid(IBlockPuzzleGrid grid) + { + _grid = grid; + ClearVisualization(); + CreateVisualization(); + } + + /// + /// 创建可视化 + /// + private void CreateVisualization() + { + if (_grid == null) return; + + if (showGridLines) + { + DrawGridLines(); + } + + if (showCellSprites) + { + CreateCellSprites(); + } + } + + /// + /// 绘制网格线 + /// + private void DrawGridLines() + { + // 清除旧的网格线 + foreach (Transform child in _gridLinesParent.transform) + { + if (Application.isPlaying) + { + Destroy(child.gameObject); + } + else + { + DestroyImmediate(child.gameObject); + } + } + + // 创建网格线(使用LineRenderer或简单的Quad) + for (int x = 0; x <= _grid.Width; x++) + { + CreateLine( + _grid.GridToWorld(x, 0), + _grid.GridToWorld(x, _grid.Height), + gridLineWidth, + gridLineColor + ); + } + + for (int y = 0; y <= _grid.Height; y++) + { + CreateLine( + _grid.GridToWorld(0, y), + _grid.GridToWorld(_grid.Width, y), + gridLineWidth, + gridLineColor + ); + } + } + + /// + /// 创建一条线 + /// + private void CreateLine(Vector3 start, Vector3 end, float width, Color color) + { + GameObject lineObj = new GameObject("GridLine"); + lineObj.transform.SetParent(_gridLinesParent.transform); + lineObj.transform.localPosition = Vector3.zero; + + LineRenderer lineRenderer = lineObj.AddComponent(); + lineRenderer.useWorldSpace = true; + lineRenderer.positionCount = 2; + lineRenderer.SetPosition(0, start); + lineRenderer.SetPosition(1, end); + lineRenderer.startWidth = width; + lineRenderer.endWidth = width; + lineRenderer.material = new Material(Shader.Find("Sprites/Default")); + lineRenderer.startColor = color; + lineRenderer.endColor = color; + lineRenderer.sortingOrder = 0; + } + + /// + /// 创建单元格精灵 + /// + private void CreateCellSprites() + { + // 清除旧的单元格 + ClearCellSprites(); + + // 为每个单元格创建可视化对象 + for (int x = 0; x < _grid.Width; x++) + { + for (int y = 0; y < _grid.Height; y++) + { + CreateCellSprite(x, y); + } + } + } + + /// + /// 创建单个单元格精灵 + /// + private void CreateCellSprite(int x, int y) + { + GameObject cellObj = new GameObject($"Cell_{x}_{y}"); + cellObj.transform.SetParent(_cellsParent.transform); + cellObj.transform.position = _grid.GridToWorld(x, y); + + SpriteRenderer spriteRenderer = cellObj.AddComponent(); + + // 如果没有指定Sprite,创建一个简单的白色Sprite + if (cellSprite == null) + { + cellSprite = CreateDefaultSprite(); + } + + spriteRenderer.sprite = cellSprite; + spriteRenderer.color = emptyCellColor; + spriteRenderer.sortingOrder = 1; + + // 设置大小 + float spriteSize = _grid.CellSize * 0.9f; // 稍微小一点,留出网格线空间 + cellObj.transform.localScale = new Vector3(spriteSize, spriteSize, 1f); + + // 如果有材质,应用材质 + if (cellMaterial != null) + { + spriteRenderer.material = cellMaterial; + } + + _cellObjects[(x, y)] = cellObj; + } + + /// + /// 创建默认的白色Sprite + /// + private Sprite CreateDefaultSprite() + { + Texture2D texture = new Texture2D(1, 1); + texture.SetPixel(0, 0, Color.white); + texture.Apply(); + return Sprite.Create(texture, new Rect(0, 0, 1, 1), new Vector2(0.5f, 0.5f), 1f); + } + + /// + /// 更新单元格可视化状态 + /// + public void UpdateCellVisual(int x, int y) + { + if (!_cellObjects.TryGetValue((x, y), out GameObject cellObj)) + { + return; + } + + SpriteRenderer spriteRenderer = cellObj.GetComponent(); + if (spriteRenderer == null) return; + + GridCellState state = _grid.GetCellState(x, y); + spriteRenderer.color = state == GridCellState.Occupied ? occupiedCellColor : emptyCellColor; + } + + /// + /// 更新所有单元格可视化 + /// + public void UpdateAllCellsVisual() + { + if (_grid == null) return; + + for (int x = 0; x < _grid.Width; x++) + { + for (int y = 0; y < _grid.Height; y++) + { + UpdateCellVisual(x, y); + } + } + } + + /// + /// 清除单元格精灵 + /// + private void ClearCellSprites() + { + foreach (var kvp in _cellObjects) + { + if (Application.isPlaying) + { + Destroy(kvp.Value); + } + else + { + DestroyImmediate(kvp.Value); + } + } + _cellObjects.Clear(); + } + + /// + /// 清除所有可视化 + /// + private void ClearVisualization() + { + ClearCellSprites(); + + foreach (Transform child in _gridLinesParent.transform) + { + if (Application.isPlaying) + { + Destroy(child.gameObject); + } + else + { + DestroyImmediate(child.gameObject); + } + } + } + + private void OnDestroy() + { + ClearVisualization(); + } + + // 在编辑器中预览网格 + private void OnDrawGizmos() + { + if (_grid == null) return; + + // 绘制网格边界 + Gizmos.color = gridLineColor; + Vector3 bottomLeft = _grid.GridToWorld(0, 0); + Vector3 bottomRight = _grid.GridToWorld(_grid.Width, 0); + Vector3 topLeft = _grid.GridToWorld(0, _grid.Height); + Vector3 topRight = _grid.GridToWorld(_grid.Width, _grid.Height); + + Gizmos.DrawLine(bottomLeft, bottomRight); + Gizmos.DrawLine(bottomRight, topRight); + Gizmos.DrawLine(topRight, topLeft); + Gizmos.DrawLine(topLeft, bottomLeft); + } + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs.meta new file mode 100644 index 000000000..447775593 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d364afd8a560b4447b86f55c52c73d7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs new file mode 100644 index 000000000..b5986dc1f --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs @@ -0,0 +1,139 @@ +using System; + +namespace AibisDream +{ + /// + /// 游戏状态 + /// + public enum GameState + { + NotStarted, // 未开始 + Playing, // 游戏中 + Paused, // 暂停 + GameOver // 游戏结束 + } + + /// + /// 游戏逻辑接口 + /// 负责管理游戏的整体流程和状态 + /// + public interface IBlockPuzzleGameLogic + { + /// + /// 当前游戏状态 + /// + GameState CurrentState { get; } + + /// + /// 当前分数(已放置的格子数量) + /// + int Score { get; } + + /// + /// 当前选中的形状 + /// + IBlockShape CurrentShape { get; } + + /// + /// 网格系统 + /// + IBlockPuzzleGrid Grid { get; } + + /// + /// 放置验证器 + /// + IPlacementValidator Validator { get; } + + /// + /// 游戏开始事件 + /// + event Action OnGameStart; + + /// + /// 游戏结束事件 + /// + event Action OnGameOver; + + /// + /// 形状放置成功事件 + /// + event Action OnShapePlaced; + + /// + /// 形状放置失败事件 + /// + event Action OnShapePlaceFailed; + + /// + /// 分数变化事件 + /// + event Action OnScoreChanged; + + /// + /// 初始化游戏 + /// + /// 网格宽度 + /// 网格高度 + void InitializeGame(int gridWidth, int gridHeight); + + /// + /// 开始游戏 + /// + void StartGame(); + + /// + /// 暂停游戏 + /// + void PauseGame(); + + /// + /// 继续游戏 + /// + void ResumeGame(); + + /// + /// 结束游戏 + /// + void EndGame(); + + /// + /// 重置游戏 + /// + void ResetGame(); + + /// + /// 选择形状 + /// + /// 要选择的形状 + void SelectShape(IBlockShape shape); + + /// + /// 尝试放置当前选中的形状到指定位置 + /// + /// 网格X坐标 + /// 网格Y坐标 + /// 是否放置成功 + bool TryPlaceShape(int gridX, int gridY); + + /// + /// 旋转当前选中的形状 + /// + /// 旋转角度 + void RotateCurrentShape(RotationAngle angle); + + /// + /// 检查是否还有可放置的形状 + /// + /// 可用的形状列表 + /// 是否还有可放置的形状 + bool HasPlaceableShapes(IBlockShape[] availableShapes); + + /// + /// 获取下一个可用的形状 + /// + /// 形状池 + /// 下一个形状,如果没有则返回null + IBlockShape GetNextShape(IBlockShape[] shapePool); + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs.meta new file mode 100644 index 000000000..fa33a1d4a --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4603b37a885792d4b85d6d5d392d4862 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs new file mode 100644 index 000000000..1005788f9 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs @@ -0,0 +1,122 @@ +using UnityEngine; + +namespace AibisDream +{ + /// + /// 网格单元格状态 + /// + public enum GridCellState + { + Empty = 0, // 空 + Occupied = 1 // 已占用 + } + + /// + /// 游戏网格系统接口(整个网格) + /// 负责管理整个游戏网格的状态和操作,包括: + /// - 网格的整体尺寸和配置 + /// - 所有单元格的状态管理 + /// - 坐标转换(世界坐标 ↔ 网格坐标) + /// - 网格级别的操作(清空、统计等) + /// + /// 注意:单个单元格(Cell)通过坐标访问,没有独立接口 + /// + public interface IBlockPuzzleGrid + { + /// + /// 网格宽度 + /// + int Width { get; } + + /// + /// 网格高度 + /// + int Height { get; } + + /// + /// 网格单元格大小(世界单位) + /// + float CellSize { get; } + + /// + /// 网格原点位置(世界坐标) + /// + Vector3 Origin { get; } + + /// + /// 初始化网格 + /// + /// 宽度 + /// 高度 + /// 单元格大小 + /// 原点位置 + void Initialize(int width, int height, float cellSize, Vector3 origin); + + /// + /// 获取指定位置的单元格状态 + /// + /// 网格X坐标 + /// 网格Y坐标 + /// 单元格状态 + GridCellState GetCellState(int x, int y); + + /// + /// 设置指定位置的单元格状态 + /// + /// 网格X坐标 + /// 网格Y坐标 + /// 单元格状态 + void SetCellState(int x, int y, GridCellState state); + + /// + /// 检查指定位置是否在网格范围内 + /// + /// 网格X坐标 + /// 网格Y坐标 + /// 是否在范围内 + bool IsValidPosition(int x, int y); + + /// + /// 检查指定位置是否为空 + /// + /// 网格X坐标 + /// 网格Y坐标 + /// 是否为空 + bool IsCellEmpty(int x, int y); + + /// + /// 世界坐标转换为网格坐标 + /// + /// 世界坐标 + /// 输出的网格X坐标 + /// 输出的网格Y坐标 + /// 是否转换成功 + bool WorldToGrid(Vector3 worldPos, out int gridX, out int gridY); + + /// + /// 网格坐标转换为世界坐标 + /// + /// 网格X坐标 + /// 网格Y坐标 + /// 世界坐标 + Vector3 GridToWorld(int gridX, int gridY); + + /// + /// 清空整个网格 + /// + void Clear(); + + /// + /// 获取已占用的单元格数量 + /// + /// 已占用的单元格数量 + int GetOccupiedCount(); + + /// + /// 获取总单元格数量 + /// + /// 总单元格数量 + int GetTotalCellCount(); + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs.meta new file mode 100644 index 000000000..286711bcc --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44bbdf523b438ef4aa34868e92b91aed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs new file mode 100644 index 000000000..f0e51bc91 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs @@ -0,0 +1,106 @@ +using UnityEngine; + +namespace AibisDream +{ + /// + /// 形状旋转角度 + /// + public enum RotationAngle + { + Rotate0 = 0, // 0度 + Rotate90 = 90, // 90度 + Rotate180 = 180, // 180度 + Rotate270 = 270 // 270度 + } + + /// + /// 形状块接口 + /// 负责管理形状的数据和操作 + /// + public interface IBlockShape + { + /// + /// 形状的唯一ID + /// + int ShapeId { get; } + + /// + /// 形状名称 + /// + string ShapeName { get; } + + /// + /// 当前旋转角度 + /// + RotationAngle CurrentRotation { get; } + + /// + /// 获取当前形状的宽度(考虑旋转) + /// + int Width { get; } + + /// + /// 获取当前形状的高度(考虑旋转) + /// + int Height { get; } + + /// + /// 获取形状占用的格子数量 + /// + int BlockCount { get; } + + /// + /// 获取原始形状模式(未旋转) + /// + /// 二维数组,1表示有格子,0表示空 + int[,] GetOriginalPattern(); + + /// + /// 获取当前形状模式(考虑旋转) + /// + /// 二维数组,1表示有格子,0表示空 + int[,] GetCurrentPattern(); + + /// + /// 旋转形状 + /// + /// 旋转角度 + void Rotate(RotationAngle angle); + + /// + /// 顺时针旋转90度 + /// + void RotateClockwise(); + + /// + /// 逆时针旋转90度 + /// + void RotateCounterClockwise(); + + /// + /// 重置旋转角度为0 + /// + void ResetRotation(); + + /// + /// 检查指定位置是否有格子 + /// + /// 形状内的X坐标(相对坐标) + /// 形状内的Y坐标(相对坐标) + /// 是否有格子 + bool HasBlockAt(int x, int y); + + /// + /// 获取形状的所有格子位置(相对坐标) + /// + /// 格子位置列表 + Vector2Int[] GetBlockPositions(); + + /// + /// 创建形状的副本 + /// + /// 形状副本 + IBlockShape Clone(); + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs.meta new file mode 100644 index 000000000..8387aaece --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3b17304622be4e46b270e3d475b1300 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs new file mode 100644 index 000000000..18d52bcb5 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs @@ -0,0 +1,57 @@ +namespace AibisDream +{ + /// + /// 形状工厂接口 + /// 负责创建和管理形状对象 + /// + public interface IBlockShapeFactory + { + /// + /// 创建指定ID的形状 + /// + /// 形状ID + /// 形状对象,如果ID不存在则返回null + IBlockShape CreateShape(int shapeId); + + /// + /// 创建指定名称的形状 + /// + /// 形状名称 + /// 形状对象,如果名称不存在则返回null + IBlockShape CreateShape(string shapeName); + + /// + /// 创建随机形状 + /// + /// 随机形状对象 + IBlockShape CreateRandomShape(); + + /// + /// 获取所有可用的形状ID列表 + /// + /// 形状ID数组 + int[] GetAllShapeIds(); + + /// + /// 获取所有可用的形状名称列表 + /// + /// 形状名称数组 + string[] GetAllShapeNames(); + + /// + /// 注册新形状 + /// + /// 形状ID + /// 形状名称 + /// 形状模式(二维数组) + void RegisterShape(int shapeId, string shapeName, int[,] pattern); + + /// + /// 检查形状ID是否存在 + /// + /// 形状ID + /// 是否存在 + bool HasShape(int shapeId); + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs.meta new file mode 100644 index 000000000..611459543 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 735c986ae1357ab489f5a5951ffb4bde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs new file mode 100644 index 000000000..72ed54e51 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs @@ -0,0 +1,51 @@ +namespace AibisDream +{ + /// + /// 放置验证结果 + /// + public enum PlacementResult + { + Success, // 可以放置 + OutOfBounds, // 超出边界 + Overlap, // 与已有块重叠 + InvalidPosition // 无效位置 + } + + /// + /// 放置检测接口 + /// 负责验证形状是否可以放置在指定位置 + /// + public interface IPlacementValidator + { + /// + /// 检查形状是否可以放置在指定位置 + /// + /// 网格系统 + /// 要放置的形状 + /// 网格X坐标(形状左上角位置) + /// 网格Y坐标(形状左上角位置) + /// 放置验证结果 + PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY); + + /// + /// 检查形状是否可以放置在指定位置(详细版本) + /// + /// 网格系统 + /// 要放置的形状 + /// 网格X坐标(形状左上角位置) + /// 网格Y坐标(形状左上角位置) + /// 失败原因(如果返回false) + /// 是否可以放置 + bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason); + + /// + /// 获取形状在指定位置的所有占用格子坐标 + /// + /// 形状 + /// 网格X坐标(形状左上角位置) + /// 网格Y坐标(形状左上角位置) + /// 占用格子的网格坐标数组 + (int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY); + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs.meta new file mode 100644 index 000000000..04b726752 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4ebc4e9f404ead41ac713a7a31fe330 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 06a68cda8ea0b75e9468e803906fffbd59eaa79d Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Thu, 27 Nov 2025 18:14:24 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E6=96=B9=E5=9D=97=E6=8B=BC=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...uzzleGridEditor.cs => BlockShaprEditor.cs} | 21 +- ...ditor.cs.meta => BlockShaprEditor.cs.meta} | 2 +- Assets/Language/UIText/UIText_zh-Hans.asset | 2 +- Assets/Scenes/网格测试.unity | 1019 ++++++++++++++++- .../Scripts/MiniGame/BlockPuzzle/Class.meta | 8 + .../{ => Class}/BlockPuzzleGrid.cs | 112 ++ .../{ => Class}/BlockPuzzleGrid.cs.meta | 0 .../{ => Class}/BlockPuzzleGridExample.cs | 0 .../BlockPuzzleGridExample.cs.meta | 0 .../MiniGame/BlockPuzzle/Class/BlockShape.cs | 381 ++++++ .../BlockPuzzle/Class/BlockShape.cs.meta | 11 + .../BlockPuzzle/Class/BlockShapeDragger.cs | 405 +++++++ .../Class/BlockShapeDragger.cs.meta | 11 + .../BlockPuzzle/{ => Class}/GridVisualizer.cs | 8 +- .../{ => Class}/GridVisualizer.cs.meta | 0 .../BlockPuzzle/Class/PlacementValidator.cs | 112 ++ .../Class/PlacementValidator.cs.meta | 11 + .../MiniGame/BlockPuzzle/Interface.meta | 8 + .../{ => Interface}/IBlockPuzzleGameLogic.cs | 0 .../IBlockPuzzleGameLogic.cs.meta | 0 .../{ => Interface}/IBlockPuzzleGrid.cs | 6 + .../{ => Interface}/IBlockPuzzleGrid.cs.meta | 0 .../{ => Interface}/IBlockShape.cs | 2 +- .../{ => Interface}/IBlockShape.cs.meta | 0 .../Interface/IBlockShapeDragger.cs | 105 ++ .../Interface/IBlockShapeDragger.cs.meta | 11 + .../{ => Interface}/IBlockShapeFactory.cs | 0 .../IBlockShapeFactory.cs.meta | 0 .../{ => Interface}/IPlacementValidator.cs | 13 +- .../IPlacementValidator.cs.meta | 0 Assets/Scripts/Utility/CommonUtil.cs | 58 + 31 files changed, 2262 insertions(+), 44 deletions(-) rename Assets/Editor/Inspector/{BlockPuzzleGridEditor.cs => BlockShaprEditor.cs} (51%) rename Assets/Editor/Inspector/{BlockPuzzleGridEditor.cs.meta => BlockShaprEditor.cs.meta} (83%) create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class.meta rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Class}/BlockPuzzleGrid.cs (54%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Class}/BlockPuzzleGrid.cs.meta (100%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Class}/BlockPuzzleGridExample.cs (100%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Class}/BlockPuzzleGridExample.cs.meta (100%) create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs.meta rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Class}/GridVisualizer.cs (97%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Class}/GridVisualizer.cs.meta (100%) create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Interface.meta rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IBlockPuzzleGameLogic.cs (100%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IBlockPuzzleGameLogic.cs.meta (100%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IBlockPuzzleGrid.cs (95%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IBlockPuzzleGrid.cs.meta (100%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IBlockShape.cs (98%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IBlockShape.cs.meta (100%) create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs.meta rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IBlockShapeFactory.cs (100%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IBlockShapeFactory.cs.meta (100%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IPlacementValidator.cs (82%) rename Assets/Scripts/MiniGame/BlockPuzzle/{ => Interface}/IPlacementValidator.cs.meta (100%) diff --git a/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs b/Assets/Editor/Inspector/BlockShaprEditor.cs similarity index 51% rename from Assets/Editor/Inspector/BlockPuzzleGridEditor.cs rename to Assets/Editor/Inspector/BlockShaprEditor.cs index 2ad6302c4..021b9e91f 100644 --- a/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs +++ b/Assets/Editor/Inspector/BlockShaprEditor.cs @@ -3,26 +3,23 @@ using UnityEngine; namespace AibisDream.SystemEditor { - [CustomEditor(typeof(BlockPuzzleGrid))] - public class BlockPuzzleGridEditor : Editor + [CustomEditor(typeof(BlockShape))] + public class BlockShapeEditor : Editor { public override void OnInspectorGUI() { base.OnInspectorGUI(); - var example = (BlockPuzzleGrid)target; - EditorGUILayout.Separator(); + var example = (BlockShape)target; EditorGUILayout.BeginHorizontal(); - // 保存按钮 + // 增加绘制形状和保存形状按钮 + if (GUILayout.Button("绘制")) + { + example.DrawShape(); + } if (GUILayout.Button("保存")) { - // example.SaveStyle(); - } - - // 加载按钮 - if (GUILayout.Button("加载")) - { - // example.LoadStyle(); + example.SaveShape(); } EditorGUILayout.EndHorizontal(); } diff --git a/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs.meta b/Assets/Editor/Inspector/BlockShaprEditor.cs.meta similarity index 83% rename from Assets/Editor/Inspector/BlockPuzzleGridEditor.cs.meta rename to Assets/Editor/Inspector/BlockShaprEditor.cs.meta index fb40dde14..6ab775eca 100644 --- a/Assets/Editor/Inspector/BlockPuzzleGridEditor.cs.meta +++ b/Assets/Editor/Inspector/BlockShaprEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7eb275cadab046c44a9f46f3f475145e +guid: 73fc356b22fa6a147be7a2eb9c78f123 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Language/UIText/UIText_zh-Hans.asset b/Assets/Language/UIText/UIText_zh-Hans.asset index df174b5f0..270bd717d 100644 --- a/Assets/Language/UIText/UIText_zh-Hans.asset +++ b/Assets/Language/UIText/UIText_zh-Hans.asset @@ -24,7 +24,7 @@ MonoBehaviour: m_Metadata: m_Items: [] - m_Id: 22296654778368 - m_Localized: "\u7231&\u673A\u5668\u4EBA\\n\u7EF4\u4FEE\u6280\u672F" + m_Localized: "\u7231\u4E0E\u673A\u5668\u4EBA\\n\u7EF4\u4FEE\u6280\u672F" m_Metadata: m_Items: - rid: 7917695939544875419 diff --git a/Assets/Scenes/网格测试.unity b/Assets/Scenes/网格测试.unity index c8dffcca1..cee6a404e 100644 --- a/Assets/Scenes/网格测试.unity +++ b/Assets/Scenes/网格测试.unity @@ -123,6 +123,552 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &199240525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 199240526} + - component: {fileID: 199240527} + m_Layer: 0 + m_Name: Cell_0_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &199240526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199240525} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1147676901} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &199240527 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199240525} + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 431031536} + m_Color: {r: 1, g: 1, b: 1, 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 &224755568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224755569} + - component: {fileID: 224755570} + m_Layer: 0 + m_Name: Cell_1_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &224755569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224755568} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1147676901} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &224755570 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224755568} + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 431031536} + m_Color: {r: 1, g: 1, b: 1, 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 &397665472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 397665473} + - component: {fileID: 397665474} + m_Layer: 0 + m_Name: Cell_0_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &397665473 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397665472} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.01, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1147676901} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &397665474 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397665472} + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 431031536} + m_Color: {r: 1, g: 1, b: 1, 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!213 &431031536 +Sprite: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_Offset: {x: 0, y: 0} + m_Border: {x: 0, y: 0, z: 0, w: 0} + m_PixelsToUnits: 1 + m_Pivot: {x: 0.5, y: 0.5} + m_Extrude: 0 + m_IsPolygon: 0 + m_AtlasName: + m_PackingTag: + m_RenderDataKey: + 00000000000000000000000000000000: 0 + m_AtlasTags: [] + m_SpriteAtlas: {fileID: 0} + m_RD: + serializedVersion: 3 + texture: {fileID: 952406368} + alphaTexture: {fileID: 0} + secondaryTextures: [] + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 6 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 4 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_IndexBuffer: 000001000200020001000300 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 4 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 1 + offset: 0 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 80 + _typelessdata: 000000bf0000003f000000000000003f0000003f00000000000000bf000000bf000000000000003f000000bf00000000000000000000803f0000803f0000803f00000000000000000000803f00000000 + m_Bindpose: [] + textureRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + textureRectOffset: {x: 0, y: 0} + atlasRectOffset: {x: -1, y: -1} + settingsRaw: 64 + uvTransform: {x: 1, y: 0.5, z: 1, w: 0.5} + downscaleMultiplier: 1 + m_AtlasRD: + serializedVersion: 3 + texture: {fileID: 952406368} + alphaTexture: {fileID: 0} + secondaryTextures: [] + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 6 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 4 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_IndexBuffer: 000001000200020001000300 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 4 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 1 + offset: 0 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 80 + _typelessdata: 000000bf0000003f000000000000003f0000003f00000000000000bf000000bf000000000000003f000000bf00000000000000000000803f0000803f0000803f00000000000000000000803f00000000 + m_Bindpose: [] + textureRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + textureRectOffset: {x: 0, y: 0} + atlasRectOffset: {x: -1, y: -1} + settingsRaw: 64 + uvTransform: {x: 1, y: 0.5, z: 1, w: 0.5} + downscaleMultiplier: 1 + m_PhysicsShape: [] + m_Bones: [] + m_SpriteID: +--- !u!1 &451361381 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 451361382} + - component: {fileID: 451361383} + m_Layer: 0 + m_Name: Cell_1_0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &451361382 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451361381} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1147676901} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &451361383 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451361381} + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 431031536} + m_Color: {r: 1, g: 1, b: 1, 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 &791020753 GameObject: m_ObjectHideFlags: 0 @@ -215,6 +761,370 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &822843321 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 822843322} + - component: {fileID: 822843323} + m_Layer: 0 + m_Name: Cell_0_0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &822843322 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 822843321} + 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: 1147676901} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &822843323 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 822843321} + m_Enabled: 0 + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 431031536} + m_Color: {r: 1, g: 1, b: 1, 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!28 &952406368 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 2 + m_Width: 1 + m_Height: 1 + m_CompleteImageSize: 4 + m_MipsStripped: 0 + m_TextureFormat: 4 + m_MipCount: 1 + m_IsReadable: 1 + m_IsPreProcessed: 0 + m_IgnoreMipmapLimit: 0 + m_MipmapLimitGroupName: + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 1 + m_PlatformBlob: + image data: 4 + _typelessdata: ff0000ff + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!1 &1147676900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1147676901} + - component: {fileID: 1147676902} + - component: {fileID: 1147676903} + - component: {fileID: 1147676904} + - component: {fileID: 1147676905} + - component: {fileID: 1147676906} + m_Layer: 0 + m_Name: Shape + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1147676901 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147676900} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.06, y: -0.14, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 822843322} + - {fileID: 397665473} + - {fileID: 199240526} + - {fileID: 451361382} + - {fileID: 224755569} + - {fileID: 1662947689} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1147676902 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147676900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4be33b2e5baf96447a7df0d10cb22064, type: 3} + m_Name: + m_EditorClassIdentifier: + shapeId: 0 + shapeName: "\u793A\u4F8B\u6A21\u5757" + currentRotation: 0 + width: 2 + height: 3 + cellSize: 1 + originalPatternStr: 0,1,1;1,1,0 +--- !u!212 &1147676903 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147676900} + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, 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: 0 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!60 &1147676904 +PolygonCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147676900} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Points: + m_Paths: + - - {x: -0.5, y: 0.5} + - {x: 0.5, y: 0.5} + - {x: 0.5, y: -0.5} + - {x: 1.5, y: -0.5} + - {x: 1.5, y: 0.5} + - {x: 1.5, y: 1.5} + - {x: 0.5, y: 1.5} + - {x: 0.5, y: 2.5} + - {x: -0.5, y: 2.5} + - {x: -0.5, y: 1.5} + m_UseDelaunayMesh: 0 +--- !u!114 &1147676905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147676900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6ad01079e32d2314eb3719ead5f50ddb, type: 3} + m_Name: + m_EditorClassIdentifier: + isDraggable: 1 + snapDistance: 0.5 + targetGridComponent: {fileID: 1928610078} + snapColor: {r: 0, g: 1, b: 0, a: 0.7} + invalidColor: {r: 1, g: 0, b: 0, a: 0.7} + normalColor: {r: 1, g: 1, b: 1, a: 1} + dragScale: 1.1 +--- !u!114 &1147676906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147676900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0c4fbab01ad40c2449c849cd2a8c620f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 0 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 1 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 2 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 3 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 4 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 5 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 14 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 13 + callback: + m_PersistentCalls: + m_Calls: [] --- !u!1 &1429030510 GameObject: m_ObjectHideFlags: 0 @@ -224,7 +1134,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1429030511} - - component: {fileID: 1429030512} m_Layer: 0 m_Name: Block Puzzle Game m_TagString: Untagged @@ -248,22 +1157,90 @@ Transform: - {fileID: 1928610076} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1429030512 -MonoBehaviour: +--- !u!1 &1662947688 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1429030510} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfe4f41ce15355345b390aa2701f3f46, type: 3} - m_Name: - m_EditorClassIdentifier: - gridComponent: {fileID: 0} - gridVisualizer: {fileID: 0} - testPlaceKey: 32 - testClearKey: 99 + serializedVersion: 6 + m_Component: + - component: {fileID: 1662947689} + - component: {fileID: 1662947690} + m_Layer: 0 + m_Name: Cell_1_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1662947689 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662947688} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1147676901} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1662947690 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662947688} + m_Enabled: 0 + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 431031536} + m_Color: {r: 1, g: 1, b: 1, 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 &1928610075 GameObject: m_ObjectHideFlags: 0 @@ -291,7 +1268,7 @@ Transform: m_GameObject: {fileID: 1928610075} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: -6.5, y: -2.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -310,8 +1287,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: gridComponent: {fileID: 1928610078} - gridWidth: 10 - gridHeight: 10 + gridWidth: 5 + gridHeight: 5 cellSize: 1 showGridLines: 1 showCellSprites: 1 @@ -333,13 +1310,19 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 990de8ef2a6774544b9bc9b64af0a8a5, type: 3} m_Name: m_EditorClassIdentifier: - width: 10 - height: 10 + width: 5 + height: 5 cellSize: 1 initializeOnStart: 1 + showGizmos: 1 + gridLineColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.8} + emptyCellColor: {r: 0.9, g: 0.9, b: 0.9, a: 0.2} + occupiedCellColor: {r: 0.2, g: 0.6, b: 1, a: 0.5} + showCellStates: 1 --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - {fileID: 791020756} - {fileID: 1429030511} + - {fileID: 1147676901} diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class.meta new file mode 100644 index 000000000..822c6c2df --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0eb5cc55dcdc0f244a5cb635090c0bd3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs similarity index 54% rename from Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs rename to Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs index 4936c995c..6f61d4257 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs @@ -14,6 +14,13 @@ namespace AibisDream [SerializeField] private float cellSize = 1f; [SerializeField] private bool initializeOnStart = true; + [Header("编辑器预览设置")] + [SerializeField] private bool showGizmos = true; + [SerializeField] private Color gridLineColor = new Color(0.5f, 0.5f, 0.5f, 0.8f); + [SerializeField] private Color emptyCellColor = new Color(0.9f, 0.9f, 0.9f, 0.2f); + [SerializeField] private Color occupiedCellColor = new Color(0.2f, 0.6f, 1f, 0.5f); + [SerializeField] private bool showCellStates = true; + private GridCellState[,] _grid; private bool _isInitialized = false; @@ -157,6 +164,24 @@ namespace AibisDream return new Vector3(worldX, worldY, Origin.z); } + public Vector3[] GridVerticesToWorld(int x, int y) + { + if (!_isInitialized) + { + return new Vector3[4]; + } + + // 先获取网格中心位置 + Vector3 center = GridToWorld(x, y); + // 然后获取网格四个顶点位置 + Vector3[] vertices = new Vector3[4]; + vertices[0] = center + new Vector3(-CellSize / 2, -CellSize / 2, 0); + vertices[1] = center + new Vector3(CellSize / 2, -CellSize / 2, 0); + vertices[2] = center + new Vector3(CellSize / 2, CellSize / 2, 0); + vertices[3] = center + new Vector3(-CellSize / 2, CellSize / 2, 0); + return vertices; + } + public void Clear() { if (!_isInitialized || _grid == null) return; @@ -209,6 +234,93 @@ namespace AibisDream height = Mathf.Max(1, height); cellSize = Mathf.Max(0.1f, cellSize); } + + /// + /// 在编辑器中绘制网格预览 + /// + private void OnDrawGizmos() + { + if (!showGizmos) return; + + // 使用当前Inspector中的参数或已初始化的参数 + int drawWidth = _isInitialized ? Width : width; + int drawHeight = _isInitialized ? Height : height; + float drawCellSize = _isInitialized ? CellSize : cellSize; + Vector3 drawOrigin = _isInitialized ? Origin : transform.position; + + if (drawWidth <= 0 || drawHeight <= 0 || drawCellSize <= 0) return; + + // 绘制网格线 + Gizmos.color = gridLineColor; + for (int x = 0; x <= drawWidth; x++) + { + Vector3 start = drawOrigin + new Vector3(x * drawCellSize, 0, 0); + Vector3 end = drawOrigin + new Vector3(x * drawCellSize, drawHeight * drawCellSize, 0); + Gizmos.DrawLine(start, end); + } + + for (int y = 0; y <= drawHeight; y++) + { + Vector3 start = drawOrigin + new Vector3(0, y * drawCellSize, 0); + Vector3 end = drawOrigin + new Vector3(drawWidth * drawCellSize, y * drawCellSize, 0); + Gizmos.DrawLine(start, end); + } + + // 绘制单元格状态(如果已初始化且启用) + if (showCellStates && _isInitialized && _grid != null) + { + float cellDisplaySize = drawCellSize * 0.9f; // 稍微小一点,留出网格线空间 + Vector3 cellSizeVec = new Vector3(cellDisplaySize, cellDisplaySize, 0.01f); + + for (int x = 0; x < drawWidth; x++) + { + for (int y = 0; y < drawHeight; y++) + { + if (IsValidPosition(x, y)) + { + Vector3 cellCenter = GridToWorld(x, y); + GridCellState state = GetCellState(x, y); + + Gizmos.color = state == GridCellState.Occupied ? occupiedCellColor : emptyCellColor; + Gizmos.DrawCube(cellCenter, cellSizeVec); + } + } + } + } + } + + /// + /// 选中时绘制更明显的网格边界 + /// + private void OnDrawGizmosSelected() + { + if (!showGizmos) return; + + // 使用当前Inspector中的参数或已初始化的参数 + int drawWidth = _isInitialized ? Width : width; + int drawHeight = _isInitialized ? Height : height; + float drawCellSize = _isInitialized ? CellSize : cellSize; + Vector3 drawOrigin = _isInitialized ? Origin : transform.position; + + if (drawWidth <= 0 || drawHeight <= 0 || drawCellSize <= 0) return; + + // 绘制网格边界(更粗的线) + Gizmos.color = new Color(gridLineColor.r, gridLineColor.g, gridLineColor.b, 1f); + Vector3 bottomLeft = drawOrigin; + Vector3 bottomRight = drawOrigin + new Vector3(drawWidth * drawCellSize, 0, 0); + Vector3 topLeft = drawOrigin + new Vector3(0, drawHeight * drawCellSize, 0); + Vector3 topRight = drawOrigin + new Vector3(drawWidth * drawCellSize, drawHeight * drawCellSize, 0); + + // 绘制边界框 + Gizmos.DrawLine(bottomLeft, bottomRight); + Gizmos.DrawLine(bottomRight, topRight); + Gizmos.DrawLine(topRight, topLeft); + Gizmos.DrawLine(topLeft, bottomLeft); + + // 绘制原点标记 + Gizmos.color = Color.yellow; + Gizmos.DrawWireSphere(drawOrigin, 0.1f); + } } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs.meta similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGrid.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs rename to Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs.meta similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleGridExample.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs new file mode 100644 index 000000000..792658e6b --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs @@ -0,0 +1,381 @@ +using System.Collections.Generic; +using AibisDream.Utility; +using UnityEngine; + +namespace AibisDream +{ + public class BlockShape : MonoBehaviour, IBlockShape + { + private SpriteRenderer[,] _cellRenderers; + + // 模块数据 + [Header("模块数据")] + [SerializeField] private int shapeId; + [SerializeField] private string shapeName; + [SerializeField] private RotationAngle currentRotation; + [SerializeField] private int width; + [SerializeField] private int height; + [SerializeField] private float cellSize; + [SerializeField] private string originalPatternStr; + + // 接口实现 + public int ShapeId => shapeId; + public string ShapeName => shapeName; + public RotationAngle CurrentRotation => currentRotation; + public int Width => width; + public int Height => height; + public int BlockCount + { + get + { + var pattern = GetOriginalPattern(); + if (pattern == null) return 0; + + int count = 0; + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + if (pattern[i, j] != 0) + { + count++; + } + } + } + return count; + } + } + + public Vector2Int[] GetBlockPositions() + { + var pattern = GetOriginalPattern(); + if (pattern == null) return new Vector2Int[0]; + + List positions = new List(); + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + if (pattern[i, j] != 0) + { + positions.Add(new Vector2Int(i, j)); + } + } + } + + return positions.ToArray(); + } + + /// + /// 获取单元格渲染器数组(供拖拽组件使用) + /// + public SpriteRenderer[,] GetCellRenderers() + { + return _cellRenderers; + } + + public int[,] GetCurrentPattern() + { + throw new System.NotImplementedException(); + } + + public int[,] GetOriginalPattern() + { + return CommonUtil.DeserializeIntArray(originalPatternStr); + } + + public bool HasBlockAt(int x, int y) + { + throw new System.NotImplementedException(); + } + + public void ResetRotation() + { + throw new System.NotImplementedException(); + } + + public void Rotate(RotationAngle angle) + { + throw new System.NotImplementedException(); + } + + public void RotateClockwise() + { + throw new System.NotImplementedException(); + } + + public void RotateCounterClockwise() + { + throw new System.NotImplementedException(); + } + + private Sprite CreateDefaultSprite() + { + Texture2D texture = new Texture2D(1, 1); + texture.SetPixel(0, 0, Color.red); + texture.Apply(); + return Sprite.Create(texture, new Rect(0, 0, 1, 1), new Vector2(0.5f, 0.5f), 1f); + } + + // 仅限编辑器下使用 + public void DrawShape() + { + transform.DestroyAllChildren(); + _cellRenderers = null; + + // 根据Width和Height,绘制Cells,Cell为SpriteRenderer + _cellRenderers = new SpriteRenderer[width, height]; + var defaultSprite = CreateDefaultSprite(); + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + var cell = new GameObject($"Cell_{i}_{j}"); + var cellRenderer = cell.AddComponent(); + cellRenderer.sprite = defaultSprite; + _cellRenderers[i, j] = cellRenderer; + + cell.transform.parent = transform; + // 计算Cell应处的位置 + var cellPosX = i * cellSize; + var cellPosY = j * cellSize; + cell.transform.localPosition = new Vector3(cellPosX, cellPosY, 0); + } + } + + // 反序列化并处理 + var pattern = CommonUtil.DeserializeIntArray(originalPatternStr); + // 先判断pattern的维度是否与width和height一致 + if (pattern.GetLength(0) != width || pattern.GetLength(1) != height) + { + // 如果不一致,就不处理 + Debug.LogWarning($"Pattern dimension mismatch: {pattern.GetLength(0)}x{pattern.GetLength(1)} != {width}x{height}"); + return; + } + // 如果一致,就读取pattern,并设置对应的cell的SpriteRenderer是否激活 + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + _cellRenderers[i, j].enabled = pattern[i, j] != 0; + } + } + + // 更新碰撞体形状 + UpdatePolygonCollider(); + } + + public void SaveShape() + { + // 如果_cellRenderers不为空,则序列化并保存 + if (_cellRenderers != null) + { + var pattern = new int[width, height]; + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + pattern[i, j] = _cellRenderers[i, j].enabled ? 1 : 0; + } + } + Debug.Log($"SaveShape: {CommonUtil.SerializeIntArray(pattern)}"); + originalPatternStr = CommonUtil.SerializeIntArray(pattern); + + // 保存后更新碰撞体 + UpdatePolygonCollider(); + } + } + + /// + /// 根据originalPattern更新PolygonCollider2D的形状 + /// + public void UpdatePolygonCollider() + { + var pattern = GetOriginalPattern(); + if (pattern == null) return; + + // 获取或添加PolygonCollider2D组件 + PolygonCollider2D polygonCollider = GetComponent(); + if (polygonCollider == null) + { + polygonCollider = gameObject.AddComponent(); + } + + // 生成多边形顶点 + List vertices = GeneratePolygonVertices(pattern); + + if (vertices.Count > 0) + { + // 设置多边形路径 + polygonCollider.pathCount = 1; + polygonCollider.SetPath(0, vertices.ToArray()); + } + else + { + // 如果没有有效格子,清除路径 + polygonCollider.pathCount = 0; + } + } + + /// + /// 根据pattern生成多边形顶点 + /// + private List GeneratePolygonVertices(int[,] pattern) + { + List vertices = new List(); + + if (pattern == null || width <= 0 || height <= 0 || cellSize <= 0) + return vertices; + + // 生成精确的外轮廓(只包含边界点) + vertices = GenerateOutlineVertices(pattern); + + return vertices; + } + + /// + /// 生成精确的外轮廓顶点(只包含边界点) + /// 使用Marching Squares算法的简化版本 + /// + private List GenerateOutlineVertices(int[,] pattern) + { + List outlineVertices = new List(); + HashSet visitedPoints = new HashSet(); + + // 遍历所有格子,找到边界点 + for (int i = 0; i <= width; i++) + { + for (int j = 0; j <= height; j++) + { + // 检查这个角点是否在边界上 + bool isBoundaryCorner = IsBoundaryCorner(pattern, i, j); + + if (isBoundaryCorner) + { + // 计算角点的本地坐标 + // cornerX 和 cornerY 是角点索引(0到width/height) + // 需要转换为格子的角点坐标 + // 角点 (i, j) 对应格子 (i-0.5, j-0.5) 的角点位置 + float x = (i - 0.5f) * cellSize; + float y = (j - 0.5f) * cellSize; + + Vector2Int key = new Vector2Int(Mathf.RoundToInt(x * 100), Mathf.RoundToInt(y * 100)); + if (!visitedPoints.Contains(key)) + { + outlineVertices.Add(new Vector2(x, y)); + visitedPoints.Add(key); + } + } + } + } + + // 如果没有找到边界点,使用简单包围盒 + if (outlineVertices.Count == 0) + { + return GenerateBoundingBox(pattern); + } + + // 对顶点进行排序,形成闭合多边形 + return OrderVerticesForPolygon(outlineVertices); + } + + /// + /// 检查角点是否在边界上 + /// + private bool IsBoundaryCorner(int[,] pattern, int cornerX, int cornerY) + { + // 角点位于四个格子的交汇处 + // 检查周围四个格子的状态 + bool topLeft = (cornerX > 0 && cornerY > 0) ? pattern[cornerX - 1, cornerY - 1] != 0 : false; + bool topRight = (cornerX < width && cornerY > 0) ? pattern[cornerX, cornerY - 1] != 0 : false; + bool bottomLeft = (cornerX > 0 && cornerY < height) ? pattern[cornerX - 1, cornerY] != 0 : false; + bool bottomRight = (cornerX < width && cornerY < height) ? pattern[cornerX, cornerY] != 0 : false; + + // 如果四个格子状态不一致,说明这个角点在边界上 + int filledCount = (topLeft ? 1 : 0) + (topRight ? 1 : 0) + + (bottomLeft ? 1 : 0) + (bottomRight ? 1 : 0); + + // 边界角点:不是全部填充也不是全部空 + return filledCount > 0 && filledCount < 4; + } + + + /// + /// 生成简单的包围盒(备用方法) + /// + private List GenerateBoundingBox(int[,] pattern) + { + List vertices = new List(); + + // 找到有效格子的边界 + int minX = width, maxX = -1, minY = height, maxY = -1; + bool hasValidCell = false; + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + if (pattern[i, j] != 0) + { + hasValidCell = true; + minX = Mathf.Min(minX, i); + maxX = Mathf.Max(maxX, i); + minY = Mathf.Min(minY, j); + maxY = Mathf.Max(maxY, j); + } + } + } + + if (!hasValidCell) + return vertices; + + // 计算包围盒的四个角点(本地坐标) + float halfSize = cellSize / 2f; + float minXWorld = minX * cellSize - width * cellSize / 2f - halfSize; + float maxXWorld = (maxX + 1) * cellSize - width * cellSize / 2f + halfSize; + float minYWorld = minY * cellSize - height * cellSize / 2f - halfSize; + float maxYWorld = (maxY + 1) * cellSize - height * cellSize / 2f + halfSize; + + // 按逆时针顺序添加顶点(Unity的PolygonCollider2D要求) + vertices.Add(new Vector2(minXWorld, minYWorld)); // 左下 + vertices.Add(new Vector2(maxXWorld, minYWorld)); // 右下 + vertices.Add(new Vector2(maxXWorld, maxYWorld)); // 右上 + vertices.Add(new Vector2(minXWorld, maxYWorld)); // 左上 + + return vertices; + } + + /// + /// 对顶点进行排序,形成闭合多边形 + /// + private List OrderVerticesForPolygon(List vertices) + { + if (vertices.Count <= 2) + return vertices; + + // 找到中心点 + Vector2 center = Vector2.zero; + foreach (var v in vertices) + { + center += v; + } + center /= vertices.Count; + + // 按角度排序(相对于中心点) + vertices.Sort((a, b) => + { + float angleA = Mathf.Atan2(a.y - center.y, a.x - center.x); + float angleB = Mathf.Atan2(b.y - center.y, b.x - center.x); + if (angleA.CompareTo(angleB) != 0) + { + return angleA.CompareTo(angleB); + } + + return (a - center).sqrMagnitude.CompareTo((b - center).sqrMagnitude); + }); + + return vertices; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs.meta new file mode 100644 index 000000000..0b9f4bd46 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4be33b2e5baf96447a7df0d10cb22064 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs new file mode 100644 index 000000000..5414fa0d1 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs @@ -0,0 +1,405 @@ +using System; +using AibisDream.Framework; +using UnityEngine; + +namespace AibisDream +{ + /// + /// 形状拖拽组件 + /// 实现IBlockShapeDragger接口,处理形状的拖拽、吸附和放置逻辑 + /// + [RequireComponent(typeof(BlockShape))] + [RequireComponent(typeof(EventTriggerEx))] + public class BlockShapeDragger : MonoBehaviour, IBlockShapeDragger + { + [Header("拖拽设置")] + [SerializeField] private bool isDraggable = true; + [SerializeField] private float snapDistance = 0.5f; + [SerializeField] private BlockPuzzleGrid targetGridComponent; // Unity组件引用 + + [Header("视觉反馈")] + [SerializeField] private Color snapColor = new Color(0f, 1f, 0f, 0.7f); + [SerializeField] private Color invalidColor = new Color(1f, 0f, 0f, 0.7f); + [SerializeField] private Color normalColor = Color.white; + [SerializeField] private float dragScale = 1.1f; + + // 拖拽状态 + private DragState _currentState = DragState.Idle; + private bool _isDragging = false; + private Vector3 _dragOffset; + private Vector3 _originalPosition; + private Vector3 _originalScale; + private int _originalSortingOrder; + private bool _isSnapping = false; + private int _snapGridX; + private int _snapGridY; + + // 组件引用 + private BlockShape _blockShape; + private SpriteRenderer _spriteRenderer; + private Collider2D _collider2D; + + // 事件 + public event Action OnDragStart; + public event Action OnDragUpdate; + public event Action OnDragEnd; + public event Action OnSnap; + public event Action OnUnsnap; + + // 接口实现 + public DragState CurrentState => _currentState; + public bool IsDraggable { get => isDraggable; set => isDraggable = value; } + public IBlockPuzzleGrid TargetGrid + { + get => targetGridComponent; + set => targetGridComponent = value as BlockPuzzleGrid; + } + public float SnapDistance { get => snapDistance; set => snapDistance = value; } + + // 内部使用的网格引用 + private IBlockPuzzleGrid targetGrid => targetGridComponent; + + private void Awake() + { + _blockShape = GetComponent(); + _spriteRenderer = GetComponent(); + } + + public void StartDrag() + { + if (!isDraggable || _isDragging) return; + + _isDragging = true; + _currentState = DragState.Dragging; + _originalPosition = transform.position; + _originalScale = transform.localScale; + + // 计算拖拽偏移量 + Vector3 mouseWorldPos = GetMouseWorldPosition(); + _dragOffset = transform.position - mouseWorldPos; + + // 提升层级和缩放 + if (_spriteRenderer != null) + { + _originalSortingOrder = _spriteRenderer.sortingOrder; + _spriteRenderer.sortingOrder = 100; + } + + transform.localScale = _originalScale * dragScale; + + OnDragStart?.Invoke(_blockShape); + } + + public void UpdateDrag() + { + if (!_isDragging) return; + + Vector3 mouseWorldPos = GetMouseWorldPosition(); + Vector3 targetPosition = mouseWorldPos + _dragOffset; + + // 检测是否靠近网格 + if (targetGrid != null) + { + bool canSnap = CheckSnapToGrid(targetPosition, out Vector3 snapPos, out int gridX, out int gridY); + + if (canSnap) + { + // 吸附到网格 + transform.position = snapPos; + _isSnapping = true; + _snapGridX = gridX; + _snapGridY = gridY; + _currentState = DragState.Snapping; + + // 重要:更新拖拽偏移量,使鼠标继续移动时能正确计算位置 + _dragOffset = snapPos - mouseWorldPos; + + // 检查是否可以放置 + bool canPlace = CanPlaceAt(gridX, gridY); + ShowSnapPreview(true, canPlace); + + OnSnap?.Invoke(_blockShape, snapPos, gridX, gridY); + } + else + { + // 自由拖拽 + transform.position = targetPosition; + if (_isSnapping) + { + _isSnapping = false; + ShowSnapPreview(false, false); + OnUnsnap?.Invoke(_blockShape); + } + _currentState = DragState.Dragging; + } + } + else + { + // 没有网格,自由拖拽 + transform.position = targetPosition; + _currentState = DragState.Dragging; + } + + OnDragUpdate?.Invoke(_blockShape, transform.position); + } + + public void EndDrag() + { + if (!_isDragging) return; + + bool placed = false; + + if (_isSnapping && targetGrid != null) + { + // 尝试放置到网格 + if (CanPlaceAt(_snapGridX, _snapGridY)) + { + if (TryPlaceOnGrid(_snapGridX, _snapGridY)) + { + placed = true; + _currentState = DragState.Placed; + OnShapePlaced(); + } + } + } + + if (!placed) + { + // 返回原位置 + transform.position = _originalPosition; + _currentState = DragState.Idle; + } + + // 恢复原始状态 + transform.localScale = _originalScale; + if (_spriteRenderer != null) + { + _spriteRenderer.sortingOrder = _originalSortingOrder; + } + + ShowSnapPreview(false, false); + + _isDragging = false; + _isSnapping = false; + + OnDragEnd?.Invoke(_blockShape, placed); + } + + public void CancelDrag() + { + if (!_isDragging) return; + + transform.position = _originalPosition; + transform.localScale = _originalScale; + if (_spriteRenderer != null) + { + _spriteRenderer.sortingOrder = _originalSortingOrder; + } + + ShowSnapPreview(false, false); + + _isDragging = false; + _isSnapping = false; + _currentState = DragState.Idle; + + OnDragEnd?.Invoke(_blockShape, false); + } + + public bool CanPlaceAt(int gridX, int gridY) + { + if (targetGrid == null || _blockShape == null) return false; + + Vector2Int[] blockPositions = _blockShape.GetBlockPositions(); + if (blockPositions == null || blockPositions.Length == 0) return false; + + // 形状的坐标系统: + // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左上角 + // - gridX, gridY 是形状左下角在网格中的位置 + // - 需要将形状的相对坐标转换为网格坐标 + foreach (var blockPos in blockPositions) + { + // 将形状的相对坐标转换为网格坐标(左下角为基准) + // 形状的 (0, 0) 对应网格的 (gridX, gridY + shape.Height - 1) + // 形状的 (i, j) 对应网格的 (gridX + i, gridY + shape.Height - 1 - j) + int checkX = gridX + blockPos.x; + int checkY = gridY + _blockShape.Height - 1 - blockPos.y; + + if (!targetGrid.IsValidPosition(checkX, checkY) || + !targetGrid.IsCellEmpty(checkX, checkY)) + { + return false; + } + } + + return true; + } + + public bool GetSnapGridPosition(out int gridX, out int gridY) + { + if (_isSnapping) + { + gridX = _snapGridX; + gridY = _snapGridY; + return true; + } + + gridX = 0; + gridY = 0; + return false; + } + + /// + /// 检查是否可以吸附到网格 + /// + private bool CheckSnapToGrid(Vector3 worldPos, out Vector3 snapPos, out int gridX, out int gridY) + { + snapPos = worldPos; + gridX = 0; + gridY = 0; + + if (targetGrid == null) return false; + + // 将世界坐标转换为网格坐标 + // 注意:WorldToGrid 需要世界坐标在网格范围内才能返回true + // 但我们需要检查所有附近的网格单元格,不仅仅是当前所在的单元格 + // 所以先尝试直接转换,如果失败则查找最近的网格单元格 + + int tempGridX, tempGridY; + bool inGrid = targetGrid.WorldToGrid(worldPos, out tempGridX, out tempGridY); + + if (!inGrid) + { + // 如果不在网格内,尝试查找最近的网格单元格 + // 计算最近的网格坐标 + Vector3 localPos = worldPos - targetGrid.Origin; + tempGridX = Mathf.FloorToInt(localPos.x / targetGrid.CellSize); + tempGridY = Mathf.FloorToInt(localPos.y / targetGrid.CellSize); + + // 检查是否在有效范围内 + if (!targetGrid.IsValidPosition(tempGridX, tempGridY)) + { + return false; + } + } + + // 获取网格单元格中心的世界坐标 + Vector3 gridCenter = targetGrid.GridToWorld(tempGridX, tempGridY); + + // 计算距离 + float distance = Vector3.Distance(worldPos, gridCenter); + + if (distance <= snapDistance) + { + // 计算形状应该放置的网格位置 + // 形状左下角对齐到网格单元格左下角 + gridX = tempGridX; + gridY = tempGridY; + + // 计算形状左下角的世界坐标 + // 网格单元格左下角的世界坐标 = Origin + (gridX * CellSize, gridY * CellSize) + Vector3 gridBottomLeft = targetGrid.Origin + new Vector3( + gridX * targetGrid.CellSize, + gridY * targetGrid.CellSize, + 0 + ); + + // 计算形状中心相对于形状左下角的偏移 + // 形状的 pattern 中,(0, 0) 是左上角,所以形状左下角在 pattern 中的相对位置是 (0, height-1) + // 在形状的本地坐标系中(假设形状中心在 (0, 0)),形状左下角的位置是: + // localX = -width * cellSize / 2 + // localY = -height * cellSize / 2 + (height-1) * cellSize = (height-1) * cellSize - height * cellSize / 2 + // 形状中心相对于形状左下角的偏移 = (0, 0) - (localX, localY) = (width * cellSize / 2, height * cellSize / 2 - (height-1) * cellSize) + + // 为了简化,我们假设形状的中心在形状的几何中心 + // 形状中心相对于形状左下角的偏移 = (width * cellSize / 2, height * cellSize / 2) + // 但考虑到形状的 pattern 中 (0, 0) 是左上角,形状左下角在 pattern 中的位置是 (0, height-1) + // 所以形状中心相对于形状左下角的偏移 = (width * cellSize / 2, (height-1) * cellSize / 2) + + // 实际上,我们需要根据形状的实际布局计算形状中心的位置 + // 但为了简化,我们直接使用网格单元格左下角作为形状左下角的位置 + // 然后根据形状的实际布局计算形状中心的位置 + + // 形状左下角对齐到网格单元格左下角 + // 形状中心的世界坐标 = 网格单元格左下角的世界坐标 + 形状中心相对于形状左下角的偏移 + // 使用网格的 CellSize,因为形状的 cellSize 应该与网格的 CellSize 相同 + float shapeCenterOffsetX = _blockShape.Width * targetGrid.CellSize / 2f; + float shapeCenterOffsetY = (_blockShape.Height - 1) * targetGrid.CellSize / 2f; + snapPos = gridBottomLeft + new Vector3(shapeCenterOffsetX, shapeCenterOffsetY, 0); + + return true; + } + + return false; + } + + /// + /// 尝试放置到网格 + /// + /// 网格X坐标(形状左下角位置) + /// 网格Y坐标(形状左下角位置) + private bool TryPlaceOnGrid(int gridX, int gridY) + { + if (!CanPlaceAt(gridX, gridY)) return false; + + Vector2Int[] blockPositions = _blockShape.GetBlockPositions(); + if (blockPositions == null) return false; + + // 形状的坐标系统: + // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左上角 + // - gridX, gridY 是形状左下角在网格中的位置 + // - 需要将形状的相对坐标转换为网格坐标 + foreach (var blockPos in blockPositions) + { + // 将形状的相对坐标转换为网格坐标(左下角为基准) + // 形状的 (0, 0) 对应网格的 (gridX, gridY + shape.Height - 1) + // 形状的 (i, j) 对应网格的 (gridX + i, gridY + shape.Height - 1 - j) + int x = gridX + blockPos.x; + int y = gridY + _blockShape.Height - 1 - blockPos.y; + targetGrid.SetCellState(x, y, GridCellState.Occupied); + } + + return true; + } + + /// + /// 显示吸附预览效果 + /// + private void ShowSnapPreview(bool show, bool isValid) + { + Color previewColor = show ? (isValid ? snapColor : invalidColor) : normalColor; + + // 更新主SpriteRenderer + if (_spriteRenderer != null) + { + _spriteRenderer.color = previewColor; + } + } + + /// + /// 形状放置完成 + /// + private void OnShapePlaced() + { + // 可以在这里添加放置后的逻辑 + // 例如:禁用拖拽、播放动画等 + isDraggable = false; + } + + /// + /// 获取鼠标世界坐标 + /// + private Vector3 GetMouseWorldPosition() + { + return CameraKit.GetMouseWorldPos(Input.mousePosition); + } + + private void OnDisable() + { + if (_isDragging) + { + CancelDrag(); + } + } + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs.meta new file mode 100644 index 000000000..58d046e4f --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ad01079e32d2314eb3719ead5f50ddb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/GridVisualizer.cs similarity index 97% rename from Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs rename to Assets/Scripts/MiniGame/BlockPuzzle/Class/GridVisualizer.cs index 1e6838497..b3708fbf9 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/GridVisualizer.cs @@ -135,8 +135,8 @@ namespace AibisDream for (int x = 0; x <= _grid.Width; x++) { CreateLine( - _grid.GridToWorld(x, 0), - _grid.GridToWorld(x, _grid.Height), + _grid.GridVerticesToWorld(x, 0)[0], + _grid.GridVerticesToWorld(x, _grid.Height)[0], gridLineWidth, gridLineColor ); @@ -145,8 +145,8 @@ namespace AibisDream for (int y = 0; y <= _grid.Height; y++) { CreateLine( - _grid.GridToWorld(0, y), - _grid.GridToWorld(_grid.Width, y), + _grid.GridVerticesToWorld(0, y)[0], + _grid.GridVerticesToWorld(_grid.Width, y)[0], gridLineWidth, gridLineColor ); diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/GridVisualizer.cs.meta similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/GridVisualizer.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Class/GridVisualizer.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs new file mode 100644 index 000000000..c07ab0a86 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs @@ -0,0 +1,112 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace AibisDream +{ + /// + /// 放置验证器实现 + /// 负责验证形状是否可以放置在指定位置 + /// + public class PlacementValidator : IPlacementValidator + { + /// + /// 检查形状是否可以放置在指定位置 + /// + /// 网格系统 + /// 要放置的形状 + /// 网格X坐标(形状左下角位置) + /// 网格Y坐标(形状左下角位置) + /// 放置验证结果 + public PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY) + { + if (grid == null || shape == null) + { + return PlacementResult.InvalidPosition; + } + + // 获取形状的所有格子位置(相对坐标,基于形状的本地坐标系) + Vector2Int[] blockPositions = shape.GetBlockPositions(); + if (blockPositions == null || blockPositions.Length == 0) + { + return PlacementResult.InvalidPosition; + } + + // 形状的坐标系统: + // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左上角(在pattern数组中) + // - pattern[i, j] 中,i 是 x(从左到右),j 是 y(从上到下,j=0 是顶部) + // - gridX, gridY 是形状左下角在网格中的位置 + // - 需要将形状的相对坐标转换为网格坐标 + foreach (var blockPos in blockPositions) + { + // 将形状的相对坐标转换为网格坐标 + // 形状的 (0, 0) 对应网格的 (gridX, gridY + shape.Height - 1) + // 形状的 (i, j) 对应网格的 (gridX + i, gridY + shape.Height - 1 - j) + int gridCellX = gridX + blockPos.x; + int gridCellY = gridY + shape.Height - 1 - blockPos.y; + + // 检查是否超出边界 + if (!grid.IsValidPosition(gridCellX, gridCellY)) + { + return PlacementResult.OutOfBounds; + } + + // 检查是否与已有块重叠 + if (!grid.IsCellEmpty(gridCellX, gridCellY)) + { + return PlacementResult.Overlap; + } + } + + return PlacementResult.Success; + } + + /// + /// 检查形状是否可以放置在指定位置(详细版本) + /// + /// 网格系统 + /// 要放置的形状 + /// 网格X坐标(形状左下角位置) + /// 网格Y坐标(形状左下角位置) + /// 失败原因(如果返回false) + /// 是否可以放置 + public bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason) + { + failureReason = CanPlace(grid, shape, gridX, gridY); + return failureReason == PlacementResult.Success; + } + + /// + /// 获取形状在指定位置的所有占用格子坐标 + /// + /// 形状 + /// 网格X坐标(形状左下角位置) + /// 网格Y坐标(形状左下角位置) + /// 占用格子的网格坐标数组 + public (int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY) + { + if (shape == null) + { + return new (int x, int y)[0]; + } + + Vector2Int[] blockPositions = shape.GetBlockPositions(); + if (blockPositions == null || blockPositions.Length == 0) + { + return new (int x, int y)[0]; + } + + List<(int x, int y)> occupiedCells = new List<(int x, int y)>(); + + foreach (var blockPos in blockPositions) + { + // 将形状的相对坐标转换为网格坐标(左下角为基准) + int gridCellX = gridX + blockPos.x; + int gridCellY = gridY + shape.Height - 1 - blockPos.y; + occupiedCells.Add((gridCellX, gridCellY)); + } + + return occupiedCells.ToArray(); + } + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs.meta new file mode 100644 index 000000000..5333b0e2a --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 826c5312f504d944c924549de95babe7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface.meta new file mode 100644 index 000000000..e0a9cbce1 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: abf557018657fa642a0d79187ed450eb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs.meta similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGameLogic.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs similarity index 95% rename from Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs index 1005788f9..33fef4914 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs @@ -117,6 +117,12 @@ namespace AibisDream /// /// 总单元格数量 int GetTotalCellCount(); + + /// + /// 获取网格顶点信息 + /// + /// 网格四个顶点位置 + Vector3[] GridVerticesToWorld(int x, int y); } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs.meta similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/IBlockPuzzleGrid.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs similarity index 98% rename from Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs index f0e51bc91..19cc7635d 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs @@ -100,7 +100,7 @@ namespace AibisDream /// 创建形状的副本 /// /// 形状副本 - IBlockShape Clone(); + // IBlockShape Clone(); } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs.meta similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/IBlockShape.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs new file mode 100644 index 000000000..37b1cfd9b --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs @@ -0,0 +1,105 @@ +using UnityEngine; +using System; + +namespace AibisDream +{ + /// + /// 拖拽状态 + /// + public enum DragState + { + Idle, // 空闲 + Dragging, // 拖拽中 + Snapping, // 吸附中 + Placed // 已放置 + } + + /// + /// 形状拖拽接口 + /// 负责处理形状的拖拽、吸附和放置逻辑 + /// + public interface IBlockShapeDragger + { + /// + /// 当前拖拽状态 + /// + DragState CurrentState { get; } + + /// + /// 是否可拖拽 + /// + bool IsDraggable { get; set; } + + /// + /// 目标网格 + /// + IBlockPuzzleGrid TargetGrid { get; set; } + + /// + /// 吸附距离阈值 + /// + float SnapDistance { get; set; } + + /// + /// 拖拽开始事件 + /// + event Action OnDragStart; + + /// + /// 拖拽更新事件 + /// + event Action OnDragUpdate; + + /// + /// 拖拽结束事件 + /// + event Action OnDragEnd; // bool表示是否成功放置 + + /// + /// 吸附事件 + /// + event Action OnSnap; // 形状, 位置, 网格X, 网格Y + + /// + /// 取消吸附事件 + /// + event Action OnUnsnap; + + /// + /// 开始拖拽 + /// + void StartDrag(); + + /// + /// 更新拖拽位置 + /// + void UpdateDrag(); + + /// + /// 结束拖拽 + /// + void EndDrag(); + + /// + /// 取消拖拽(返回原位置) + /// + void CancelDrag(); + + /// + /// 检查是否可以放置到指定位置 + /// + /// 网格X坐标 + /// 网格Y坐标 + /// 是否可以放置 + bool CanPlaceAt(int gridX, int gridY); + + /// + /// 获取当前吸附的网格坐标 + /// + /// 输出的网格X坐标 + /// 输出的网格Y坐标 + /// 是否正在吸附 + bool GetSnapGridPosition(out int gridX, out int gridY); + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs.meta new file mode 100644 index 000000000..5053d37b4 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b2cbf04f1d9ef6448d01501a7861a46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs.meta similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/IBlockShapeFactory.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs similarity index 82% rename from Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs index 72ed54e51..8020246ce 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs @@ -22,8 +22,8 @@ namespace AibisDream /// /// 网格系统 /// 要放置的形状 - /// 网格X坐标(形状左上角位置) - /// 网格Y坐标(形状左上角位置) + /// 网格X坐标(形状左下角位置) + /// 网格Y坐标(形状左下角位置) /// 放置验证结果 PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY); @@ -32,8 +32,8 @@ namespace AibisDream /// /// 网格系统 /// 要放置的形状 - /// 网格X坐标(形状左上角位置) - /// 网格Y坐标(形状左上角位置) + /// 网格X坐标(形状左下角位置) + /// 网格Y坐标(形状左下角位置) /// 失败原因(如果返回false) /// 是否可以放置 bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason); @@ -42,10 +42,9 @@ namespace AibisDream /// 获取形状在指定位置的所有占用格子坐标 /// /// 形状 - /// 网格X坐标(形状左上角位置) - /// 网格Y坐标(形状左上角位置) + /// 网格X坐标(形状左下角位置) + /// 网格Y坐标(形状左下角位置) /// 占用格子的网格坐标数组 (int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY); } } - diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs.meta similarity index 100% rename from Assets/Scripts/MiniGame/BlockPuzzle/IPlacementValidator.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs.meta diff --git a/Assets/Scripts/Utility/CommonUtil.cs b/Assets/Scripts/Utility/CommonUtil.cs index 92550a5f8..1bdc69c5e 100644 --- a/Assets/Scripts/Utility/CommonUtil.cs +++ b/Assets/Scripts/Utility/CommonUtil.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text; using System.Linq; using System.Reflection; using System.Text.RegularExpressions; @@ -7,6 +8,8 @@ using System.Threading.Tasks; using Unity.VisualScripting; using UnityEngine; using Object = UnityEngine.Object; +using System.Globalization; +using UnityEditor; namespace AibisDream.Utility { @@ -189,8 +192,21 @@ namespace AibisDream.Utility return; } + List children = new List(); foreach (Transform child in self) { + children.Add(child); + } + + foreach (var child in children) + { +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) + { + Object.DestroyImmediate(child.gameObject); + continue; + } +#endif Object.Destroy(child.gameObject); } } @@ -243,5 +259,47 @@ namespace AibisDream.Utility { return Regex.Replace(str.Replace("
", "\n"), "[<|{].*?[>|}]", string.Empty); } + + public static int[,] DeserializeIntArray(string str) + { + if (string.IsNullOrWhiteSpace(str)) + { + return new int[0, 0]; + } + + var array = str.Trim().Split(';'); + var result = new int[array.Length, array[0].Split(',').Length]; + for (int i = 0; i < array.Length; i++) + { + var row = array[i].Split(','); + for (int j = 0; j < row.Length; j++) + { + result[i, j] = int.Parse(row[j], NumberStyles.Integer, CultureInfo.InvariantCulture); + } + } + return result; + } + + public static string SerializeIntArray(int[,] array) + { + var result = new StringBuilder(); + for (int i = 0; i < array.GetLength(0); i++) + { + for (int j = 0; j < array.GetLength(1); j++) + { + result.Append(array[i, j]); + if (j < array.GetLength(1) - 1) + { + result.Append(','); + } + } + + if (i < array.GetLength(0) - 1) + { + result.Append(';'); + } + } + return result.ToString(); + } } } \ No newline at end of file From 10b95d0da92512bd5af935118b12f7dff1b97069 Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Thu, 27 Nov 2025 21:12:11 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E8=83=8C=E5=8C=85=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BlockPuzzle/Class/BlockShapeDragger.cs | 76 ++++--- .../BlockPuzzle/Class/PlacementValidator.cs | 209 +++++++++++++++++- .../Interface/IBlockPuzzleGameLogic.cs | 2 +- .../Interface/IBlockShapeDragger.cs | 2 +- .../Interface/IPlacementValidator.cs | 50 ----- .../Interface/IPlacementValidator.cs.meta | 11 - 6 files changed, 250 insertions(+), 100 deletions(-) delete mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs delete mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs index 5414fa0d1..6ccdce72c 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs @@ -1,6 +1,7 @@ using System; using AibisDream.Framework; using UnityEngine; +using UnityEngine.EventSystems; namespace AibisDream { @@ -37,7 +38,7 @@ namespace AibisDream // 组件引用 private BlockShape _blockShape; private SpriteRenderer _spriteRenderer; - private Collider2D _collider2D; + private EventTriggerEx _eventTrigger; // 事件 public event Action OnDragStart; @@ -63,9 +64,39 @@ namespace AibisDream { _blockShape = GetComponent(); _spriteRenderer = GetComponent(); + _eventTrigger = GetComponent(); + + RegisterEvent(); } - public void StartDrag() + private void RegisterEvent() + { + _eventTrigger.Register(EventTriggerType.PointerClick, OnPointerClick); + } + + private void OnPointerClick(BaseEventData eventData) + { + if (eventData is not PointerEventData { button: PointerEventData.InputButton.Left }) + { + return; + } + + PointerEventData pointerEventData = eventData as PointerEventData; + + Vector3 mouseWorldPos = GetMouseWorldPosition(pointerEventData.position); + // 如果当前物体不在拖拽中则进入拖拽逻辑 + if (!_isDragging) + { + StartDrag(mouseWorldPos); + } + // 如果当前物体在拖拽中则取消拖拽 + else + { + CancelDrag(); + } + } + + public void StartDrag(Vector3 mouseWorldPos) { if (!isDraggable || _isDragging) return; @@ -75,7 +106,6 @@ namespace AibisDream _originalScale = transform.localScale; // 计算拖拽偏移量 - Vector3 mouseWorldPos = GetMouseWorldPosition(); _dragOffset = transform.position - mouseWorldPos; // 提升层级和缩放 @@ -94,7 +124,7 @@ namespace AibisDream { if (!_isDragging) return; - Vector3 mouseWorldPos = GetMouseWorldPosition(); + Vector3 mouseWorldPos = GetMouseWorldPosition(Input.mousePosition); Vector3 targetPosition = mouseWorldPos + _dragOffset; // 检测是否靠近网格 @@ -213,16 +243,16 @@ namespace AibisDream if (blockPositions == null || blockPositions.Length == 0) return false; // 形状的坐标系统: - // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左上角 + // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左下角 // - gridX, gridY 是形状左下角在网格中的位置 // - 需要将形状的相对坐标转换为网格坐标 foreach (var blockPos in blockPositions) { // 将形状的相对坐标转换为网格坐标(左下角为基准) - // 形状的 (0, 0) 对应网格的 (gridX, gridY + shape.Height - 1) - // 形状的 (i, j) 对应网格的 (gridX + i, gridY + shape.Height - 1 - j) + // 形状的 (0, 0) 对应网格的 (gridX, gridY) + // 形状的 (i, j) 对应网格的 (gridX + i, gridY + j) int checkX = gridX + blockPos.x; - int checkY = gridY + _blockShape.Height - 1 - blockPos.y; + int checkY = gridY + blockPos.y; if (!targetGrid.IsValidPosition(checkX, checkY) || !targetGrid.IsCellEmpty(checkX, checkY)) @@ -304,26 +334,17 @@ namespace AibisDream ); // 计算形状中心相对于形状左下角的偏移 - // 形状的 pattern 中,(0, 0) 是左上角,所以形状左下角在 pattern 中的相对位置是 (0, height-1) + // 形状的 pattern 中,(0, 0) 是左下角 // 在形状的本地坐标系中(假设形状中心在 (0, 0)),形状左下角的位置是: // localX = -width * cellSize / 2 - // localY = -height * cellSize / 2 + (height-1) * cellSize = (height-1) * cellSize - height * cellSize / 2 - // 形状中心相对于形状左下角的偏移 = (0, 0) - (localX, localY) = (width * cellSize / 2, height * cellSize / 2 - (height-1) * cellSize) - - // 为了简化,我们假设形状的中心在形状的几何中心 - // 形状中心相对于形状左下角的偏移 = (width * cellSize / 2, height * cellSize / 2) - // 但考虑到形状的 pattern 中 (0, 0) 是左上角,形状左下角在 pattern 中的位置是 (0, height-1) - // 所以形状中心相对于形状左下角的偏移 = (width * cellSize / 2, (height-1) * cellSize / 2) - - // 实际上,我们需要根据形状的实际布局计算形状中心的位置 - // 但为了简化,我们直接使用网格单元格左下角作为形状左下角的位置 - // 然后根据形状的实际布局计算形状中心的位置 + // localY = -height * cellSize / 2 + // 形状中心相对于形状左下角的偏移 = (0, 0) - (localX, localY) = (width * cellSize / 2, height * cellSize / 2) // 形状左下角对齐到网格单元格左下角 // 形状中心的世界坐标 = 网格单元格左下角的世界坐标 + 形状中心相对于形状左下角的偏移 // 使用网格的 CellSize,因为形状的 cellSize 应该与网格的 CellSize 相同 float shapeCenterOffsetX = _blockShape.Width * targetGrid.CellSize / 2f; - float shapeCenterOffsetY = (_blockShape.Height - 1) * targetGrid.CellSize / 2f; + float shapeCenterOffsetY = _blockShape.Height * targetGrid.CellSize / 2f; snapPos = gridBottomLeft + new Vector3(shapeCenterOffsetX, shapeCenterOffsetY, 0); return true; @@ -345,16 +366,16 @@ namespace AibisDream if (blockPositions == null) return false; // 形状的坐标系统: - // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左上角 + // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左下角 // - gridX, gridY 是形状左下角在网格中的位置 // - 需要将形状的相对坐标转换为网格坐标 foreach (var blockPos in blockPositions) { // 将形状的相对坐标转换为网格坐标(左下角为基准) - // 形状的 (0, 0) 对应网格的 (gridX, gridY + shape.Height - 1) - // 形状的 (i, j) 对应网格的 (gridX + i, gridY + shape.Height - 1 - j) + // 形状的 (0, 0) 对应网格的 (gridX, gridY) + // 形状的 (i, j) 对应网格的 (gridX + i, gridY + j) int x = gridX + blockPos.x; - int y = gridY + _blockShape.Height - 1 - blockPos.y; + int y = gridY + blockPos.y; targetGrid.SetCellState(x, y, GridCellState.Occupied); } @@ -388,9 +409,10 @@ namespace AibisDream /// /// 获取鼠标世界坐标 /// - private Vector3 GetMouseWorldPosition() + private Vector3 GetMouseWorldPosition(Vector3 mousePos) { - return CameraKit.GetMouseWorldPos(Input.mousePosition); + var pos = Camera.main.ScreenToWorldPoint(mousePos); + return new Vector3(pos.x, pos.y, 0); } private void OnDisable() diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs index c07ab0a86..f5342a87a 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs @@ -7,7 +7,7 @@ namespace AibisDream /// 放置验证器实现 /// 负责验证形状是否可以放置在指定位置 /// - public class PlacementValidator : IPlacementValidator + public static class PlacementValidator { /// /// 检查形状是否可以放置在指定位置 @@ -17,7 +17,7 @@ namespace AibisDream /// 网格X坐标(形状左下角位置) /// 网格Y坐标(形状左下角位置) /// 放置验证结果 - public PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY) + public static PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY) { if (grid == null || shape == null) { @@ -32,17 +32,17 @@ namespace AibisDream } // 形状的坐标系统: - // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左上角(在pattern数组中) - // - pattern[i, j] 中,i 是 x(从左到右),j 是 y(从上到下,j=0 是顶部) + // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左下角 + // - pattern[i, j] 中,i 是 x(从左到右),j 是 y(从下到上,j=0 是底部) // - gridX, gridY 是形状左下角在网格中的位置 // - 需要将形状的相对坐标转换为网格坐标 foreach (var blockPos in blockPositions) { // 将形状的相对坐标转换为网格坐标 - // 形状的 (0, 0) 对应网格的 (gridX, gridY + shape.Height - 1) - // 形状的 (i, j) 对应网格的 (gridX + i, gridY + shape.Height - 1 - j) + // 形状的 (0, 0) 对应网格的 (gridX, gridY) + // 形状的 (i, j) 对应网格的 (gridX + i, gridY + j) int gridCellX = gridX + blockPos.x; - int gridCellY = gridY + shape.Height - 1 - blockPos.y; + int gridCellY = gridY + blockPos.y; // 检查是否超出边界 if (!grid.IsValidPosition(gridCellX, gridCellY)) @@ -69,7 +69,7 @@ namespace AibisDream /// 网格Y坐标(形状左下角位置) /// 失败原因(如果返回false) /// 是否可以放置 - public bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason) + public static bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason) { failureReason = CanPlace(grid, shape, gridX, gridY); return failureReason == PlacementResult.Success; @@ -82,7 +82,7 @@ namespace AibisDream /// 网格X坐标(形状左下角位置) /// 网格Y坐标(形状左下角位置) /// 占用格子的网格坐标数组 - public (int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY) + public static (int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY) { if (shape == null) { @@ -100,13 +100,202 @@ namespace AibisDream foreach (var blockPos in blockPositions) { // 将形状的相对坐标转换为网格坐标(左下角为基准) + // 形状的 (0, 0) 对应网格的 (gridX, gridY) + // 形状的 (i, j) 对应网格的 (gridX + i, gridY + j) int gridCellX = gridX + blockPos.x; - int gridCellY = gridY + shape.Height - 1 - blockPos.y; + int gridCellY = gridY + blockPos.y; occupiedCells.Add((gridCellX, gridCellY)); } return occupiedCells.ToArray(); } + + /// + /// 吸附检测结果 + /// + public struct SnapResult + { + public bool canSnap; // 是否可以吸附 + public Vector3 snapPosition; // 吸附后的世界坐标位置 + public int gridX; // 吸附到的网格X坐标(形状左下角位置) + public int gridY; // 吸附到的网格Y坐标(形状左下角位置) + public float distance; // 到网格单元格的距离 + } + + /// + /// 检查世界坐标是否可以吸附到网格 + /// + /// 网格系统 + /// 世界坐标位置 + /// 吸附距离阈值 + /// 吸附检测结果 + public static SnapResult CheckSnapToGrid(IBlockPuzzleGrid grid, Vector3 worldPos, float snapDistance) + { + SnapResult result = new SnapResult + { + canSnap = false, + snapPosition = worldPos, + gridX = 0, + gridY = 0, + distance = float.MaxValue + }; + + if (grid == null) + { + return result; + } + + // 将世界坐标转换为网格坐标 + // 注意:WorldToGrid 需要世界坐标在网格范围内才能返回true + // 但我们需要检查所有附近的网格单元格,不仅仅是当前所在的单元格 + // 所以先尝试直接转换,如果失败则查找最近的网格单元格 + + int tempGridX, tempGridY; + bool inGrid = grid.WorldToGrid(worldPos, out tempGridX, out tempGridY); + + if (!inGrid) + { + // 如果不在网格内,尝试查找最近的网格单元格 + // 计算最近的网格坐标 + Vector3 localPos = worldPos - grid.Origin; + tempGridX = Mathf.FloorToInt(localPos.x / grid.CellSize); + tempGridY = Mathf.FloorToInt(localPos.y / grid.CellSize); + + // 检查是否在有效范围内 + if (!grid.IsValidPosition(tempGridX, tempGridY)) + { + return result; + } + } + + // 获取网格单元格中心的世界坐标 + Vector3 gridCenter = grid.GridToWorld(tempGridX, tempGridY); + + // 计算距离 + float distance = Vector3.Distance(worldPos, gridCenter); + + if (distance <= snapDistance) + { + // 计算形状应该放置的网格位置 + // 形状左下角对齐到网格单元格左下角 + result.gridX = tempGridX; + result.gridY = tempGridY; + + // 计算形状左下角的世界坐标 + // 网格单元格左下角的世界坐标 = Origin + (gridX * CellSize, gridY * CellSize) + Vector3 gridBottomLeft = grid.Origin + new Vector3( + tempGridX * grid.CellSize, + tempGridY * grid.CellSize, + 0 + ); + + result.snapPosition = gridBottomLeft; + result.distance = distance; + result.canSnap = true; + } + + return result; + } + + /// + /// 检查世界坐标是否可以吸附到网格(简化版本,只返回是否可以吸附和网格坐标) + /// + /// 网格系统 + /// 世界坐标位置 + /// 吸附距离阈值 + /// 吸附到的网格X坐标(形状左下角位置) + /// 吸附到的网格Y坐标(形状左下角位置) + /// 是否可以吸附 + public static bool CheckSnapToGrid(IBlockPuzzleGrid grid, Vector3 worldPos, float snapDistance, out int gridX, out int gridY) + { + gridX = 0; + gridY = 0; + + SnapResult result = CheckSnapToGrid(grid, worldPos, snapDistance); + if (result.canSnap) + { + gridX = result.gridX; + gridY = result.gridY; + return true; + } + + return false; + } + + /// + /// 检查世界坐标是否可以吸附到网格(完整版本,返回吸附位置和网格坐标) + /// + /// 网格系统 + /// 世界坐标位置 + /// 吸附距离阈值 + /// 吸附后的世界坐标位置 + /// 吸附到的网格X坐标(形状左下角位置) + /// 吸附到的网格Y坐标(形状左下角位置) + /// 是否可以吸附 + public static bool CheckSnapToGrid(IBlockPuzzleGrid grid, Vector3 worldPos, float snapDistance, out Vector3 snapPos, out int gridX, out int gridY) + { + snapPos = worldPos; + gridX = 0; + gridY = 0; + + SnapResult result = CheckSnapToGrid(grid, worldPos, snapDistance); + if (result.canSnap) + { + snapPos = result.snapPosition; + gridX = result.gridX; + gridY = result.gridY; + return true; + } + + return false; + } + + /// + /// 查找最近的网格单元格(即使不在吸附距离内) + /// + /// 网格系统 + /// 世界坐标位置 + /// 最近的网格X坐标 + /// 最近的网格Y坐标 + /// 是否找到有效的网格单元格 + public static bool FindNearestGridCell(IBlockPuzzleGrid grid, Vector3 worldPos, out int gridX, out int gridY) + { + gridX = 0; + gridY = 0; + + if (grid == null) + { + return false; + } + + // 先尝试直接转换 + if (grid.WorldToGrid(worldPos, out gridX, out gridY)) + { + return true; + } + + // 如果不在网格内,计算最近的网格坐标 + Vector3 localPos = worldPos - grid.Origin; + gridX = Mathf.FloorToInt(localPos.x / grid.CellSize); + gridY = Mathf.FloorToInt(localPos.y / grid.CellSize); + + // 限制在有效范围内 + gridX = Mathf.Clamp(gridX, 0, grid.Width - 1); + gridY = Mathf.Clamp(gridY, 0, grid.Height - 1); + + return grid.IsValidPosition(gridX, gridY); + } + } + + /// + /// 放置验证结果 + /// + public enum PlacementResult + { + Success, // 可以放置 + OutOfBounds, // 超出边界 + Overlap, // 与已有块重叠 + InvalidPosition // 无效位置 } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs index b5986dc1f..87bf62ec7 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs @@ -42,7 +42,7 @@ namespace AibisDream /// /// 放置验证器 /// - IPlacementValidator Validator { get; } + PlacementValidator Validator { get; } /// /// 游戏开始事件 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs index 37b1cfd9b..e414a01c1 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs @@ -68,7 +68,7 @@ namespace AibisDream /// /// 开始拖拽 /// - void StartDrag(); + void StartDrag(Vector3 mouseWorldPos); /// /// 更新拖拽位置 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs deleted file mode 100644 index 8020246ce..000000000 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs +++ /dev/null @@ -1,50 +0,0 @@ -namespace AibisDream -{ - /// - /// 放置验证结果 - /// - public enum PlacementResult - { - Success, // 可以放置 - OutOfBounds, // 超出边界 - Overlap, // 与已有块重叠 - InvalidPosition // 无效位置 - } - - /// - /// 放置检测接口 - /// 负责验证形状是否可以放置在指定位置 - /// - public interface IPlacementValidator - { - /// - /// 检查形状是否可以放置在指定位置 - /// - /// 网格系统 - /// 要放置的形状 - /// 网格X坐标(形状左下角位置) - /// 网格Y坐标(形状左下角位置) - /// 放置验证结果 - PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY); - - /// - /// 检查形状是否可以放置在指定位置(详细版本) - /// - /// 网格系统 - /// 要放置的形状 - /// 网格X坐标(形状左下角位置) - /// 网格Y坐标(形状左下角位置) - /// 失败原因(如果返回false) - /// 是否可以放置 - bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason); - - /// - /// 获取形状在指定位置的所有占用格子坐标 - /// - /// 形状 - /// 网格X坐标(形状左下角位置) - /// 网格Y坐标(形状左下角位置) - /// 占用格子的网格坐标数组 - (int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY); - } -} diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs.meta deleted file mode 100644 index 04b726752..000000000 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IPlacementValidator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e4ebc4e9f404ead41ac713a7a31fe330 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 4f1002e64b0814d822cc9b6d2c8c02f91b13c22f Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Fri, 28 Nov 2025 21:37:11 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E6=96=B9=E5=9D=97=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BlockPuzzle/Class/BlockPuzzleGrid.cs | 30 ++++++-- .../BlockPuzzle/Class/BlockPuzzleGridEx.cs | 76 +++++++++++++++++++ .../Class/BlockPuzzleGridEx.cs.meta | 11 +++ .../BlockPuzzle/Class/BlockShapeDragger.cs | 31 ++------ .../BlockPuzzle/Class/PlacementValidator.cs | 28 +++++-- .../BlockPuzzle/Interface/IBlockPuzzleGrid.cs | 8 ++ 6 files changed, 146 insertions(+), 38 deletions(-) create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs.meta diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs index 6f61d4257..bb939ed1d 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs @@ -129,6 +129,26 @@ namespace AibisDream return IsValidPosition(x, y) && GetCellState(x, y) == GridCellState.Empty; } + public bool CanPlace(Vector2Int[] gridCells, out bool[] results) + { + results = new bool[gridCells.Length]; + for (int i = 0; i < gridCells.Length; i++) + { + // 先验证是否在有效范围内 + if (!IsValidPosition(gridCells[i].x, gridCells[i].y)) results[i] = false; + // 再验证是否为空 + else if (GetCellState(gridCells[i].x, gridCells[i].y) == GridCellState.Occupied) results[i] = false; + else results[i] = true; + } + + // 如果所有位置都可以放置,则返回true + for (int i = 0; i < results.Length; i++) + { + if (!results[i]) return false; + } + return true; + } + public bool WorldToGrid(Vector3 worldPos, out int gridX, out int gridY) { if (!_isInitialized) @@ -142,11 +162,11 @@ namespace AibisDream gridX = Mathf.FloorToInt(localPos.x / CellSize); gridY = Mathf.FloorToInt(localPos.y / CellSize); - // 检查是否在有效范围内 - if (!IsValidPosition(gridX, gridY)) - { - return false; - } + // TODO: 不检查是否在有效范围内,留给后续检查 + // if (!IsValidPosition(gridX, gridY)) + // { + // return false; + // } return true; } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs new file mode 100644 index 000000000..359760bd3 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs @@ -0,0 +1,76 @@ +using UnityEngine; + +namespace AibisDream +{ + public static class BlockPuzzleGridEx + { + public static SnapResult TrySnapToGrid(this IBlockPuzzleGrid grid, BlockShape shape) + { + // 预制错误结果作为返回值 + SnapResult result = new SnapResult + { + canSnap = false, + snapPosition = shape.transform.position, + gridX = 0, + gridY = 0, + distance = float.MaxValue + }; + + // 将Shape的世界坐标转换为网格坐标(可以是虚拟坐标) + bool inGrid = grid.WorldToGrid(shape.transform.position, out int gridX, out int gridY); + if (!inGrid) return result; + + // 将形状的所有格子转换为网格坐标 + // gridX, gridY 是形状的 (0, 0) 点在网格中的位置 + Vector2Int[] gridCells = ConvertShapeToGridCells(shape, gridX, gridY); + result.gridX = gridX; + result.gridY = gridY; + result.snapPosition = grid.GridToWorld(gridX, gridY); + + // 逐个坐标验证是否可以放置 + var canPlace = grid.CanPlace(gridCells, out bool[] results); + if (!canPlace) return result; + result.canSnap = true; + result.distance = Vector3.Distance(shape.transform.position, result.snapPosition); + + return result; + } + + /// + /// 将形状的相对坐标转换为网格坐标 + /// 已知形状的 (0, 0) 点在网格中的位置为 (gridX, gridY),将形状的其他格子坐标转换为网格坐标 + /// + /// 形状 + /// 网格X坐标(形状左下角位置,即形状的 (0, 0) 点对应的网格坐标) + /// 网格Y坐标(形状左下角位置,即形状的 (0, 0) 点对应的网格坐标) + /// 形状所有格子在网格中的坐标数组 + public static Vector2Int[] ConvertShapeToGridCells(IBlockShape shape, int gridX, int gridY) + { + if (shape == null) + { + return new Vector2Int[0]; + } + + Vector2Int[] blockPositions = shape.GetBlockPositions(); + if (blockPositions == null || blockPositions.Length == 0) + { + return new Vector2Int[0]; + } + + Vector2Int[] gridCells = new Vector2Int[blockPositions.Length]; + + for (int i = 0; i < blockPositions.Length; i++) + { + // 将形状的相对坐标转换为网格坐标 + // 形状的 (0, 0) 对应网格的 (gridX, gridY) + // 形状的 (blockPos.x, blockPos.y) 对应网格的 (gridX + blockPos.x, gridY + blockPos.y) + gridCells[i] = new Vector2Int( + gridX + blockPositions[i].x, + gridY + blockPositions[i].y + ); + } + + return gridCells; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs.meta new file mode 100644 index 000000000..49962fd0d --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab4b77b210903a6428113bbc4e0fac09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs index 6ccdce72c..158cfd95a 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs @@ -127,39 +127,18 @@ namespace AibisDream Vector3 mouseWorldPos = GetMouseWorldPosition(Input.mousePosition); Vector3 targetPosition = mouseWorldPos + _dragOffset; - // 检测是否靠近网格 if (targetGrid != null) { - bool canSnap = CheckSnapToGrid(targetPosition, out Vector3 snapPos, out int gridX, out int gridY); - - if (canSnap) + // 检查吸附可能 + var snapResult = targetGrid.TrySnapToGrid(_blockShape); + if (snapResult.canSnap) { - // 吸附到网格 - transform.position = snapPos; - _isSnapping = true; - _snapGridX = gridX; - _snapGridY = gridY; - _currentState = DragState.Snapping; - - // 重要:更新拖拽偏移量,使鼠标继续移动时能正确计算位置 - _dragOffset = snapPos - mouseWorldPos; - - // 检查是否可以放置 - bool canPlace = CanPlaceAt(gridX, gridY); - ShowSnapPreview(true, canPlace); - - OnSnap?.Invoke(_blockShape, snapPos, gridX, gridY); + // 可以吸附,保存吸附内容 } else { - // 自由拖拽 + // 没有吸附,自由拖拽 transform.position = targetPosition; - if (_isSnapping) - { - _isSnapping = false; - ShowSnapPreview(false, false); - OnUnsnap?.Invoke(_blockShape); - } _currentState = DragState.Dragging; } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs index f5342a87a..0285ef491 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs @@ -109,17 +109,19 @@ namespace AibisDream return occupiedCells.ToArray(); } + /// - /// 吸附检测结果 + /// 将形状的单个相对坐标转换为网格坐标 /// - public struct SnapResult + /// 形状内的X坐标(相对坐标,相对于形状左下角) + /// 形状内的Y坐标(相对坐标,相对于形状左下角) + /// 网格X坐标(形状左下角位置) + /// 网格Y坐标(形状左下角位置) + /// 对应的网格坐标 + public static Vector2Int ConvertShapeLocalToGrid(int shapeLocalX, int shapeLocalY, int gridX, int gridY) { - public bool canSnap; // 是否可以吸附 - public Vector3 snapPosition; // 吸附后的世界坐标位置 - public int gridX; // 吸附到的网格X坐标(形状左下角位置) - public int gridY; // 吸附到的网格Y坐标(形状左下角位置) - public float distance; // 到网格单元格的距离 + return new Vector2Int(gridX + shapeLocalX, gridY + shapeLocalY); } /// @@ -297,5 +299,17 @@ namespace AibisDream Overlap, // 与已有块重叠 InvalidPosition // 无效位置 } + + /// + /// 吸附检测结果 + /// + public struct SnapResult + { + public bool canSnap; // 是否可以吸附 + public Vector3 snapPosition; // 吸附后的世界坐标位置 + public int gridX; // 吸附到的网格X坐标(形状左下角位置) + public int gridY; // 吸附到的网格Y坐标(形状左下角位置) + public float distance; // 到网格单元格的距离 + } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs index 33fef4914..3ed817396 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs @@ -84,6 +84,14 @@ namespace AibisDream /// 是否为空 bool IsCellEmpty(int x, int y); + /// + /// 检查指定位置是否可以放置 + /// + /// 网格坐标数组 + /// 结果集合 + /// 是否可以放置 + bool CanPlace(Vector2Int[] gridCells, out bool[] results); + /// /// 世界坐标转换为网格坐标 /// From 6ca3e4a60fc61a156c246f8d778e286c5ad67ba4 Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Mon, 1 Dec 2025 20:44:20 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=90=B8=E9=99=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../字魂像素积木体(商用需授权) SDF.asset | 4 +- Assets/Scenes/网格测试.unity | 703 +++++++++++------- .../EventSystemKit/EventTriggerEx.cs | 6 + .../BlockPuzzle/Class/BlockPuzzleGrid.cs | 22 +- .../BlockPuzzle/Class/BlockPuzzleGridEx.cs | 26 +- .../BlockPuzzle/Class/BlockShapeDragger.cs | 2 +- .../BlockPuzzle/Class/PlacementValidator.cs | 2 + .../BlockPuzzle/Class/ShapeDragger.cs | 180 +++++ .../BlockPuzzle/Class/ShapeDragger.cs.meta | 11 + .../BlockPuzzle/Interface/IBlockPuzzleGrid.cs | 5 +- .../Interface/IBlockShapeDragger.cs | 4 +- 11 files changed, 664 insertions(+), 301 deletions(-) create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeDragger.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeDragger.cs.meta diff --git a/Assets/Font/Assets/字魂像素积木体(商用需授权) SDF.asset b/Assets/Font/Assets/字魂像素积木体(商用需授权) SDF.asset index 46b566e24..0a5dea853 100644 --- a/Assets/Font/Assets/字魂像素积木体(商用需授权) SDF.asset +++ b/Assets/Font/Assets/字魂像素积木体(商用需授权) SDF.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a560662cd717e21848ea6c188eddc71bf0d673c100bd17d2d49910e85a99bc5b -size 2131741 +oid sha256:d720c6d148a8cb33dae5dc84485a654be7bb230fb665a24242aea37a7425e4dc +size 2132271 diff --git a/Assets/Scenes/网格测试.unity b/Assets/Scenes/网格测试.unity index cee6a404e..3c7b1e6d2 100644 --- a/Assets/Scenes/网格测试.unity +++ b/Assets/Scenes/网格测试.unity @@ -123,7 +123,7 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &199240525 +--- !u!1 &281764985 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -131,38 +131,38 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 199240526} - - component: {fileID: 199240527} + - component: {fileID: 281764986} + - component: {fileID: 281764987} m_Layer: 0 - m_Name: Cell_0_2 + m_Name: Cell_1_2 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &199240526 +--- !u!4 &281764986 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 199240525} + m_GameObject: {fileID: 281764985} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalPosition: {x: 1, y: 2, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1147676901} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &199240527 +--- !u!212 &281764987 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 199240525} - m_Enabled: 1 + m_GameObject: {fileID: 281764985} + m_Enabled: 0 m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 @@ -196,7 +196,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 431031536} + m_Sprite: {fileID: 587689673} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -207,7 +207,7 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!1 &224755568 +--- !u!1 &301990981 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -215,92 +215,8 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 224755569} - - component: {fileID: 224755570} - m_Layer: 0 - m_Name: Cell_1_1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &224755569 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 224755568} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1, y: 1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1147676901} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &224755570 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 224755568} - 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 431031536} - m_Color: {r: 1, g: 1, b: 1, 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 &397665472 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 397665473} - - component: {fileID: 397665474} + - component: {fileID: 301990982} + - component: {fileID: 301990983} m_Layer: 0 m_Name: Cell_0_1 m_TagString: Untagged @@ -308,28 +224,28 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &397665473 +--- !u!4 &301990982 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397665472} + m_GameObject: {fileID: 301990981} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.01, y: 1, z: 0} + m_LocalPosition: {x: 0, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1147676901} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &397665474 +--- !u!212 &301990983 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397665472} + m_GameObject: {fileID: 301990981} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -364,7 +280,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 431031536} + m_Sprite: {fileID: 587689673} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -375,7 +291,91 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!213 &431031536 +--- !u!1 &372942194 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 372942195} + - component: {fileID: 372942196} + m_Layer: 0 + m_Name: Cell_0_0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &372942195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 372942194} + 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: 1147676901} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &372942196 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 372942194} + m_Enabled: 0 + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 587689673} + m_Color: {r: 1, g: 1, b: 1, 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!213 &587689673 Sprite: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -402,7 +402,7 @@ Sprite: m_SpriteAtlas: {fileID: 0} m_RD: serializedVersion: 3 - texture: {fileID: 952406368} + texture: {fileID: 1427590382} alphaTexture: {fileID: 0} secondaryTextures: [] m_SubMeshes: @@ -493,7 +493,7 @@ Sprite: downscaleMultiplier: 1 m_AtlasRD: serializedVersion: 3 - texture: {fileID: 952406368} + texture: {fileID: 1427590382} alphaTexture: {fileID: 0} secondaryTextures: [] m_SubMeshes: @@ -585,7 +585,7 @@ Sprite: m_PhysicsShape: [] m_Bones: [] m_SpriteID: ---- !u!1 &451361381 +--- !u!1 &785730922 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -593,37 +593,37 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 451361382} - - component: {fileID: 451361383} + - component: {fileID: 785730923} + - component: {fileID: 785730924} m_Layer: 0 - m_Name: Cell_1_0 + m_Name: Cell_1_1 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &451361382 +--- !u!4 &785730923 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451361381} + m_GameObject: {fileID: 785730922} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalPosition: {x: 1, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1147676901} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &451361383 +--- !u!212 &785730924 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451361381} + m_GameObject: {fileID: 785730922} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -658,7 +658,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 431031536} + m_Sprite: {fileID: 587689673} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -680,6 +680,8 @@ GameObject: - component: {fileID: 791020756} - component: {fileID: 791020755} - component: {fileID: 791020754} + - component: {fileID: 791020757} + - component: {fileID: 791020758} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -761,138 +763,66 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &822843321 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 822843322} - - component: {fileID: 822843323} - m_Layer: 0 - m_Name: Cell_0_0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &822843322 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 822843321} - 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: 1147676901} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &822843323 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 822843321} - m_Enabled: 0 - 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 431031536} - m_Color: {r: 1, g: 1, b: 1, 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!28 &952406368 -Texture2D: +--- !u!114 &791020757 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791020753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} m_Name: - m_ImageContentsHash: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: serializedVersion: 2 - Hash: 00000000000000000000000000000000 - m_ForcedFallbackFormat: 4 - m_DownscaleFallback: 0 - m_IsAlphaChannelOptional: 0 - serializedVersion: 2 - m_Width: 1 - m_Height: 1 - m_CompleteImageSize: 4 - m_MipsStripped: 0 - m_TextureFormat: 4 - m_MipCount: 1 - m_IsReadable: 1 - m_IsPreProcessed: 0 - m_IgnoreMipmapLimit: 0 - m_MipmapLimitGroupName: - m_StreamingMipmaps: 0 - m_StreamingMipmapsPriority: 0 - m_VTOnly: 0 - m_AlphaIsTransparency: 0 - m_ImageCount: 1 - m_TextureDimension: 2 - m_TextureSettings: + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 +--- !u!114 &791020758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791020753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56666c5a40171f54783dd416a44f42bf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EventMask: serializedVersion: 2 - m_FilterMode: 1 - m_Aniso: 1 - m_MipBias: 0 - m_WrapU: 0 - m_WrapV: 0 - m_WrapW: 0 - m_LightmapFormat: 0 - m_ColorSpace: 1 - m_PlatformBlob: - image data: 4 - _typelessdata: ff0000ff - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: + m_Bits: 4294967295 + m_MaxRayIntersections: 0 --- !u!1 &1147676900 GameObject: m_ObjectHideFlags: 0 @@ -905,8 +835,8 @@ GameObject: - component: {fileID: 1147676902} - component: {fileID: 1147676903} - component: {fileID: 1147676904} - - component: {fileID: 1147676905} - component: {fileID: 1147676906} + - component: {fileID: 1147676907} m_Layer: 0 m_Name: Shape m_TagString: Untagged @@ -927,12 +857,12 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 822843322} - - {fileID: 397665473} - - {fileID: 199240526} - - {fileID: 451361382} - - {fileID: 224755569} - - {fileID: 1662947689} + - {fileID: 372942195} + - {fileID: 301990982} + - {fileID: 2107594533} + - {fileID: 1702235238} + - {fileID: 785730923} + - {fileID: 281764986} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1147676902 @@ -1061,25 +991,6 @@ PolygonCollider2D: - {x: -0.5, y: 2.5} - {x: -0.5, y: 1.5} m_UseDelaunayMesh: 0 ---- !u!114 &1147676905 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1147676900} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6ad01079e32d2314eb3719ead5f50ddb, type: 3} - m_Name: - m_EditorClassIdentifier: - isDraggable: 1 - snapDistance: 0.5 - targetGridComponent: {fileID: 1928610078} - snapColor: {r: 0, g: 1, b: 0, a: 0.7} - invalidColor: {r: 1, g: 0, b: 0, a: 0.7} - normalColor: {r: 1, g: 1, b: 1, a: 1} - dragScale: 1.1 --- !u!114 &1147676906 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1125,6 +1036,73 @@ MonoBehaviour: callback: m_PersistentCalls: m_Calls: [] +--- !u!114 &1147676907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147676900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62aeab6b39ab40949ab3e66462c5e295, type: 3} + m_Name: + m_EditorClassIdentifier: + isDraggable: 1 + snapDistance: 0.5 + targetGrid: {fileID: 1928610078} + snapColor: {r: 0, g: 1, b: 0, a: 0.7} + invalidColor: {r: 1, g: 0, b: 0, a: 0.7} + normalColor: {r: 1, g: 1, b: 1, a: 1} + dragScale: 1.1 +--- !u!28 &1427590382 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 2 + m_Width: 1 + m_Height: 1 + m_CompleteImageSize: 4 + m_MipsStripped: 0 + m_TextureFormat: 4 + m_MipCount: 1 + m_IsReadable: 1 + m_IsPreProcessed: 0 + m_IgnoreMipmapLimit: 0 + m_MipmapLimitGroupName: + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 1 + m_PlatformBlob: + image data: 4 + _typelessdata: ff0000ff + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: --- !u!1 &1429030510 GameObject: m_ObjectHideFlags: 0 @@ -1157,7 +1135,7 @@ Transform: - {fileID: 1928610076} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1662947688 +--- !u!1 &1467061558 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1165,38 +1143,120 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1662947689} - - component: {fileID: 1662947690} + - component: {fileID: 1467061559} + - component: {fileID: 1467061561} + - component: {fileID: 1467061560} + - component: {fileID: 1467061562} m_Layer: 0 - m_Name: Cell_1_2 + m_Name: EventSystem m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1662947689 +--- !u!4 &1467061559 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1662947688} + m_GameObject: {fileID: 1467061558} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1467061560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467061558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1467061561 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467061558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!114 &1467061562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467061558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f55689aa6dac4461bba273d8987762dd, type: 3} + m_Name: + m_EditorClassIdentifier: + isLocked: 0 +--- !u!1 &1702235237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1702235238} + - component: {fileID: 1702235239} + m_Layer: 0 + m_Name: Cell_1_0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1702235238 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1702235237} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1147676901} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &1662947690 +--- !u!212 &1702235239 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1662947688} - m_Enabled: 0 + m_GameObject: {fileID: 1702235237} + m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 @@ -1230,7 +1290,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 431031536} + m_Sprite: {fileID: 587689673} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -1319,10 +1379,95 @@ MonoBehaviour: emptyCellColor: {r: 0.9, g: 0.9, b: 0.9, a: 0.2} occupiedCellColor: {r: 0.2, g: 0.6, b: 1, a: 0.5} showCellStates: 1 +--- !u!1 &2107594532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2107594533} + - component: {fileID: 2107594534} + m_Layer: 0 + m_Name: Cell_0_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2107594533 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2107594532} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1147676901} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2107594534 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2107594532} + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 587689673} + m_Color: {r: 1, g: 1, b: 1, 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!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: + - {fileID: 1467061559} - {fileID: 791020756} - {fileID: 1429030511} - {fileID: 1147676901} diff --git a/Assets/Scripts/Framework/EventSystemKit/EventTriggerEx.cs b/Assets/Scripts/Framework/EventSystemKit/EventTriggerEx.cs index c50daa9e1..8b5b48653 100644 --- a/Assets/Scripts/Framework/EventSystemKit/EventTriggerEx.cs +++ b/Assets/Scripts/Framework/EventSystemKit/EventTriggerEx.cs @@ -120,6 +120,12 @@ namespace AibisDream.Framework EventSystemEx.Instance.OnEndDrag(_interaction); base.OnBeginDrag(eventData); } + + public override void OnPointerClick(PointerEventData eventData) + { + // EventSystemEx.Instance.OnPointerClick(_interaction); + base.OnPointerClick(eventData); + } } public interface IInteraction diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs index bb939ed1d..526dea379 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs @@ -96,7 +96,7 @@ namespace AibisDream if (!IsValidPosition(x, y)) { Debug.LogWarning($"BlockPuzzleGridComponent: 尝试访问无效位置 ({x}, {y})"); - return GridCellState.Empty; + return GridCellState.OutOfBounds; } return _grid[x, y]; @@ -129,22 +129,20 @@ namespace AibisDream return IsValidPosition(x, y) && GetCellState(x, y) == GridCellState.Empty; } - public bool CanPlace(Vector2Int[] gridCells, out bool[] results) + public bool CanPlace(Vector2Int[] gridCells) { - results = new bool[gridCells.Length]; for (int i = 0; i < gridCells.Length; i++) { // 先验证是否在有效范围内 - if (!IsValidPosition(gridCells[i].x, gridCells[i].y)) results[i] = false; + if (!IsValidPosition(gridCells[i].x, gridCells[i].y)) + { + return false; + } // 再验证是否为空 - else if (GetCellState(gridCells[i].x, gridCells[i].y) == GridCellState.Occupied) results[i] = false; - else results[i] = true; - } - - // 如果所有位置都可以放置,则返回true - for (int i = 0; i < results.Length; i++) - { - if (!results[i]) return false; + else if (GetCellState(gridCells[i].x, gridCells[i].y) == GridCellState.Occupied) + { + return false; + } } return true; } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs index 359760bd3..9e5ba0c24 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs @@ -4,7 +4,7 @@ namespace AibisDream { public static class BlockPuzzleGridEx { - public static SnapResult TrySnapToGrid(this IBlockPuzzleGrid grid, BlockShape shape) + public static SnapResult CheckSnapToGrid(this IBlockPuzzleGrid grid, BlockShape shape) { // 预制错误结果作为返回值 SnapResult result = new SnapResult @@ -13,7 +13,8 @@ namespace AibisDream snapPosition = shape.transform.position, gridX = 0, gridY = 0, - distance = float.MaxValue + distance = float.MaxValue, + gridPositions = new Vector2Int[0] }; // 将Shape的世界坐标转换为网格坐标(可以是虚拟坐标) @@ -26,9 +27,10 @@ namespace AibisDream result.gridX = gridX; result.gridY = gridY; result.snapPosition = grid.GridToWorld(gridX, gridY); + result.gridPositions = gridCells; // 逐个坐标验证是否可以放置 - var canPlace = grid.CanPlace(gridCells, out bool[] results); + var canPlace = grid.CanPlace(gridCells); if (!canPlace) return result; result.canSnap = true; result.distance = Vector3.Distance(shape.transform.position, result.snapPosition); @@ -72,5 +74,23 @@ namespace AibisDream return gridCells; } + + /// + /// 为吸附制作预览 + /// + /// 转换后的网格坐标组 + public static void ShowSnapPreview(this IBlockPuzzleGrid grid, Vector2Int[] shapeCells) + { + + } + + public static void TrySnapToGrid(this IBlockPuzzleGrid grid, BlockShape shape, Vector2Int rootCell) + { + // 判断RootCell的位置 + var rootWorldPos = grid.GridToWorld(rootCell.x, rootCell.y); + // 已经判断是否可吸附,直接吸就好了 + shape.transform.position = rootWorldPos; + // TODO: 设置网格状态 + } } } \ No newline at end of file diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs index 158cfd95a..b352882d9 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs @@ -130,7 +130,7 @@ namespace AibisDream if (targetGrid != null) { // 检查吸附可能 - var snapResult = targetGrid.TrySnapToGrid(_blockShape); + var snapResult = targetGrid.CheckSnapToGrid(_blockShape); if (snapResult.canSnap) { // 可以吸附,保存吸附内容 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs index 0285ef491..9e5fdc984 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs @@ -310,6 +310,8 @@ namespace AibisDream public int gridX; // 吸附到的网格X坐标(形状左下角位置) public int gridY; // 吸附到的网格Y坐标(形状左下角位置) public float distance; // 到网格单元格的距离 + public Vector2Int[] gridPositions; // 吸附后 + public Vector2Int RootCell => new Vector2Int(gridX, gridY); // 吸附后的根网格坐标 } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeDragger.cs new file mode 100644 index 000000000..3f7a0bfe3 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeDragger.cs @@ -0,0 +1,180 @@ +using System; +using AibisDream.Framework; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace AibisDream +{ + public class ShapeDragger : MonoBehaviour, IBlockShapeDragger, IInteraction + { + [Header("拖拽设置")] + [SerializeField] private bool isDraggable = true; + [SerializeField] private float snapDistance = 0.5f; + [SerializeField] private BlockPuzzleGrid targetGrid; + + [Header("视觉反馈")] + [SerializeField] private Color snapColor = new Color(0f, 1f, 0f, 0.7f); + [SerializeField] private Color invalidColor = new Color(1f, 0f, 0f, 0.7f); + [SerializeField] private Color normalColor = Color.white; + [SerializeField] private float dragScale = 1.1f; + + // 拖拽状态 + private DragState _currentState = DragState.Idle; + private Vector3 _dragOffset; + private Vector3 _originalPosition; + private Vector3 _originalScale; + private int _originalSortingOrder; + private SnapResult _snapResult; + + // 组件引用 + private BlockShape _blockShape; + private SpriteRenderer _spriteRenderer; + private EventTriggerEx _eventTrigger; + + public DragState CurrentState => _currentState; + + public bool IsDraggable { get => isDraggable; set => isDraggable = value; } + public IBlockPuzzleGrid TargetGrid { get => targetGrid; set => targetGrid = value as BlockPuzzleGrid; } + public float SnapDistance { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + + // 事件 + public event Action OnDragStart; + public event Action OnDragUpdate; + public event Action OnDragEnd; + public event Action OnSnap; + public event Action OnUnsnap; + + private void Awake() + { + _blockShape = GetComponent(); + _spriteRenderer = GetComponent(); + _eventTrigger = GetComponent(); + + RegisterEvent(); + } + + private void OnDestroy() + { + _eventTrigger.UnRegister(EventTriggerType.PointerClick, OnPointerClick); + } + + private void RegisterEvent() + { + _eventTrigger.Register(EventTriggerType.PointerClick, OnPointerClick); + // _eventTrigger.Register(EventTriggerType.PointerDown, OnPointerDown); + // _eventTrigger.Register(EventTriggerType.PointerUp, OnPointerUp); + } + + private void Update() + { + if (_currentState == DragState.Dragging) + { + UpdateDrag(); + } + } + + private void OnPointerClick(BaseEventData eventData) + { + if (eventData is not PointerEventData { button: PointerEventData.InputButton.Left }) + { + return; + } + + Vector3 mouseWorldPos = GetMouseWorldPosition(eventData); + // 如果当前物体不在拖拽中则进入拖拽逻辑 + if (_currentState == DragState.Idle || _currentState == DragState.Placed) + { + StartDrag(mouseWorldPos); + } + // 如果当前物体在拖拽中则取消拖拽 + else + { + EndDrag(); + } + } + + public void StartDrag(Vector3 mouseWorldPos) + { + if (!isDraggable) return; + + _currentState = DragState.Dragging; + _originalPosition = transform.position; + + // 计算拖拽偏移量 + _dragOffset = transform.position - mouseWorldPos; + + // 处理层级和缩放 + HandleDragStart(); + + OnDragStart?.Invoke(_blockShape); + } + + private void HandleDragStart() + { + // 调整缩放和层级 + transform.localScale = dragScale * Vector3.one; + } + + public void CancelDrag() + { + throw new NotImplementedException(); + } + + public void EndDrag() + { + // 如果吸附到了就靠过去 + if (_snapResult.canSnap) + { + _currentState = DragState.Placed; + transform.localScale = Vector3.one; + TargetGrid.TrySnapToGrid(_blockShape, _snapResult.RootCell); + } + else + { + _currentState = DragState.Idle; + transform.position = _originalPosition; + transform.localScale = Vector3.one; + } + + OnDragEnd?.Invoke(_blockShape, _currentState == DragState.Placed); + } + + public void UpdateDrag() + { + // 更新拖拽位置 + transform.position = GetMouseWorldPosition() + _dragOffset; + // 进行Snap检查 + _snapResult = TargetGrid.CheckSnapToGrid(_blockShape); + // 在网格显示预览 + TargetGrid.ShowSnapPreview(_snapResult.gridPositions); + } + + /// + /// 获取鼠标世界坐标 + /// + private Vector3 GetMouseWorldPosition(BaseEventData eventData) + { + Vector3 mouseWorldPos; + if (eventData is not PointerEventData pointerEventData) + { + mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); + } + else + { + mouseWorldPos = Camera.main.ScreenToWorldPoint(pointerEventData.position); + } + return new Vector3(mouseWorldPos.x, mouseWorldPos.y, 0); + } + + private Vector3 GetMouseWorldPosition() + { + var mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); + return new Vector3(mouseWorldPos.x, mouseWorldPos.y, 0); + } + + // 实现IInteraction接口 + public bool IsActive => true; + public bool IsAvailable => true; + public GameObject GetGameObject() => gameObject; + } +} diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeDragger.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeDragger.cs.meta new file mode 100644 index 000000000..30e9c4385 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeDragger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62aeab6b39ab40949ab3e66462c5e295 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs index 3ed817396..36074d66d 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGrid.cs @@ -8,7 +8,8 @@ namespace AibisDream public enum GridCellState { Empty = 0, // 空 - Occupied = 1 // 已占用 + Occupied = 1, // 已占用 + OutOfBounds = 2 // 超出范围 } /// @@ -90,7 +91,7 @@ namespace AibisDream /// 网格坐标数组 /// 结果集合 /// 是否可以放置 - bool CanPlace(Vector2Int[] gridCells, out bool[] results); + bool CanPlace(Vector2Int[] gridCells); /// /// 世界坐标转换为网格坐标 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs index e414a01c1..9f031abbc 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs @@ -91,7 +91,7 @@ namespace AibisDream /// 网格X坐标 /// 网格Y坐标 /// 是否可以放置 - bool CanPlaceAt(int gridX, int gridY); + // bool CanPlaceAt(int gridX, int gridY); /// /// 获取当前吸附的网格坐标 @@ -99,7 +99,7 @@ namespace AibisDream /// 输出的网格X坐标 /// 输出的网格Y坐标 /// 是否正在吸附 - bool GetSnapGridPosition(out int gridX, out int gridY); + // bool GetSnapGridPosition(out int gridX, out int gridY); } } From 07c9a5ff50792532c3a61fb98f338dd51f517b20 Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Mon, 8 Dec 2025 19:54:35 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=96=B9=E5=9D=97=E6=8B=BC=E5=9B=BE?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssetGroups/Art Resources.asset | 5 + .../AssetGroups/Prefabs.asset | 10 + ...lockShaprEditor.cs => BlockShapeEditor.cs} | 0 ...ditor.cs.meta => BlockShapeEditor.cs.meta} | 0 Assets/Editor/MenuItem.meta | 8 + .../MenuItem/BlockPuzzleMenuItemCreator.cs | 27 + .../BlockPuzzleMenuItemCreator.cs.meta} | 2 +- Assets/Prefabs/BlockPuzzle.meta | 8 + .../BlockPuzzle/BlockPuzzleValidator.asset | 21 + .../BlockPuzzleValidator.asset.meta | 8 + Assets/Prefabs/BlockPuzzle/BlockShape.prefab | 228 ++ .../BlockPuzzle/BlockShape.prefab.meta | 7 + .../BlockPuzzle/ShapeCreateButton.prefab | 272 +++ .../BlockPuzzle/ShapeCreateButton.prefab.meta | 7 + Assets/RawResources/Art/网格拼图相关素材.meta | 8 + .../Art/网格拼图相关素材/条状.png | 3 + .../Art/网格拼图相关素材/条状.png.meta | 153 ++ .../Yarn/FP_Shitou2/Stage3_中间对话.yarn | 1 - Assets/Scenes/网格测试.unity | 1972 ++++++++++------- .../Scripts/Dialog System/BaseYarnCommand.cs | 14 - .../FixSystemNew/Clinic/ClinicYarnCommand.cs | 7 - .../EventSystemKit/WorldScrollRect.cs | 499 +++++ .../EventSystemKit/WorldScrollRect.cs.meta} | 2 +- Assets/Scripts/Framework/LogKit/FileLogger.cs | 12 +- Assets/Scripts/Framework/LogKit/LogKit.cs | 3 +- .../Framework/ResourceKit/ResourceKit.cs | 29 +- .../MiniGame/BlockPuzzle/BlockPuzzleSystem.cs | 6 +- .../MiniGame/BlockPuzzle/Class/BlockPuzzle.cs | 291 +++ .../BlockPuzzle.cs.meta} | 2 +- .../BlockPuzzle/Class/BlockPuzzleGrid.cs | 30 +- .../BlockPuzzle/Class/BlockPuzzleGridEx.cs | 96 - .../Class/BlockPuzzleGridExample.cs | 148 -- .../BlockPuzzle/Class/BlockPuzzleValidator.cs | 106 + ...e.cs.meta => BlockPuzzleValidator.cs.meta} | 2 +- .../MiniGame/BlockPuzzle/Class/BlockShape.cs | 373 +++- .../BlockPuzzle/Class/BlockShapeDragger.cs | 406 ---- .../BlockPuzzle/Class/BlockShapeRack.cs | 94 + .../BlockPuzzle/Class/BlockShapeRack.cs.meta | 11 + .../BlockPuzzle/Class/PlacementValidator.cs | 322 +-- .../BlockPuzzle/Class/ShapeCreateButton.cs | 53 + .../Class/ShapeCreateButton.cs.meta | 11 + .../BlockPuzzle/Class/ShapeDragger.cs | 35 +- .../BlockPuzzle/Class/ValidateResultLog.cs | 81 + .../Class/ValidateResultLog.cs.meta | 11 + .../Interface/IBlockPuzzleGameLogic.cs | 139 -- .../BlockPuzzle/Interface/IBlockPuzzleGrid.cs | 14 +- .../BlockPuzzle/Interface/IBlockShape.cs | 17 +- .../Interface/IBlockShapeDragger.cs | 8 +- .../Interface/IBlockShapeFactory.cs | 54 +- .../Interface/IBlockShapeFactory.cs.meta | 2 +- .../BlockPuzzle/Interface/IBlockShapeRack.cs | 22 + .../Interface/IBlockShapeRack.cs.meta | 11 + Assets/Scripts/Utility/ConstRef.cs | 8 +- .../LevelData/BlockPuzzle.meta | 8 + .../LevelData/BlockPuzzle/BlockShapeData.json | 1 + .../BlockPuzzle/BlockShapeData.json.meta | 7 + ProjectSettings/Physics2DSettings.asset | 2 +- ProjectSettings/TagManager.asset | 2 +- 58 files changed, 3598 insertions(+), 2081 deletions(-) rename Assets/Editor/Inspector/{BlockShaprEditor.cs => BlockShapeEditor.cs} (100%) rename Assets/Editor/Inspector/{BlockShaprEditor.cs.meta => BlockShapeEditor.cs.meta} (100%) create mode 100644 Assets/Editor/MenuItem.meta create mode 100644 Assets/Editor/MenuItem/BlockPuzzleMenuItemCreator.cs rename Assets/{Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs.meta => Editor/MenuItem/BlockPuzzleMenuItemCreator.cs.meta} (83%) create mode 100644 Assets/Prefabs/BlockPuzzle.meta create mode 100644 Assets/Prefabs/BlockPuzzle/BlockPuzzleValidator.asset create mode 100644 Assets/Prefabs/BlockPuzzle/BlockPuzzleValidator.asset.meta create mode 100644 Assets/Prefabs/BlockPuzzle/BlockShape.prefab create mode 100644 Assets/Prefabs/BlockPuzzle/BlockShape.prefab.meta create mode 100644 Assets/Prefabs/BlockPuzzle/ShapeCreateButton.prefab create mode 100644 Assets/Prefabs/BlockPuzzle/ShapeCreateButton.prefab.meta create mode 100644 Assets/RawResources/Art/网格拼图相关素材.meta create mode 100644 Assets/RawResources/Art/网格拼图相关素材/条状.png create mode 100644 Assets/RawResources/Art/网格拼图相关素材/条状.png.meta create mode 100644 Assets/Scripts/Framework/EventSystemKit/WorldScrollRect.cs rename Assets/Scripts/{MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs.meta => Framework/EventSystemKit/WorldScrollRect.cs.meta} (83%) create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzle.cs rename Assets/Scripts/MiniGame/BlockPuzzle/{Interface/IBlockPuzzleGameLogic.cs.meta => Class/BlockPuzzle.cs.meta} (83%) delete mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs delete mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleValidator.cs rename Assets/Scripts/MiniGame/BlockPuzzle/Class/{BlockPuzzleGridExample.cs.meta => BlockPuzzleValidator.cs.meta} (83%) delete mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeRack.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeRack.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeCreateButton.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeCreateButton.cs.meta create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/ValidateResultLog.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Class/ValidateResultLog.cs.meta delete mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeRack.cs create mode 100644 Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeRack.cs.meta create mode 100644 Assets/StreamingAssets/LevelData/BlockPuzzle.meta create mode 100644 Assets/StreamingAssets/LevelData/BlockPuzzle/BlockShapeData.json create mode 100644 Assets/StreamingAssets/LevelData/BlockPuzzle/BlockShapeData.json.meta diff --git a/Assets/AddressableAssetsData/AssetGroups/Art Resources.asset b/Assets/AddressableAssetsData/AssetGroups/Art Resources.asset index a477477f0..43687d602 100644 --- a/Assets/AddressableAssetsData/AssetGroups/Art Resources.asset +++ b/Assets/AddressableAssetsData/AssetGroups/Art Resources.asset @@ -87,6 +87,11 @@ MonoBehaviour: m_ReadOnly: 0 m_SerializedLabels: [] FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: c0724ae6698e0454da14fa5f9e87918a + m_Address: "BlockShape/\u6761\u72B6" + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 m_ReadOnly: 0 m_Settings: {fileID: 11400000, guid: 77169ce22e430f64fb36c771815a4a7b, type: 2} m_SchemaSet: diff --git a/Assets/AddressableAssetsData/AssetGroups/Prefabs.asset b/Assets/AddressableAssetsData/AssetGroups/Prefabs.asset index 5728902ef..920f20836 100644 --- a/Assets/AddressableAssetsData/AssetGroups/Prefabs.asset +++ b/Assets/AddressableAssetsData/AssetGroups/Prefabs.asset @@ -82,6 +82,16 @@ MonoBehaviour: m_ReadOnly: 0 m_SerializedLabels: [] FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: 03e5e9a1437535042ae48b2ba034dd93 + m_Address: BlockShape + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: f0804046fd11f7a4a8f27886f2bd3cb0 + m_Address: ShapeCreateButton + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 m_ReadOnly: 0 m_Settings: {fileID: 11400000, guid: 77169ce22e430f64fb36c771815a4a7b, type: 2} m_SchemaSet: diff --git a/Assets/Editor/Inspector/BlockShaprEditor.cs b/Assets/Editor/Inspector/BlockShapeEditor.cs similarity index 100% rename from Assets/Editor/Inspector/BlockShaprEditor.cs rename to Assets/Editor/Inspector/BlockShapeEditor.cs diff --git a/Assets/Editor/Inspector/BlockShaprEditor.cs.meta b/Assets/Editor/Inspector/BlockShapeEditor.cs.meta similarity index 100% rename from Assets/Editor/Inspector/BlockShaprEditor.cs.meta rename to Assets/Editor/Inspector/BlockShapeEditor.cs.meta diff --git a/Assets/Editor/MenuItem.meta b/Assets/Editor/MenuItem.meta new file mode 100644 index 000000000..109984dae --- /dev/null +++ b/Assets/Editor/MenuItem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6d1e89d1670e074a9f74578cfc6bc00 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/MenuItem/BlockPuzzleMenuItemCreator.cs b/Assets/Editor/MenuItem/BlockPuzzleMenuItemCreator.cs new file mode 100644 index 000000000..75a8570d0 --- /dev/null +++ b/Assets/Editor/MenuItem/BlockPuzzleMenuItemCreator.cs @@ -0,0 +1,27 @@ +using UnityEditor; +using UnityEngine; + +namespace AibisDream.SystemEditor +{ + public static class BlockPuzzleMenuItemCreator + { + private const string BLOCK_SHAPE_PREFAB_PATH = "Assets/Prefabs/BlockPuzzle/BlockShape.prefab"; + + [MenuItem("GameObject/Block Puzzle/Shape")] + public static BlockShape CreateBlockPuzzleShape() + { + var prefabAsset =AssetDatabase.LoadAssetAtPath(BLOCK_SHAPE_PREFAB_PATH); + if (prefabAsset == null) + { + throw new System.InvalidOperationException( + $"Can't create a new Block Shape: Can't find the prefab to create a Block Shape from." + ); + } + + var instantiatedPrefab = (GameObject)PrefabUtility.InstantiatePrefab(prefabAsset); + PrefabUtility.UnpackPrefabInstance(instantiatedPrefab, PrefabUnpackMode.Completely, InteractionMode.UserAction); + return instantiatedPrefab.GetComponent(); + } + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs.meta b/Assets/Editor/MenuItem/BlockPuzzleMenuItemCreator.cs.meta similarity index 83% rename from Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs.meta rename to Assets/Editor/MenuItem/BlockPuzzleMenuItemCreator.cs.meta index 58d046e4f..2f5655a27 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs.meta +++ b/Assets/Editor/MenuItem/BlockPuzzleMenuItemCreator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6ad01079e32d2314eb3719ead5f50ddb +guid: 71b77fc2d917b61489a45c2a36d5d049 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Prefabs/BlockPuzzle.meta b/Assets/Prefabs/BlockPuzzle.meta new file mode 100644 index 000000000..96acb0aba --- /dev/null +++ b/Assets/Prefabs/BlockPuzzle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc64d655e8c64514986c3cb226291943 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/BlockPuzzle/BlockPuzzleValidator.asset b/Assets/Prefabs/BlockPuzzle/BlockPuzzleValidator.asset new file mode 100644 index 000000000..f2b8012d6 --- /dev/null +++ b/Assets/Prefabs/BlockPuzzle/BlockPuzzleValidator.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8eea7264a53eb574eabe4bd65c4fa462, type: 3} + m_Name: BlockPuzzleValidator + m_EditorClassIdentifier: + baseConditions: + - name: "\u6761\u4EF61" + targetNames: + - "\u57FA\u7840\u6D4B\u8BD51" + compareSign: 0 + count: 1 + extraConditions: [] diff --git a/Assets/Prefabs/BlockPuzzle/BlockPuzzleValidator.asset.meta b/Assets/Prefabs/BlockPuzzle/BlockPuzzleValidator.asset.meta new file mode 100644 index 000000000..e7829539f --- /dev/null +++ b/Assets/Prefabs/BlockPuzzle/BlockPuzzleValidator.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5198c209e90354148ae73619dd0b4f03 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/BlockPuzzle/BlockShape.prefab b/Assets/Prefabs/BlockPuzzle/BlockShape.prefab new file mode 100644 index 000000000..d6779efc6 --- /dev/null +++ b/Assets/Prefabs/BlockPuzzle/BlockShape.prefab @@ -0,0 +1,228 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1355800832498282156 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4390508356052025844} + - component: {fileID: 1564096825049927058} + - component: {fileID: 5623161269037470069} + - component: {fileID: 1224845219232276460} + - component: {fileID: 4646419983055809048} + - component: {fileID: 4283988294842430357} + m_Layer: 0 + m_Name: BlockShape + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4390508356052025844 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355800832498282156} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.06, y: -0.14, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1564096825049927058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355800832498282156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4be33b2e5baf96447a7df0d10cb22064, type: 3} + m_Name: + m_EditorClassIdentifier: + _blockShapeData: + shapeId: 2 + shapeName: "\u57FA\u7840\u6D4B\u8BD52" + width: 2 + height: 3 + cellSize: 1 + originalPatternStr: 0,1,1;1,1,0 + spritePath: "BlockShape/\u6761\u72B6" +--- !u!212 &5623161269037470069 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355800832498282156} + 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: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: c0724ae6698e0454da14fa5f9e87918a, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 2, y: 3} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!60 &1224845219232276460 +PolygonCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355800832498282156} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.25, y: 0.16666667} + oldSize: {x: 2, y: 3} + newSize: {x: 2, y: 3} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Points: + m_Paths: + - - {x: -0.5, y: 0.5} + - {x: 0.5, y: 0.5} + - {x: 0.5, y: -0.5} + - {x: 1.5, y: -0.5} + - {x: 1.5, y: 0.5} + - {x: 1.5, y: 1.5} + - {x: 0.5, y: 1.5} + - {x: 0.5, y: 2.5} + - {x: -0.5, y: 2.5} + - {x: -0.5, y: 1.5} + m_UseDelaunayMesh: 0 +--- !u!114 &4646419983055809048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355800832498282156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0c4fbab01ad40c2449c849cd2a8c620f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 0 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 1 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 2 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 3 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 4 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 5 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 14 + callback: + m_PersistentCalls: + m_Calls: [] + - eventID: 13 + callback: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &4283988294842430357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355800832498282156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62aeab6b39ab40949ab3e66462c5e295, type: 3} + m_Name: + m_EditorClassIdentifier: + isDraggable: 1 + targetGrid: {fileID: 0} + snapColor: {r: 0, g: 1, b: 0, a: 0.7} + invalidColor: {r: 1, g: 0, b: 0, a: 0.7} + normalColor: {r: 1, g: 1, b: 1, a: 1} + dragScale: 1.1 diff --git a/Assets/Prefabs/BlockPuzzle/BlockShape.prefab.meta b/Assets/Prefabs/BlockPuzzle/BlockShape.prefab.meta new file mode 100644 index 000000000..f11858823 --- /dev/null +++ b/Assets/Prefabs/BlockPuzzle/BlockShape.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 03e5e9a1437535042ae48b2ba034dd93 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/BlockPuzzle/ShapeCreateButton.prefab b/Assets/Prefabs/BlockPuzzle/ShapeCreateButton.prefab new file mode 100644 index 000000000..bbe822cd5 --- /dev/null +++ b/Assets/Prefabs/BlockPuzzle/ShapeCreateButton.prefab @@ -0,0 +1,272 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1286179676683224218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1446911278243210279} + - component: {fileID: 7196315963220379848} + - component: {fileID: 1201246540162265395} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1446911278243210279 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1286179676683224218} + 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: 5348072435519200876} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7196315963220379848 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1286179676683224218} + m_CullTransparentMesh: 1 +--- !u!114 &1201246540162265395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1286179676683224218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Button + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: c7fc4cbba4b38a04c8985d4dbce12a73, type: 2} + m_sharedMaterial: {fileID: -5947736473428621296, guid: c7fc4cbba4b38a04c8985d4dbce12a73, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2562226395007143204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5348072435519200876} + - component: {fileID: 3255889528921208874} + - component: {fileID: 2606522308025224621} + - component: {fileID: 8678519470614167094} + - component: {fileID: 827712554909876233} + m_Layer: 0 + m_Name: ShapeCreateButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5348072435519200876 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2562226395007143204} + 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: 1446911278243210279} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 241.5, y: -65} + m_SizeDelta: {x: 450, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3255889528921208874 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2562226395007143204} + m_CullTransparentMesh: 1 +--- !u!114 &2606522308025224621 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2562226395007143204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8678519470614167094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2562226395007143204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2606522308025224621} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &827712554909876233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2562226395007143204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0f68581711be4834e9e7d77f7375d3eb, type: 3} + m_Name: + m_EditorClassIdentifier: + button: {fileID: 8678519470614167094} + text: {fileID: 1201246540162265395} diff --git a/Assets/Prefabs/BlockPuzzle/ShapeCreateButton.prefab.meta b/Assets/Prefabs/BlockPuzzle/ShapeCreateButton.prefab.meta new file mode 100644 index 000000000..090221888 --- /dev/null +++ b/Assets/Prefabs/BlockPuzzle/ShapeCreateButton.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f0804046fd11f7a4a8f27886f2bd3cb0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/网格拼图相关素材.meta b/Assets/RawResources/Art/网格拼图相关素材.meta new file mode 100644 index 000000000..f577da0d5 --- /dev/null +++ b/Assets/RawResources/Art/网格拼图相关素材.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 38652f0ca09ef3a4caa55f050a1ff322 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/网格拼图相关素材/条状.png b/Assets/RawResources/Art/网格拼图相关素材/条状.png new file mode 100644 index 000000000..d4c818ff3 --- /dev/null +++ b/Assets/RawResources/Art/网格拼图相关素材/条状.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca4b0d39a9ac6190f1bbe0bc8b6aedd30692b5f22b086a37082778cb7149b7e6 +size 23037 diff --git a/Assets/RawResources/Art/网格拼图相关素材/条状.png.meta b/Assets/RawResources/Art/网格拼图相关素材/条状.png.meta new file mode 100644 index 000000000..f8823090d --- /dev/null +++ b/Assets/RawResources/Art/网格拼图相关素材/条状.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: c0724ae6698e0454da14fa5f9e87918a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 9 + spritePivot: {x: 0.25, y: 0.16666667} + spritePixelsToUnits: 500 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Yarn/FP_Shitou2/Stage3_中间对话.yarn b/Assets/Resources/Yarn/FP_Shitou2/Stage3_中间对话.yarn index b9b367de6..8f71ec21c 100644 --- a/Assets/Resources/Yarn/FP_Shitou2/Stage3_中间对话.yarn +++ b/Assets/Resources/Yarn/FP_Shitou2/Stage3_中间对话.yarn @@ -14,7 +14,6 @@ position: 210,-129 <> <> <> -<> //<> //<> <> diff --git a/Assets/Scenes/网格测试.unity b/Assets/Scenes/网格测试.unity index 3c7b1e6d2..ad0c14c74 100644 --- a/Assets/Scenes/网格测试.unity +++ b/Assets/Scenes/网格测试.unity @@ -123,7 +123,7 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &281764985 +--- !u!1 &62777893 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -131,461 +131,35 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 281764986} - - component: {fileID: 281764987} + - component: {fileID: 62777894} m_Layer: 0 - m_Name: Cell_1_2 + m_Name: Sliding Area m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &281764986 -Transform: +--- !u!224 &62777894 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 281764985} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1147676901} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &281764987 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 281764985} - m_Enabled: 0 - 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 587689673} - m_Color: {r: 1, g: 1, b: 1, 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 &301990981 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 301990982} - - component: {fileID: 301990983} - m_Layer: 0 - m_Name: Cell_0_1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &301990982 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 301990981} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1147676901} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &301990983 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 301990981} - 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 587689673} - m_Color: {r: 1, g: 1, b: 1, 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 &372942194 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 372942195} - - component: {fileID: 372942196} - m_Layer: 0 - m_Name: Cell_0_0 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &372942195 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 372942194} - serializedVersion: 2 + m_GameObject: {fileID: 62777893} 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: 1147676901} + m_Children: + - {fileID: 1340148881} + m_Father: {fileID: 564105416} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &372942196 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 372942194} - m_Enabled: 0 - 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 587689673} - m_Color: {r: 1, g: 1, b: 1, 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!213 &587689673 -Sprite: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - m_Rect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_Offset: {x: 0, y: 0} - m_Border: {x: 0, y: 0, z: 0, w: 0} - m_PixelsToUnits: 1 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} m_Pivot: {x: 0.5, y: 0.5} - m_Extrude: 0 - m_IsPolygon: 0 - m_AtlasName: - m_PackingTag: - m_RenderDataKey: - 00000000000000000000000000000000: 0 - m_AtlasTags: [] - m_SpriteAtlas: {fileID: 0} - m_RD: - serializedVersion: 3 - texture: {fileID: 1427590382} - alphaTexture: {fileID: 0} - secondaryTextures: [] - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 6 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 4 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_IndexBuffer: 000001000200020001000300 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 4 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 1 - offset: 0 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 80 - _typelessdata: 000000bf0000003f000000000000003f0000003f00000000000000bf000000bf000000000000003f000000bf00000000000000000000803f0000803f0000803f00000000000000000000803f00000000 - m_Bindpose: [] - textureRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - textureRectOffset: {x: 0, y: 0} - atlasRectOffset: {x: -1, y: -1} - settingsRaw: 64 - uvTransform: {x: 1, y: 0.5, z: 1, w: 0.5} - downscaleMultiplier: 1 - m_AtlasRD: - serializedVersion: 3 - texture: {fileID: 1427590382} - alphaTexture: {fileID: 0} - secondaryTextures: [] - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 6 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 4 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_IndexBuffer: 000001000200020001000300 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 4 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 1 - offset: 0 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 80 - _typelessdata: 000000bf0000003f000000000000003f0000003f00000000000000bf000000bf000000000000003f000000bf00000000000000000000803f0000803f0000803f00000000000000000000803f00000000 - m_Bindpose: [] - textureRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - textureRectOffset: {x: 0, y: 0} - atlasRectOffset: {x: -1, y: -1} - settingsRaw: 64 - uvTransform: {x: 1, y: 0.5, z: 1, w: 0.5} - downscaleMultiplier: 1 - m_PhysicsShape: [] - m_Bones: [] - m_SpriteID: ---- !u!1 &785730922 +--- !u!1 &121321803 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -593,82 +167,562 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 785730923} - - component: {fileID: 785730924} + - component: {fileID: 121321804} + - component: {fileID: 121321805} m_Layer: 0 - m_Name: Cell_1_1 + m_Name: "\u7EC4\u4EF6\u6839\u8282\u70B9" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &785730923 +--- !u!4 &121321804 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 785730922} + m_GameObject: {fileID: 121321803} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1, y: 1, z: 0} + 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: 1147676901} + m_Father: {fileID: 1429030511} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &785730924 -SpriteRenderer: +--- !u!114 &121321805 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 785730922} + m_GameObject: {fileID: 121321803} 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 587689673} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4b41fe99d78fb92428bd63b641c3944c, type: 3} + m_Name: + m_EditorClassIdentifier: + shapeRoot: {fileID: 0} + scrollRect: {fileID: 0} + blockShapeDataList: [] +--- !u!1 &371269376 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 371269377} + m_Layer: 0 + m_Name: "\u529F\u80FD\u6309\u94AE" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &371269377 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371269376} + 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: 1199638084} + - {fileID: 1773523316} + m_Father: {fileID: 980860029} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &429452828 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 429452829} + - component: {fileID: 429452832} + - component: {fileID: 429452831} + - component: {fileID: 429452830} + - component: {fileID: 429452833} + m_Layer: 0 + m_Name: "\u6A21\u5757\u8D27\u67B6" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &429452829 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 429452828} + 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: 682812503} + - {fileID: 564105416} + m_Father: {fileID: 980860029} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 500, y: 0} + m_Pivot: {x: 1, y: 0.5} +--- !u!114 &429452830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 429452828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 1316836929} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 682812503} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 564105417} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 1 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &429452831 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 429452828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &429452832 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 429452828} + m_CullTransparentMesh: 1 +--- !u!114 &429452833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 429452828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4b41fe99d78fb92428bd63b641c3944c, type: 3} + m_Name: + m_EditorClassIdentifier: + shapeRoot: {fileID: 121321804} + scrollRect: {fileID: 429452830} + blockShapeDataList: + - key: "\u57FA\u7840\u6D4B\u8BD51" + count: 1 + - key: "\u57FA\u7840\u6D4B\u8BD52" + count: 1 + - key: "\u57FA\u7840\u6D4B\u8BD53" + count: 1 +--- !u!1 &513896080 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 513896081} + - component: {fileID: 513896083} + - component: {fileID: 513896082} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &513896081 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 513896080} + 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: 1199638084} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &513896082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 513896080} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, 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 + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u63D0\u4EA4" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: c7fc4cbba4b38a04c8985d4dbce12a73, type: 2} + m_sharedMaterial: {fileID: -5947736473428621296, guid: c7fc4cbba4b38a04c8985d4dbce12a73, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &513896083 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 513896080} + m_CullTransparentMesh: 1 +--- !u!1 &564105415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 564105416} + - component: {fileID: 564105419} + - component: {fileID: 564105418} + - component: {fileID: 564105417} + m_Layer: 0 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &564105416 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 564105415} + 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: 62777894} + m_Father: {fileID: 429452829} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &564105417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 564105415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1340148882} + m_HandleRect: {fileID: 1340148881} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &564105418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 564105415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &564105419 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 564105415} + m_CullTransparentMesh: 1 +--- !u!1 &682812502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 682812503} + - component: {fileID: 682812506} + - component: {fileID: 682812505} + - component: {fileID: 682812504} + m_Layer: 0 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &682812503 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682812502} + 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: 1316836929} + m_Father: {fileID: 429452829} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -17, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &682812504 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682812502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &682812505 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682812502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &682812506 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682812502} + m_CullTransparentMesh: 1 --- !u!1 &791020753 GameObject: m_ObjectHideFlags: 0 @@ -823,7 +877,7 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 4294967295 m_MaxRayIntersections: 0 ---- !u!1 &1147676900 +--- !u!1 &980860028 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -831,278 +885,493 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1147676901} - - component: {fileID: 1147676902} - - component: {fileID: 1147676903} - - component: {fileID: 1147676904} - - component: {fileID: 1147676906} - - component: {fileID: 1147676907} + - component: {fileID: 980860029} + - component: {fileID: 980860032} + - component: {fileID: 980860031} + - component: {fileID: 980860030} m_Layer: 0 - m_Name: Shape + m_Name: "UI\u90E8\u5206" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1147676901 -Transform: +--- !u!224 &980860029 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1147676900} - serializedVersion: 2 + m_GameObject: {fileID: 980860028} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 2.06, y: -0.14, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 429452829} + - {fileID: 371269377} + m_Father: {fileID: 1429030511} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &980860030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980860028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &980860031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980860028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &980860032 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980860028} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 791020755} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1199638083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1199638084} + - component: {fileID: 1199638087} + - component: {fileID: 1199638086} + - component: {fileID: 1199638085} + m_Layer: 0 + m_Name: "\u63D0\u4EA4" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1199638084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1199638083} + 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: 372942195} - - {fileID: 301990982} - - {fileID: 2107594533} - - {fileID: 1702235238} - - {fileID: 785730923} - - {fileID: 281764986} - m_Father: {fileID: 0} + - {fileID: 513896081} + m_Father: {fileID: 371269377} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1147676902 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 331, y: -411} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1199638085 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1147676900} + m_GameObject: {fileID: 1199638083} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4be33b2e5baf96447a7df0d10cb22064, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: - shapeId: 0 - shapeName: "\u793A\u4F8B\u6A21\u5757" - currentRotation: 0 - width: 2 - height: 3 - cellSize: 1 - originalPatternStr: 0,1,1;1,1,0 ---- !u!212 &1147676903 -SpriteRenderer: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1199638086} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1199638086 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1147676900} + m_GameObject: {fileID: 1199638083} 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, 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: 0 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!60 &1147676904 -PolygonCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1147676900} - m_Enabled: 1 - m_Density: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_ForceSendLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_ForceReceiveLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_ContactCaptureLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_CallbackLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_IsTrigger: 0 - m_UsedByEffector: 0 - m_UsedByComposite: 0 - m_Offset: {x: 0, y: 0} - m_SpriteTilingProperty: - border: {x: 0, y: 0, z: 0, w: 0} - pivot: {x: 0, y: 0} - oldSize: {x: 0, y: 0} - newSize: {x: 0, y: 0} - adaptiveTilingThreshold: 0 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - m_Points: - m_Paths: - - - {x: -0.5, y: 0.5} - - {x: 0.5, y: 0.5} - - {x: 0.5, y: -0.5} - - {x: 1.5, y: -0.5} - - {x: 1.5, y: 0.5} - - {x: 1.5, y: 1.5} - - {x: 0.5, y: 1.5} - - {x: 0.5, y: 2.5} - - {x: -0.5, y: 2.5} - - {x: -0.5, y: 1.5} - m_UseDelaunayMesh: 0 ---- !u!114 &1147676906 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1199638087 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1199638083} + m_CullTransparentMesh: 1 +--- !u!1 &1316836928 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1316836929} + - component: {fileID: 1316836930} + m_Layer: 0 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1316836929 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1316836928} + 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: 682812503} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0.0009186144} + m_SizeDelta: {x: 0, y: 300} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1316836930 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1147676900} + m_GameObject: {fileID: 1316836928} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0c4fbab01ad40c2449c849cd2a8c620f, type: 3} + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} m_Name: m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: [] - - eventID: 1 - callback: - m_PersistentCalls: - m_Calls: [] - - eventID: 2 - callback: - m_PersistentCalls: - m_Calls: [] - - eventID: 3 - callback: - m_PersistentCalls: - m_Calls: [] - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: [] - - eventID: 5 - callback: - m_PersistentCalls: - m_Calls: [] - - eventID: 14 - callback: - m_PersistentCalls: - m_Calls: [] - - eventID: 13 - callback: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &1147676907 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 15 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 30 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &1325372365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1325372366} + - component: {fileID: 1325372368} + - component: {fileID: 1325372367} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1325372366 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325372365} + 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: 1773523316} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1325372367 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1147676900} + m_GameObject: {fileID: 1325372365} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62aeab6b39ab40949ab3e66462c5e295, type: 3} + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: - isDraggable: 1 - snapDistance: 0.5 - targetGrid: {fileID: 1928610078} - snapColor: {r: 0, g: 1, b: 0, a: 0.7} - invalidColor: {r: 1, g: 0, b: 0, a: 0.7} - normalColor: {r: 1, g: 1, b: 1, a: 1} - dragScale: 1.1 ---- !u!28 &1427590382 -Texture2D: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u91CD\u7F6E" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: c7fc4cbba4b38a04c8985d4dbce12a73, type: 2} + m_sharedMaterial: {fileID: -5947736473428621296, guid: c7fc4cbba4b38a04c8985d4dbce12a73, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1325372368 +CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325372365} + m_CullTransparentMesh: 1 +--- !u!1 &1340148880 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1340148881} + - component: {fileID: 1340148883} + - component: {fileID: 1340148882} + m_Layer: 0 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1340148881 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340148880} + 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: 62777894} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1340148882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340148880} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: - m_ImageContentsHash: - serializedVersion: 2 - Hash: 00000000000000000000000000000000 - m_ForcedFallbackFormat: 4 - m_DownscaleFallback: 0 - m_IsAlphaChannelOptional: 0 - serializedVersion: 2 - m_Width: 1 - m_Height: 1 - m_CompleteImageSize: 4 - m_MipsStripped: 0 - m_TextureFormat: 4 - m_MipCount: 1 - m_IsReadable: 1 - m_IsPreProcessed: 0 - m_IgnoreMipmapLimit: 0 - m_MipmapLimitGroupName: - m_StreamingMipmaps: 0 - m_StreamingMipmapsPriority: 0 - m_VTOnly: 0 - m_AlphaIsTransparency: 0 - m_ImageCount: 1 - m_TextureDimension: 2 - m_TextureSettings: - serializedVersion: 2 - m_FilterMode: 1 - m_Aniso: 1 - m_MipBias: 0 - m_WrapU: 0 - m_WrapV: 0 - m_WrapW: 0 - m_LightmapFormat: 0 - m_ColorSpace: 1 - m_PlatformBlob: - image data: 4 - _typelessdata: ff0000ff - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1340148883 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340148880} + m_CullTransparentMesh: 1 --- !u!1 &1429030510 GameObject: m_ObjectHideFlags: 0 @@ -1112,6 +1381,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1429030511} + - component: {fileID: 1429030512} + - component: {fileID: 1429030513} m_Layer: 0 m_Name: Block Puzzle Game m_TagString: Untagged @@ -1133,8 +1404,41 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1928610076} + - {fileID: 121321804} + - {fileID: 980860029} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1429030512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1429030510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d4ac8aed859d93147929de492c3bc62b, type: 3} + m_Name: + m_EditorClassIdentifier: + grid: {fileID: 1928610078} + shapeRoot: {fileID: 121321804} + validator: {fileID: 11400000, guid: 5198c209e90354148ae73619dd0b4f03, type: 2} + shapeRack: {fileID: 429452833} + submitButton: {fileID: 1199638085} + clearButton: {fileID: 1773523317} +--- !u!114 &1429030513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1429030510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c30929a4e1c9c6047b7bf080676d09be, type: 3} + m_Name: + m_EditorClassIdentifier: + fontSize: 50 --- !u!1 &1467061558 GameObject: m_ObjectHideFlags: 0 @@ -1217,7 +1521,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: isLocked: 0 ---- !u!1 &1702235237 +--- !u!1 &1773523315 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1225,82 +1529,119 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1702235238} - - component: {fileID: 1702235239} + - component: {fileID: 1773523316} + - component: {fileID: 1773523319} + - component: {fileID: 1773523318} + - component: {fileID: 1773523317} m_Layer: 0 - m_Name: Cell_1_0 + m_Name: "\u91CD\u7F6E" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1702235238 -Transform: +--- !u!224 &1773523316 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1702235237} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1, y: 0, z: 0} + m_GameObject: {fileID: 1773523315} + 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: 1147676901} + m_Children: + - {fileID: 1325372366} + m_Father: {fileID: 371269377} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &1702235239 -SpriteRenderer: + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 331, y: -486} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1773523317 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1702235237} + m_GameObject: {fileID: 1773523315} 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 587689673} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1773523318} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1773523318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773523315} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, 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 + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1773523319 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773523315} + m_CullTransparentMesh: 1 --- !u!1 &1928610075 GameObject: m_ObjectHideFlags: 0 @@ -1313,7 +1654,7 @@ GameObject: - component: {fileID: 1928610078} - component: {fileID: 1928610077} m_Layer: 0 - m_Name: Grid + m_Name: "\u7F51\u683C" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1379,90 +1720,6 @@ MonoBehaviour: emptyCellColor: {r: 0.9, g: 0.9, b: 0.9, a: 0.2} occupiedCellColor: {r: 0.2, g: 0.6, b: 1, a: 0.5} showCellStates: 1 ---- !u!1 &2107594532 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2107594533} - - component: {fileID: 2107594534} - m_Layer: 0 - m_Name: Cell_0_2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2107594533 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2107594532} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1147676901} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &2107594534 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2107594532} - 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: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 587689673} - m_Color: {r: 1, g: 1, b: 1, 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!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -1470,4 +1727,3 @@ SceneRoots: - {fileID: 1467061559} - {fileID: 791020756} - {fileID: 1429030511} - - {fileID: 1147676901} diff --git a/Assets/Scripts/Dialog System/BaseYarnCommand.cs b/Assets/Scripts/Dialog System/BaseYarnCommand.cs index 1bf5e48b2..5152b1c89 100644 --- a/Assets/Scripts/Dialog System/BaseYarnCommand.cs +++ b/Assets/Scripts/Dialog System/BaseYarnCommand.cs @@ -25,20 +25,6 @@ namespace AibisDream UIManager.Instance.ShowPanel(); } - [Obsolete] - [YarnCommand("switch_tv")] - public static void SwitchTV(string picName) - { - Debug.Log("switch_tv 已废弃"); - } - - [Obsolete] - [YarnCommand("show_tv_scene")] - public static void ShowTVScene(float duration) - { - Debug.Log("show_tv_scene 已废弃"); - } - [YarnCommand("load_scene")] public static IEnumerator LoadScene(string sceneName, float duration = 1) { diff --git a/Assets/Scripts/FixSystemNew/Clinic/ClinicYarnCommand.cs b/Assets/Scripts/FixSystemNew/Clinic/ClinicYarnCommand.cs index ec2fff66c..959d8c8a3 100644 --- a/Assets/Scripts/FixSystemNew/Clinic/ClinicYarnCommand.cs +++ b/Assets/Scripts/FixSystemNew/Clinic/ClinicYarnCommand.cs @@ -10,13 +10,6 @@ namespace AibisDream { private static ClinicSystem ClinicSystem => FixSystemCenter.SystemDic.Get(); - [Obsolete] - [YarnCommand("indoor_new")] - public static void Indoor(float duration) - { - Debug.Log("indoor 已废除"); - } - [YarnCommand("quit_clinic_new")] public static IEnumerator Quit(float duration) { diff --git a/Assets/Scripts/Framework/EventSystemKit/WorldScrollRect.cs b/Assets/Scripts/Framework/EventSystemKit/WorldScrollRect.cs new file mode 100644 index 000000000..363a804ae --- /dev/null +++ b/Assets/Scripts/Framework/EventSystemKit/WorldScrollRect.cs @@ -0,0 +1,499 @@ +using UnityEngine; +using UnityEngine.EventSystems; +using AibisDream.Framework; + +namespace AibisDream.Framework +{ + /// + /// 世界坐标下的滚动组件,类似ScrollRect但兼容SpriteRenderer + /// + [RequireComponent(typeof(Collider2D))] + public class WorldScrollRect : MonoBehaviour, IInteraction + { + [Header("滚动目标")] + [SerializeField] private Transform targetTransform; + + [Header("滚动方向")] + [SerializeField] private bool horizontal = true; + [SerializeField] private bool vertical = true; + + [Header("边界设置")] + [SerializeField] private bool useAutoBounds = true; + [SerializeField] private Bounds contentBounds; + [SerializeField] private Bounds viewportBounds; + + [Header("惯性滚动")] + [SerializeField] private bool inertia = true; + [SerializeField] private float decelerationRate = 0.135f; + [SerializeField] private float velocityThreshold = 0.1f; + + [Header("弹性边界")] + [SerializeField] private bool elasticity = true; + [SerializeField] private float elasticityStrength = 0.1f; + + [Header("鼠标滚轮")] + [SerializeField] private bool scrollWheelEnabled = true; + [SerializeField] private float scrollSensitivity = 1f; + + [Header("交互设置")] + [SerializeField] private bool isActive = true; + [SerializeField] private bool isAvailable = true; + + private EventTriggerEx _eventTrigger; + private Collider2D _collider; + private Vector3 _initialTargetPosition; + private Vector3 _lastMouseWorldPos; + private Vector3 _velocity; + private bool _isDragging; + private Vector3[] _velocityHistory = new Vector3[5]; + private int _velocityHistoryIndex; + private float _lastDragTime; + + // IInteraction接口实现 + public bool IsActive => isActive; + public bool IsAvailable => isAvailable; + public GameObject GetGameObject() => gameObject; + + private void Awake() + { + _eventTrigger = GetComponent(); + _collider = GetComponent(); + + if (targetTransform == null) + { + targetTransform = transform; + } + + _initialTargetPosition = targetTransform.position; + + // 注册拖拽事件 + _eventTrigger.Register(EventTriggerType.BeginDrag, OnBeginDrag); + _eventTrigger.Register(EventTriggerType.Drag, OnDrag); + _eventTrigger.Register(EventTriggerType.EndDrag, OnEndDrag); + } + + private void Start() + { + if (useAutoBounds) + { + CalculateBounds(); + } + } + + private void Update() + { + if (!isActive || !isAvailable) return; + + // 处理鼠标滚轮 + if (scrollWheelEnabled) + { + HandleScrollWheel(); + } + + // 处理惯性滚动 + if (inertia && !_isDragging && _velocity.magnitude > velocityThreshold) + { + ApplyInertia(); + } + + // 处理弹性边界 + if (elasticity) + { + ApplyElasticity(); + } + } + + /// + /// 计算内容边界和视口边界 + /// + private void CalculateBounds() + { + // 计算视口边界(从Collider2D获取) + if (_collider != null) + { + viewportBounds = _collider.bounds; + } + else + { + viewportBounds = new Bounds(transform.position, Vector3.one * 5f); + } + + // 计算内容边界(从targetTransform的子对象获取) + if (targetTransform != null) + { + Bounds bounds = new Bounds(); + bool first = true; + + // 检查targetTransform本身是否有Renderer + Renderer selfRenderer = targetTransform.GetComponent(); + if (selfRenderer != null) + { + bounds = selfRenderer.bounds; + first = false; + } + + // 遍历所有子对象 + foreach (Transform child in targetTransform) + { + Renderer renderer = child.GetComponent(); + if (renderer != null) + { + if (first) + { + bounds = renderer.bounds; + first = false; + } + else + { + bounds.Encapsulate(renderer.bounds); + } + } + else + { + // 如果没有Renderer,使用Transform位置 + if (first) + { + bounds = new Bounds(child.position, Vector3.zero); + first = false; + } + else + { + bounds.Encapsulate(child.position); + } + } + } + + if (!first) + { + contentBounds = bounds; + } + else + { + // 如果没有任何Renderer,使用targetTransform的位置 + contentBounds = new Bounds(targetTransform.position, Vector3.one * 2f); + } + } + else + { + contentBounds = new Bounds(transform.position, Vector3.one * 2f); + } + } + + /// + /// 开始拖拽 + /// + private void OnBeginDrag(BaseEventData data) + { + if (!IsActive || !IsAvailable) return; + if (data is not PointerEventData pointerData) return; + + _isDragging = true; + _velocity = Vector3.zero; + _lastMouseWorldPos = CameraKit.GetMouseWorldPos(pointerData.position); + _lastDragTime = Time.time; + _velocityHistoryIndex = 0; + + // 清除速度历史 + for (int i = 0; i < _velocityHistory.Length; i++) + { + _velocityHistory[i] = Vector3.zero; + } + } + + /// + /// 拖拽中 + /// + private void OnDrag(BaseEventData data) + { + if (!IsActive || !IsAvailable) return; + if (data is not PointerEventData pointerData) return; + + Vector3 currentMouseWorldPos = CameraKit.GetMouseWorldPos(pointerData.position); + Vector3 delta = currentMouseWorldPos - _lastMouseWorldPos; + + // 根据滚动方向限制delta + if (!horizontal) delta.x = 0f; + if (!vertical) delta.y = 0f; + delta.z = 0f; + + // 更新目标位置 + Vector3 newPosition = targetTransform.position + delta; + targetTransform.position = ClampPosition(newPosition); + + // 记录速度历史 + float deltaTime = Time.time - _lastDragTime; + if (deltaTime > 0f) + { + Vector3 velocity = delta / deltaTime; + _velocityHistory[_velocityHistoryIndex] = velocity; + _velocityHistoryIndex = (_velocityHistoryIndex + 1) % _velocityHistory.Length; + } + + _lastMouseWorldPos = currentMouseWorldPos; + _lastDragTime = Time.time; + } + + /// + /// 结束拖拽 + /// + private void OnEndDrag(BaseEventData data) + { + _isDragging = false; + + // 计算平均速度 + Vector3 totalVelocity = Vector3.zero; + int count = 0; + for (int i = 0; i < _velocityHistory.Length; i++) + { + if (_velocityHistory[i].magnitude > 0f) + { + totalVelocity += _velocityHistory[i]; + count++; + } + } + + if (count > 0) + { + _velocity = totalVelocity / count; + } + else + { + _velocity = Vector3.zero; + } + } + + /// + /// 应用惯性滚动 + /// + private void ApplyInertia() + { + // 应用衰减 + _velocity *= Mathf.Pow(decelerationRate, Time.deltaTime); + + // 根据滚动方向限制速度 + if (!horizontal) _velocity.x = 0f; + if (!vertical) _velocity.y = 0f; + _velocity.z = 0f; + + // 更新位置 + Vector3 newPosition = targetTransform.position + _velocity * Time.deltaTime; + targetTransform.position = ClampPosition(newPosition); + + // 如果速度太小,停止惯性 + if (_velocity.magnitude < velocityThreshold) + { + _velocity = Vector3.zero; + } + } + + /// + /// 应用弹性边界 + /// + private void ApplyElasticity() + { + if (_isDragging || _velocity.magnitude > velocityThreshold) return; + + Vector3 currentPos = targetTransform.position; + Vector3 clampedPos = ClampPosition(currentPos); + Vector3 offset = currentPos - clampedPos; + + if (offset.magnitude > 0.01f) + { + // 应用弹性回弹 + Vector3 elasticForce = -offset * elasticityStrength; + Vector3 newPosition = currentPos + elasticForce * Time.deltaTime; + targetTransform.position = ClampPosition(newPosition); + } + } + + /// + /// 处理鼠标滚轮 + /// + private void HandleScrollWheel() + { + Vector2 scrollDelta = Input.mouseScrollDelta; + if (scrollDelta.magnitude == 0f) return; + + // 检查鼠标是否在视口内 + Vector3 mouseWorldPos = CameraKit.GetMouseWorldPos(Input.mousePosition); + if (!viewportBounds.Contains(mouseWorldPos)) return; + + Vector3 scrollDelta3D = new Vector3( + horizontal ? scrollDelta.x * scrollSensitivity : 0f, + vertical ? scrollDelta.y * scrollSensitivity : 0f, + 0f + ); + + Vector3 newPosition = targetTransform.position + scrollDelta3D; + targetTransform.position = ClampPosition(newPosition); + + // 停止惯性滚动 + _velocity = Vector3.zero; + } + + /// + /// 限制位置在边界内 + /// + private Vector3 ClampPosition(Vector3 position) + { + if (!useAutoBounds && contentBounds.size.magnitude < 0.01f) + { + return position; + } + + // 计算targetTransform的偏移量 + Vector3 offset = position - _initialTargetPosition; + + // 计算移动后的内容边界 + Bounds movedContentBounds = contentBounds; + movedContentBounds.center += offset; + + Vector3 contentMin = movedContentBounds.min; + Vector3 contentMax = movedContentBounds.max; + Vector3 viewportMin = viewportBounds.min; + Vector3 viewportMax = viewportBounds.max; + + Vector3 clampedOffset = offset; + + // 水平方向限制 + if (horizontal) + { + float contentWidth = contentMax.x - contentMin.x; + float viewportWidth = viewportMax.x - viewportMin.x; + + if (contentWidth > viewportWidth) + { + // 内容大于视口,限制内容边界在视口内 + // 内容左边界不能超过视口左边界 + if (contentMin.x > viewportMin.x) + { + clampedOffset.x -= (contentMin.x - viewportMin.x); + } + // 内容右边界不能超过视口右边界 + if (contentMax.x < viewportMax.x) + { + clampedOffset.x -= (contentMax.x - viewportMax.x); + } + } + // 如果内容小于视口,允许自由移动(不限制) + } + else + { + clampedOffset.x = 0f; + } + + // 垂直方向限制 + if (vertical) + { + float contentHeight = contentMax.y - contentMin.y; + float viewportHeight = viewportMax.y - viewportMin.y; + + if (contentHeight > viewportHeight) + { + // 内容大于视口,限制内容边界在视口内 + // 内容下边界不能超过视口下边界 + if (contentMin.y > viewportMin.y) + { + clampedOffset.y -= (contentMin.y - viewportMin.y); + } + // 内容上边界不能超过视口上边界 + if (contentMax.y < viewportMax.y) + { + clampedOffset.y -= (contentMax.y - viewportMax.y); + } + } + // 如果内容小于视口,允许自由移动(不限制) + } + else + { + clampedOffset.y = 0f; + } + + clampedOffset.z = 0f; + return _initialTargetPosition + clampedOffset; + } + + /// + /// 设置目标Transform + /// + public void SetTargetTransform(Transform target) + { + targetTransform = target; + if (target != null) + { + _initialTargetPosition = target.position; + } + } + + /// + /// 设置内容边界 + /// + public void SetContentBounds(Bounds bounds) + { + contentBounds = bounds; + useAutoBounds = false; + } + + /// + /// 设置视口边界 + /// + public void SetViewportBounds(Bounds bounds) + { + viewportBounds = bounds; + useAutoBounds = false; + } + + /// + /// 重新计算边界 + /// + public void RecalculateBounds() + { + CalculateBounds(); + } + + /// + /// 停止滚动 + /// + public void StopMovement() + { + _velocity = Vector3.zero; + _isDragging = false; + } + + /// + /// 重置到初始位置 + /// + public void ResetPosition() + { + StopMovement(); + if (targetTransform != null) + { + targetTransform.position = _initialTargetPosition; + } + } + + private void OnDestroy() + { + if (_eventTrigger != null) + { + _eventTrigger.UnRegister(EventTriggerType.BeginDrag, OnBeginDrag); + _eventTrigger.UnRegister(EventTriggerType.Drag, OnDrag); + _eventTrigger.UnRegister(EventTriggerType.EndDrag, OnEndDrag); + } + } + +#if UNITY_EDITOR + private void OnDrawGizmosSelected() + { + // 绘制视口边界 + Gizmos.color = Color.green; + Gizmos.DrawWireCube(viewportBounds.center, viewportBounds.size); + + // 绘制内容边界 + Gizmos.color = Color.yellow; + Gizmos.DrawWireCube(contentBounds.center, contentBounds.size); + } +#endif + } +} + diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs.meta b/Assets/Scripts/Framework/EventSystemKit/WorldScrollRect.cs.meta similarity index 83% rename from Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs.meta rename to Assets/Scripts/Framework/EventSystemKit/WorldScrollRect.cs.meta index 49962fd0d..f9b02029d 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs.meta +++ b/Assets/Scripts/Framework/EventSystemKit/WorldScrollRect.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ab4b77b210903a6428113bbc4e0fac09 +guid: 62f74d13a65af244a814f1f7306a1925 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Framework/LogKit/FileLogger.cs b/Assets/Scripts/Framework/LogKit/FileLogger.cs index 373d8efc6..0928211e3 100644 --- a/Assets/Scripts/Framework/LogKit/FileLogger.cs +++ b/Assets/Scripts/Framework/LogKit/FileLogger.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; namespace AibisDream.Kit @@ -18,7 +18,7 @@ namespace AibisDream.Kit /// /// 开始打印 /// - public FileLogger(string filename, string filePath, int saveDays) + public FileLogger(string filename, string filePath, int saveDays, string version = null) { _filename = filename; _filePath = filePath.TrimEnd('/') + "/"; @@ -26,6 +26,13 @@ namespace AibisDream.Kit StartNewFile(); DeleteOldFile(); _currentLogDay = CurrentDay; + + // 在日志开头写入版本号信息 + if (!string.IsNullOrEmpty(version)) + { + Write($"Version: {version}\n"); + } + Write("*********************************************************\nSystem Start at " + DateTime.Now.ToString("HH:mm:ss") + "\n*********************************************************\n"); @@ -50,6 +57,7 @@ namespace AibisDream.Kit } _fileWriter = File.AppendText(_filePath + string.Format(_filename, DateTime.Now)); + _fileWriter.AutoFlush = true; // 启用自动刷新,实现流式写入 } public void Write(string content) diff --git a/Assets/Scripts/Framework/LogKit/LogKit.cs b/Assets/Scripts/Framework/LogKit/LogKit.cs index 013ff13e9..9eebda169 100644 --- a/Assets/Scripts/Framework/LogKit/LogKit.cs +++ b/Assets/Scripts/Framework/LogKit/LogKit.cs @@ -34,8 +34,7 @@ namespace AibisDream.Kit { #if !UNITY_EDITOR DontDestroyOnLoad(gameObject); - _fileLogger = new FileLogger(LogFileName, LogPath, SaveDays); - LogMessage($"Ver.{Application.version}", "", LogType.Log); + _fileLogger = new FileLogger(LogFileName, LogPath, SaveDays, Application.version); Application.logMessageReceivedThreaded += LogMessage; #endif } diff --git a/Assets/Scripts/Framework/ResourceKit/ResourceKit.cs b/Assets/Scripts/Framework/ResourceKit/ResourceKit.cs index 00688ba8c..bac70d74a 100644 --- a/Assets/Scripts/Framework/ResourceKit/ResourceKit.cs +++ b/Assets/Scripts/Framework/ResourceKit/ResourceKit.cs @@ -1,10 +1,13 @@ using System; using System.Linq; -using UnityEditor; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; +#if UNITY_EDITOR +using UnityEditor; +#endif + namespace AibisDream.Framework { public static class ResourceKit @@ -72,7 +75,7 @@ namespace AibisDream.Framework return default; } } - + public static void LoadAssetAsync(string key, Action callback) where T : UnityEngine.Object { Addressables.LoadAssetAsync(key).Completed += operation => @@ -87,5 +90,27 @@ namespace AibisDream.Framework } }; } + +#if UNITY_EDITOR + public static bool GetAssetAddressableKey(UnityEngine.Object asset, out string addressableKey) + { + string path = AssetDatabase.GetAssetPath(asset); + // 获取其在Addressables里的路径 + var settings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Settings; + if (settings != null) + { + var entry = settings.FindAssetEntry(AssetDatabase.AssetPathToGUID(path)); + if (entry != null) + { + Debug.Log($"Addressable Key: {entry.address}"); + addressableKey = entry.address; + return true; + } + } + Debug.Log($"资源{asset.name}不存在于Addressables中"); + addressableKey = path; + return false; + } } +#endif } \ No newline at end of file diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs index b77d7b446..9ec14dcb2 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/BlockPuzzleSystem.cs @@ -1,6 +1,4 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; +using AibisDream.Kit; namespace AibisDream { @@ -8,7 +6,7 @@ namespace AibisDream /// BlockPuzzle游戏系统 /// 整合所有子系统的核心控制器 /// - public class BlockPuzzleSystem : MonoBehaviour + public class BlockPuzzleSystem : Singleton { // 接口引用将在实现类中注入 // 这里先定义基础框架接口结构 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzle.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzle.cs new file mode 100644 index 000000000..08c987746 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzle.cs @@ -0,0 +1,291 @@ +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEngine.UI; +using AibisDream.Kit; +using AibisDream.Utility; + + +namespace AibisDream +{ + public class BlockPuzzle : Singleton + { + // 物体索引 + [SerializeField] public BlockPuzzleGrid grid; + [SerializeField] private Transform shapeRoot; + [SerializeField] private BlockPuzzleValidator validator; + [SerializeField] public BlockShapeRack shapeRack; + + // 临时按钮 + [SerializeField] private Button submitButton; + [SerializeField] private Button clearButton; + + // 事件 + public event Action OnSubmit; + public event Action OnPreview; + + private void Start() + { + Initialize(); + + submitButton.onClick.AddListener(SubmitGameResult); + clearButton.onClick.AddListener(ResetGame); + } + + public void Initialize() + { + // 初始化网格 + grid.Initialize(); + grid.OnShapePlaced += PreCheckGameState; + // 初始化网格上的Shape预设 + + // 初始化图形货架 + // shapeRack.Initialize(); + } + + private void PreCheckGameState() + { + var shapes = grid.GetShapes(); + var validateResult = validator.Validate(shapes); + OnPreview?.Invoke(validateResult); + } + + private void SubmitGameResult() + { + var shapes = grid.GetShapes(); + var validateResult = validator.Validate(shapes); + OnSubmit?.Invoke(validateResult); + } + + private void ResetGame() + { + + } + } + + public static class BlockPuzzleKit + { + /// + /// 保存单个 BlockShapeData 到文件,确保 Key 唯一(如果 Key 已存在则更新,不存在则添加) + /// + /// 要保存的数据 + /// 数据的键(用于字典存储) + /// 保存路径,如果为空则使用默认路径 + public static void SaveBlockShapeData(BlockShapeData data, string key, string path = null) + { + if (string.IsNullOrEmpty(path)) + { + path = ConstRef.BlockShapeDataPath; + } + + // 确保目录存在 + string directory = Path.GetDirectoryName(path); + if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + // 读取现有字典(如果文件存在) + Dictionary dataDict; + if (File.Exists(path)) + { + try + { + dataDict = JsonUtil.ReadBeanDict(path) ?? new Dictionary(); + } + catch (Exception e) + { + Debug.LogWarning($"读取现有 BlockShapeData 文件失败,将创建新文件: {e.Message}"); + dataDict = new Dictionary(); + } + } + else + { + dataDict = new Dictionary(); + } + + // 更新或添加数据(确保 Key 唯一) + dataDict[key] = data; + + // 保存整个字典 + JsonUtil.SaveBean(dataDict, path); + } + + /// + /// 保存 BlockShapeData 数组到文件 + /// + /// 要保存的数据数组 + /// 保存路径,如果为空则使用默认路径 + public static void SaveBlockShapeDataArray(BlockShapeData[] dataArray, string path = null) + { + if (string.IsNullOrEmpty(path)) + { + path = ConstRef.BlockShapeDataPath; + } + + // 确保目录存在 + string directory = Path.GetDirectoryName(path); + if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + JsonUtil.SaveArray(dataArray, path); + } + + /// + /// 保存 BlockShapeData 字典到文件 + /// + /// 要保存的数据字典 + /// 保存路径,如果为空则使用默认路径 + public static void SaveBlockShapeDataDict(Dictionary dataDict, string path = null) + { + if (string.IsNullOrEmpty(path)) + { + path = ConstRef.BlockShapeDataPath; + } + + // 确保目录存在 + string directory = Path.GetDirectoryName(path); + if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + JsonUtil.SaveBean(dataDict, path); + } + + /// + /// 从文件加载单个 BlockShapeData + /// + /// 数据的键 + /// 文件路径,如果为空则使用默认路径 + /// 加载的数据 + /// 是否加载成功 + public static bool TryLoadBlockShapeData(string key, out BlockShapeData data, string path = null) + { + if (string.IsNullOrEmpty(path)) + { + path = ConstRef.BlockShapeDataPath; + } + + try + { + if (!File.Exists(path)) + { + data = default; + return false; + } + + var dict = JsonUtil.ReadBeanDict(path); + if (dict != null && dict.ContainsKey(key)) + { + data = dict[key]; + return true; + } + + data = default; + return false; + } + catch (Exception e) + { + Debug.LogError($"加载 BlockShapeData 失败: {e.Message}"); + data = default; + return false; + } + } + + /// + /// 从文件加载 BlockShapeData 数组 + /// + /// 文件路径,如果为空则使用默认路径 + /// 加载的数据数组 + /// 是否加载成功 + public static bool TryLoadBlockShapeDataArray(out BlockShapeData[] dataArray, string path = null) + { + if (string.IsNullOrEmpty(path)) + { + path = ConstRef.BlockShapeDataPath; + } + + try + { + if (!File.Exists(path)) + { + dataArray = null; + return false; + } + + dataArray = JsonUtil.ReadBeanArray(path); + return dataArray != null; + } + catch (Exception e) + { + Debug.LogError($"加载 BlockShapeData 数组失败: {e.Message}"); + dataArray = null; + return false; + } + } + + /// + /// 从文件加载 BlockShapeData 字典 + /// + /// 文件路径,如果为空则使用默认路径 + /// 加载的数据字典 + /// 是否加载成功 + public static bool TryLoadBlockShapeDataDict(out Dictionary dataDict, string path = null) + { + if (string.IsNullOrEmpty(path)) + { + path = ConstRef.BlockShapeDataPath; + } + + try + { + if (!File.Exists(path)) + { + dataDict = null; + return false; + } + + dataDict = JsonUtil.ReadBeanDict(path); + return dataDict != null; + } + catch (Exception e) + { + Debug.LogError($"加载 BlockShapeData 字典失败: {e.Message}"); + dataDict = null; + return false; + } + } + + /// + /// 获取所有已保存的 BlockShapeData 的键列表 + /// + /// 文件路径,如果为空则使用默认路径 + /// 键列表,如果文件不存在则返回空数组 + public static string[] GetAllBlockShapeDataKeys(string path = null) + { + if (string.IsNullOrEmpty(path)) + { + path = ConstRef.BlockShapeDataPath; + } + + try + { + if (!File.Exists(path)) + { + return new string[0]; + } + + return JsonUtil.ReadKeys(path); + } + catch (Exception e) + { + Debug.LogError($"获取 BlockShapeData 键列表失败: {e.Message}"); + return new string[0]; + } + } + } +} diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzle.cs.meta similarity index 83% rename from Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzle.cs.meta index fa33a1d4a..c290a38fd 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockPuzzleGameLogic.cs.meta +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzle.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4603b37a885792d4b85d6d5d392d4862 +guid: d4ac8aed859d93147929de492c3bc62b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs index 526dea379..1c80fd931 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGrid.cs @@ -1,3 +1,6 @@ +using System; +using System.Collections.Generic; +using System.Linq; using UnityEngine; namespace AibisDream @@ -29,6 +32,9 @@ namespace AibisDream public int Height { get; private set; } public float CellSize { get; private set; } public Vector3 Origin { get; private set; } + public Dictionary ShapeDict { get; private set; } + + public event Action OnShapePlaced; private void Start() { @@ -66,6 +72,8 @@ namespace AibisDream _grid = new GridCellState[width, height]; _isInitialized = true; + ShapeDict = new Dictionary(); + Clear(); } @@ -160,12 +168,6 @@ namespace AibisDream gridX = Mathf.FloorToInt(localPos.x / CellSize); gridY = Mathf.FloorToInt(localPos.y / CellSize); - // TODO: 不检查是否在有效范围内,留给后续检查 - // if (!IsValidPosition(gridX, gridY)) - // { - // return false; - // } - return true; } @@ -253,6 +255,20 @@ namespace AibisDream cellSize = Mathf.Max(0.1f, cellSize); } + public List GetShapes() + { + return ShapeDict.Keys.ToList(); + } + + private void OnDestroy() + { + OnShapePlaced = null; + } + + + // ============================================ 绘制预览 ============================================ + + /// /// 在编辑器中绘制网格预览 /// @@ -298,7 +314,7 @@ namespace AibisDream { Vector3 cellCenter = GridToWorld(x, y); GridCellState state = GetCellState(x, y); - + Gizmos.color = state == GridCellState.Occupied ? occupiedCellColor : emptyCellColor; Gizmos.DrawCube(cellCenter, cellSizeVec); } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs deleted file mode 100644 index 9e5ba0c24..000000000 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridEx.cs +++ /dev/null @@ -1,96 +0,0 @@ -using UnityEngine; - -namespace AibisDream -{ - public static class BlockPuzzleGridEx - { - public static SnapResult CheckSnapToGrid(this IBlockPuzzleGrid grid, BlockShape shape) - { - // 预制错误结果作为返回值 - SnapResult result = new SnapResult - { - canSnap = false, - snapPosition = shape.transform.position, - gridX = 0, - gridY = 0, - distance = float.MaxValue, - gridPositions = new Vector2Int[0] - }; - - // 将Shape的世界坐标转换为网格坐标(可以是虚拟坐标) - bool inGrid = grid.WorldToGrid(shape.transform.position, out int gridX, out int gridY); - if (!inGrid) return result; - - // 将形状的所有格子转换为网格坐标 - // gridX, gridY 是形状的 (0, 0) 点在网格中的位置 - Vector2Int[] gridCells = ConvertShapeToGridCells(shape, gridX, gridY); - result.gridX = gridX; - result.gridY = gridY; - result.snapPosition = grid.GridToWorld(gridX, gridY); - result.gridPositions = gridCells; - - // 逐个坐标验证是否可以放置 - var canPlace = grid.CanPlace(gridCells); - if (!canPlace) return result; - result.canSnap = true; - result.distance = Vector3.Distance(shape.transform.position, result.snapPosition); - - return result; - } - - /// - /// 将形状的相对坐标转换为网格坐标 - /// 已知形状的 (0, 0) 点在网格中的位置为 (gridX, gridY),将形状的其他格子坐标转换为网格坐标 - /// - /// 形状 - /// 网格X坐标(形状左下角位置,即形状的 (0, 0) 点对应的网格坐标) - /// 网格Y坐标(形状左下角位置,即形状的 (0, 0) 点对应的网格坐标) - /// 形状所有格子在网格中的坐标数组 - public static Vector2Int[] ConvertShapeToGridCells(IBlockShape shape, int gridX, int gridY) - { - if (shape == null) - { - return new Vector2Int[0]; - } - - Vector2Int[] blockPositions = shape.GetBlockPositions(); - if (blockPositions == null || blockPositions.Length == 0) - { - return new Vector2Int[0]; - } - - Vector2Int[] gridCells = new Vector2Int[blockPositions.Length]; - - for (int i = 0; i < blockPositions.Length; i++) - { - // 将形状的相对坐标转换为网格坐标 - // 形状的 (0, 0) 对应网格的 (gridX, gridY) - // 形状的 (blockPos.x, blockPos.y) 对应网格的 (gridX + blockPos.x, gridY + blockPos.y) - gridCells[i] = new Vector2Int( - gridX + blockPositions[i].x, - gridY + blockPositions[i].y - ); - } - - return gridCells; - } - - /// - /// 为吸附制作预览 - /// - /// 转换后的网格坐标组 - public static void ShowSnapPreview(this IBlockPuzzleGrid grid, Vector2Int[] shapeCells) - { - - } - - public static void TrySnapToGrid(this IBlockPuzzleGrid grid, BlockShape shape, Vector2Int rootCell) - { - // 判断RootCell的位置 - var rootWorldPos = grid.GridToWorld(rootCell.x, rootCell.y); - // 已经判断是否可吸附,直接吸就好了 - shape.transform.position = rootWorldPos; - // TODO: 设置网格状态 - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs deleted file mode 100644 index bf298d12a..000000000 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs +++ /dev/null @@ -1,148 +0,0 @@ -using UnityEngine; - -namespace AibisDream -{ - /// - /// BlockPuzzle网格系统使用示例 - /// 演示如何使用网格系统和可视化组件 - /// - public class BlockPuzzleGridExample : MonoBehaviour - { - [Header("组件引用")] - [SerializeField] private BlockPuzzleGrid gridComponent; - [SerializeField] private GridVisualizer gridVisualizer; - - [Header("测试设置")] - [SerializeField] private KeyCode testPlaceKey = KeyCode.Space; - [SerializeField] private KeyCode testClearKey = KeyCode.C; - - private IBlockPuzzleGrid _grid; - - private void Start() - { - // 初始化网格组件 - if (gridComponent != null) - { - gridComponent.Initialize(); - _grid = gridComponent; // 组件直接实现IBlockPuzzleGrid接口 - } - - // 设置可视化器 - if (gridVisualizer != null && _grid != null) - { - gridVisualizer.SetGrid(_grid); - } - } - - private void Update() - { - if (_grid == null) return; - - // 测试:按空格键随机放置一个格子 - if (Input.GetKeyDown(testPlaceKey)) - { - TestPlaceRandomCell(); - } - - // 测试:按C键清空网格 - if (Input.GetKeyDown(testClearKey)) - { - TestClearGrid(); - } - - // 测试:鼠标点击放置格子 - if (Input.GetMouseButtonDown(0)) - { - TestPlaceCellAtMouse(); - } - } - - /// - /// 测试:在随机位置放置一个格子 - /// - private void TestPlaceRandomCell() - { - if (_grid == null) return; - - int x = Random.Range(0, _grid.Width); - int y = Random.Range(0, _grid.Height); - - if (_grid.IsCellEmpty(x, y)) - { - _grid.SetCellState(x, y, GridCellState.Occupied); - Debug.Log($"放置格子到位置 ({x}, {y})"); - - // 更新可视化 - if (gridVisualizer != null) - { - gridVisualizer.UpdateCellVisual(x, y); - } - } - } - - /// - /// 测试:在鼠标位置放置格子 - /// - private void TestPlaceCellAtMouse() - { - if (_grid == null) return; - - // 获取鼠标世界坐标(需要根据你的相机设置调整) - Camera cam = Camera.main; - if (cam == null) return; - - Vector3 mousePos = Input.mousePosition; - mousePos.z = cam.nearClipPlane + 1f; // 设置合适的Z距离 - Vector3 worldPos = cam.ScreenToWorldPoint(mousePos); - - // 转换为网格坐标 - if (_grid.WorldToGrid(worldPos, out int gridX, out int gridY)) - { - if (_grid.IsCellEmpty(gridX, gridY)) - { - _grid.SetCellState(gridX, gridY, GridCellState.Occupied); - Debug.Log($"鼠标点击放置格子到位置 ({gridX}, {gridY})"); - - // 更新可视化 - if (gridVisualizer != null) - { - gridVisualizer.UpdateCellVisual(gridX, gridY); - } - } - } - } - - /// - /// 测试:清空网格 - /// - private void TestClearGrid() - { - if (_grid == null) return; - - _grid.Clear(); - Debug.Log("清空网格"); - - // 更新可视化 - if (gridVisualizer != null) - { - gridVisualizer.UpdateAllCellsVisual(); - } - } - - private void OnGUI() - { - if (_grid == null) return; - - GUILayout.BeginArea(new Rect(10, 10, 300, 200)); - GUILayout.Label($"网格尺寸: {_grid.Width} x {_grid.Height}"); - GUILayout.Label($"单元格大小: {_grid.CellSize}"); - GUILayout.Label($"已占用: {_grid.GetOccupiedCount()} / {_grid.GetTotalCellCount()}"); - GUILayout.Space(10); - GUILayout.Label($"按 {testPlaceKey} 键:随机放置格子"); - GUILayout.Label($"按 {testClearKey} 键:清空网格"); - GUILayout.Label("鼠标左键:在鼠标位置放置格子"); - GUILayout.EndArea(); - } - } -} - diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleValidator.cs new file mode 100644 index 000000000..ca344699f --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleValidator.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace AibisDream +{ + [CreateAssetMenu(fileName = "BlockPuzzleValidator", menuName = "Block Puzzle/BlockPuzzleValidator")] + public class BlockPuzzleValidator : ScriptableObject + { + [Tooltip("基础条件, 不满足无法提交")] + public ValidateItem[] baseConditions; + [Tooltip("额外条件, 不满足也可以提交")] + public ValidateItem[] extraConditions; + + /// + /// 验证是否可以完成拼图 + /// + /// + /// + public ValidateResult Validate(List shapeInGrid) + { + var result = new ValidateResult(); + + string[] shapeNames = shapeInGrid.Select(s => s.ShapeName).ToArray(); + // 先校验基础条件 + foreach (var condition in baseConditions) + { + var itemResult = condition.Validate(shapeNames); + + result.baseConditionResults.Add((condition.name, itemResult)); + result.isPass = result.isPass && itemResult; + } + + // 再校验额外条件 + foreach (var condition in extraConditions) + { + var itemResult = condition.Validate(shapeNames); + + result.extraConditionResults.Add((condition.name, itemResult)); + result.isExtraConditionPass = result.isExtraConditionPass && itemResult; + } + + return result; + } + + [System.Serializable] + public struct ValidateItem + { + [Tooltip("名称, 仅用于显示")] + public string name; + + [Tooltip("规则要求的组件,多种组件则合并后判断")] + public string[] targetNames; + public CompareSign compareSign; + public int count; + + public bool Validate(string[] shapeNames) + { + var targetNames = this.targetNames; + + if (targetNames.Length == 0) return true; + + var totalCount = shapeNames.Where(name => targetNames.Contains(name)).Count(); + return compareSign switch + { + CompareSign.Equal => totalCount == count, + CompareSign.NotEqual => totalCount != count, + CompareSign.GreaterThan => totalCount > count, + CompareSign.LessThan => totalCount < count, + CompareSign.GreaterThanOrEqual => totalCount >= count, + CompareSign.LessThanOrEqual => totalCount <= count, + _ => false, + }; + } + } + + // 比较符 + public enum CompareSign + { + Equal, + NotEqual, + GreaterThan, + LessThan, + GreaterThanOrEqual, + LessThanOrEqual, + } + } + + public class ValidateResult + { + public bool isPass; + public bool isExtraConditionPass; + + public List<(string name, bool isPass)> baseConditionResults; + public List<(string name, bool isPass)> extraConditionResults; + + public ValidateResult() + { + isPass = true; + isExtraConditionPass = true; + + baseConditionResults = new List<(string name, bool isPass)>(); + extraConditionResults = new List<(string name, bool isPass)>(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleValidator.cs.meta similarity index 83% rename from Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs.meta rename to Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleValidator.cs.meta index 0fdf9130c..05c3f28ed 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleGridExample.cs.meta +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockPuzzleValidator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cfe4f41ce15355345b390aa2701f3f46 +guid: 8eea7264a53eb574eabe4bd65c4fa462 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs index 792658e6b..5b3e7a359 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShape.cs @@ -1,6 +1,8 @@ +using System; using System.Collections.Generic; using AibisDream.Utility; using UnityEngine; +using AibisDream.Framework; namespace AibisDream { @@ -10,20 +12,16 @@ namespace AibisDream // 模块数据 [Header("模块数据")] - [SerializeField] private int shapeId; - [SerializeField] private string shapeName; - [SerializeField] private RotationAngle currentRotation; - [SerializeField] private int width; - [SerializeField] private int height; - [SerializeField] private float cellSize; - [SerializeField] private string originalPatternStr; + [SerializeField] private BlockShapeData _blockShapeData; + private RotationAngle currentRotation; // 接口实现 - public int ShapeId => shapeId; - public string ShapeName => shapeName; + public ShapeDragger ShapeDragger { get; private set; } + public int ShapeId => _blockShapeData.shapeId; + public string ShapeName => _blockShapeData.shapeName; public RotationAngle CurrentRotation => currentRotation; - public int Width => width; - public int Height => height; + public int Width => GetCurrentWidth(); + public int Height => GetCurrentHeight(); public int BlockCount { get @@ -32,9 +30,9 @@ namespace AibisDream if (pattern == null) return 0; int count = 0; - for (int i = 0; i < width; i++) + for (int i = 0; i < _blockShapeData.width; i++) { - for (int j = 0; j < height; j++) + for (int j = 0; j < _blockShapeData.height; j++) { if (pattern[i, j] != 0) { @@ -46,16 +44,29 @@ namespace AibisDream } } + public void Init(BlockShapeData blockShapeData) + { + ShapeDragger = GetComponent(); + _blockShapeData = blockShapeData; + // 加载Sprite + LoadSprite(); + // 更新碰撞体 + UpdatePolygonCollider(); + } + public Vector2Int[] GetBlockPositions() { - var pattern = GetOriginalPattern(); + var pattern = GetCurrentPattern(); if (pattern == null) return new Vector2Int[0]; + int currentWidth = GetCurrentWidth(); + int currentHeight = GetCurrentHeight(); + List positions = new List(); - - for (int i = 0; i < width; i++) + + for (int i = 0; i < currentWidth; i++) { - for (int j = 0; j < height; j++) + for (int j = 0; j < currentHeight; j++) { if (pattern[i, j] != 0) { @@ -67,47 +78,233 @@ namespace AibisDream return positions.ToArray(); } - /// - /// 获取单元格渲染器数组(供拖拽组件使用) - /// - public SpriteRenderer[,] GetCellRenderers() - { - return _cellRenderers; - } - public int[,] GetCurrentPattern() { - throw new System.NotImplementedException(); + var originalPattern = GetOriginalPattern(); + if (originalPattern == null) return null; + + if (currentRotation == RotationAngle.Rotate0) + { + return originalPattern; + } + + return RotatePattern(originalPattern, currentRotation); } public int[,] GetOriginalPattern() { - return CommonUtil.DeserializeIntArray(originalPatternStr); + return CommonUtil.DeserializeIntArray(_blockShapeData.originalPatternStr); } public bool HasBlockAt(int x, int y) { - throw new System.NotImplementedException(); + var pattern = GetCurrentPattern(); + if (pattern == null) return false; + + int currentWidth = GetCurrentWidth(); + int currentHeight = GetCurrentHeight(); + + if (x < 0 || x >= currentWidth || y < 0 || y >= currentHeight) + return false; + + return pattern[x, y] != 0; + } + + /// + /// 根据网格情况计算出形状的物理中心位置 + /// + /// 形状的物理中心位置,z为0 + public Vector3 GetCenterPosition() + { + var pattern = GetCurrentPattern(); + if (pattern == null) return Vector3.zero; + + int currentWidth = GetCurrentWidth(); + int currentHeight = GetCurrentHeight(); + + Vector3 centerSum = Vector3.zero; + int blockCount = 0; + + // 遍历所有格子,计算填充格子的中心位置 + for (int i = 0; i < currentWidth; i++) + { + for (int j = 0; j < currentHeight; j++) + { + if (pattern[i, j] != 0) + { + // 计算格子(i,j)的物理中心位置 + // 格子左下角在 (i * cellSize, j * cellSize) + // 格子中心在 (i * cellSize + cellSize/2, j * cellSize + cellSize/2) + float cellCenterX = i * _blockShapeData.cellSize * GetAxis().x; + float cellCenterY = j * _blockShapeData.cellSize * GetAxis().y; + + centerSum += new Vector3(cellCenterX, cellCenterY, 0); + blockCount++; + } + } + } + + // 如果没有填充的格子,返回零向量 + if (blockCount == 0) + return Vector3.zero; + + // 返回所有填充格子的平均位置(物理中心) + return centerSum / blockCount; } public void ResetRotation() { - throw new System.NotImplementedException(); + currentRotation = RotationAngle.Rotate0; + UpdateVisualRotation(); } public void Rotate(RotationAngle angle) { - throw new System.NotImplementedException(); + currentRotation = angle; + UpdateVisualRotation(); } public void RotateClockwise() { - throw new System.NotImplementedException(); + // 顺时针旋转90度 + switch (currentRotation) + { + case RotationAngle.Rotate0: + currentRotation = RotationAngle.Rotate90; + break; + case RotationAngle.Rotate90: + currentRotation = RotationAngle.Rotate180; + break; + case RotationAngle.Rotate180: + currentRotation = RotationAngle.Rotate270; + break; + case RotationAngle.Rotate270: + currentRotation = RotationAngle.Rotate0; + break; + } + UpdateVisualRotation(); + } + + public Vector2Int GetAxis() + { + // 顺时针旋转90度 + return currentRotation switch + { + RotationAngle.Rotate0 => new Vector2Int(1, 1), + RotationAngle.Rotate90 => new Vector2Int(-1, 1), + RotationAngle.Rotate180 => new Vector2Int(-1, -1), + RotationAngle.Rotate270 => new Vector2Int(1, -1), + _ => new Vector2Int(1, 1), + }; } public void RotateCounterClockwise() { - throw new System.NotImplementedException(); + // 逆时针旋转90度 + switch (currentRotation) + { + case RotationAngle.Rotate0: + currentRotation = RotationAngle.Rotate270; + break; + case RotationAngle.Rotate90: + currentRotation = RotationAngle.Rotate0; + break; + case RotationAngle.Rotate180: + currentRotation = RotationAngle.Rotate90; + break; + case RotationAngle.Rotate270: + currentRotation = RotationAngle.Rotate180; + break; + } + UpdateVisualRotation(); + } + + /// + /// 获取当前旋转后的宽度 + /// + private int GetCurrentWidth() + { + // 90度和270度时,宽度和高度交换 + return (currentRotation == RotationAngle.Rotate90 || currentRotation == RotationAngle.Rotate270) + ? _blockShapeData.height + : _blockShapeData.width; + } + + /// + /// 获取当前旋转后的高度 + /// + private int GetCurrentHeight() + { + // 90度和270度时,宽度和高度交换 + return (currentRotation == RotationAngle.Rotate90 || currentRotation == RotationAngle.Rotate270) + ? _blockShapeData.width + : _blockShapeData.height; + } + + /// + /// 旋转pattern数组 + /// + private int[,] RotatePattern(int[,] pattern, RotationAngle angle) + { + if (pattern == null) return null; + + int originalWidth = pattern.GetLength(0); + int originalHeight = pattern.GetLength(1); + int[,] rotatedPattern; + + switch (angle) + { + case RotationAngle.Rotate90: + // 顺时针90度:new[i][j] = old[width-1-j][i] + rotatedPattern = new int[originalHeight, originalWidth]; + for (int i = 0; i < originalHeight; i++) + { + for (int j = 0; j < originalWidth; j++) + { + rotatedPattern[i, j] = pattern[originalWidth - 1 - j, i]; + } + } + break; + + case RotationAngle.Rotate180: + // 180度:new[i][j] = old[width-1-i][height-1-j] + rotatedPattern = new int[originalWidth, originalHeight]; + for (int i = 0; i < originalWidth; i++) + { + for (int j = 0; j < originalHeight; j++) + { + rotatedPattern[i, j] = pattern[originalWidth - 1 - i, originalHeight - 1 - j]; + } + } + break; + + case RotationAngle.Rotate270: + // 逆时针90度(顺时针270度):new[i][j] = old[j][height-1-i] + rotatedPattern = new int[originalHeight, originalWidth]; + for (int i = 0; i < originalHeight; i++) + { + for (int j = 0; j < originalWidth; j++) + { + rotatedPattern[i, j] = pattern[j, originalHeight - 1 - i]; + } + } + break; + + default: // Rotate0 + rotatedPattern = (int[,])pattern.Clone(); + break; + } + + return rotatedPattern; + } + + /// + /// 更新视觉旋转(更新transform的rotation) + /// + private void UpdateVisualRotation() + { + float rotationZ = (float)currentRotation; + transform.rotation = Quaternion.Euler(0, 0, rotationZ); } private Sprite CreateDefaultSprite() @@ -125,11 +322,11 @@ namespace AibisDream _cellRenderers = null; // 根据Width和Height,绘制Cells,Cell为SpriteRenderer - _cellRenderers = new SpriteRenderer[width, height]; + _cellRenderers = new SpriteRenderer[_blockShapeData.width, _blockShapeData.height]; var defaultSprite = CreateDefaultSprite(); - for (int i = 0; i < width; i++) + for (int i = 0; i < _blockShapeData.width; i++) { - for (int j = 0; j < height; j++) + for (int j = 0; j < _blockShapeData.height; j++) { var cell = new GameObject($"Cell_{i}_{j}"); var cellRenderer = cell.AddComponent(); @@ -138,53 +335,75 @@ namespace AibisDream cell.transform.parent = transform; // 计算Cell应处的位置 - var cellPosX = i * cellSize; - var cellPosY = j * cellSize; + var cellPosX = i * _blockShapeData.cellSize; + var cellPosY = j * _blockShapeData.cellSize; cell.transform.localPosition = new Vector3(cellPosX, cellPosY, 0); } } // 反序列化并处理 - var pattern = CommonUtil.DeserializeIntArray(originalPatternStr); + var pattern = CommonUtil.DeserializeIntArray(_blockShapeData.originalPatternStr); // 先判断pattern的维度是否与width和height一致 - if (pattern.GetLength(0) != width || pattern.GetLength(1) != height) + if (pattern.GetLength(0) != _blockShapeData.width || pattern.GetLength(1) != _blockShapeData.height) { // 如果不一致,就不处理 - Debug.LogWarning($"Pattern dimension mismatch: {pattern.GetLength(0)}x{pattern.GetLength(1)} != {width}x{height}"); + Debug.LogWarning($"Pattern dimension mismatch: {pattern.GetLength(0)}x{pattern.GetLength(1)} != {_blockShapeData.width}x{_blockShapeData.height}"); return; } // 如果一致,就读取pattern,并设置对应的cell的SpriteRenderer是否激活 - for (int i = 0; i < width; i++) + for (int i = 0; i < _blockShapeData.width; i++) { - for (int j = 0; j < height; j++) + for (int j = 0; j < _blockShapeData.height; j++) { _cellRenderers[i, j].enabled = pattern[i, j] != 0; } } + LoadSprite(); // 更新碰撞体形状 UpdatePolygonCollider(); } + private void LoadSprite() + { + if (!string.IsNullOrEmpty(_blockShapeData.spritePath)) + { + var sprite = ResourceKit.LoadAssetSync(_blockShapeData.spritePath); + var renderer = GetComponent(); + renderer.sprite = sprite; + } + } + public void SaveShape() { // 如果_cellRenderers不为空,则序列化并保存 if (_cellRenderers != null) { - var pattern = new int[width, height]; - for (int i = 0; i < width; i++) + var pattern = new int[_blockShapeData.width, _blockShapeData.height]; + for (int i = 0; i < _blockShapeData.width; i++) { - for (int j = 0; j < height; j++) + for (int j = 0; j < _blockShapeData.height; j++) { pattern[i, j] = _cellRenderers[i, j].enabled ? 1 : 0; } } Debug.Log($"SaveShape: {CommonUtil.SerializeIntArray(pattern)}"); - originalPatternStr = CommonUtil.SerializeIntArray(pattern); - - // 保存后更新碰撞体 - UpdatePolygonCollider(); + _blockShapeData.originalPatternStr = CommonUtil.SerializeIntArray(pattern); + + var renderer = GetComponent(); + if (renderer != null && renderer.sprite != null) + { + Debug.Log($"SaveShape: {renderer.sprite.name}"); + if (ResourceKit.GetAssetAddressableKey(renderer.sprite, out string spritePath)) + { + _blockShapeData.spritePath = spritePath; + } + } } + + BlockPuzzleKit.SaveBlockShapeData(_blockShapeData, _blockShapeData.shapeName); + // 保存后更新碰撞体 + UpdatePolygonCollider(); } /// @@ -204,7 +423,7 @@ namespace AibisDream // 生成多边形顶点 List vertices = GeneratePolygonVertices(pattern); - + if (vertices.Count > 0) { // 设置多边形路径 @@ -225,7 +444,7 @@ namespace AibisDream { List vertices = new List(); - if (pattern == null || width <= 0 || height <= 0 || cellSize <= 0) + if (pattern == null || _blockShapeData.width <= 0 || _blockShapeData.height <= 0 || _blockShapeData.cellSize <= 0) return vertices; // 生成精确的外轮廓(只包含边界点) @@ -244,22 +463,22 @@ namespace AibisDream HashSet visitedPoints = new HashSet(); // 遍历所有格子,找到边界点 - for (int i = 0; i <= width; i++) + for (int i = 0; i <= _blockShapeData.width; i++) { - for (int j = 0; j <= height; j++) + for (int j = 0; j <= _blockShapeData.height; j++) { // 检查这个角点是否在边界上 bool isBoundaryCorner = IsBoundaryCorner(pattern, i, j); - + if (isBoundaryCorner) { // 计算角点的本地坐标 // cornerX 和 cornerY 是角点索引(0到width/height) // 需要转换为格子的角点坐标 // 角点 (i, j) 对应格子 (i-0.5, j-0.5) 的角点位置 - float x = (i - 0.5f) * cellSize; - float y = (j - 0.5f) * cellSize; - + float x = (i - 0.5f) * _blockShapeData.cellSize; + float y = (j - 0.5f) * _blockShapeData.cellSize; + Vector2Int key = new Vector2Int(Mathf.RoundToInt(x * 100), Mathf.RoundToInt(y * 100)); if (!visitedPoints.Contains(key)) { @@ -288,12 +507,12 @@ namespace AibisDream // 角点位于四个格子的交汇处 // 检查周围四个格子的状态 bool topLeft = (cornerX > 0 && cornerY > 0) ? pattern[cornerX - 1, cornerY - 1] != 0 : false; - bool topRight = (cornerX < width && cornerY > 0) ? pattern[cornerX, cornerY - 1] != 0 : false; - bool bottomLeft = (cornerX > 0 && cornerY < height) ? pattern[cornerX - 1, cornerY] != 0 : false; - bool bottomRight = (cornerX < width && cornerY < height) ? pattern[cornerX, cornerY] != 0 : false; + bool topRight = (cornerX < _blockShapeData.width && cornerY > 0) ? pattern[cornerX, cornerY - 1] != 0 : false; + bool bottomLeft = (cornerX > 0 && cornerY < _blockShapeData.height) ? pattern[cornerX - 1, cornerY] != 0 : false; + bool bottomRight = (cornerX < _blockShapeData.width && cornerY < _blockShapeData.height) ? pattern[cornerX, cornerY] != 0 : false; // 如果四个格子状态不一致,说明这个角点在边界上 - int filledCount = (topLeft ? 1 : 0) + (topRight ? 1 : 0) + + int filledCount = (topLeft ? 1 : 0) + (topRight ? 1 : 0) + (bottomLeft ? 1 : 0) + (bottomRight ? 1 : 0); // 边界角点:不是全部填充也不是全部空 @@ -309,12 +528,12 @@ namespace AibisDream List vertices = new List(); // 找到有效格子的边界 - int minX = width, maxX = -1, minY = height, maxY = -1; + int minX = _blockShapeData.width, maxX = -1, minY = _blockShapeData.height, maxY = -1; bool hasValidCell = false; - for (int i = 0; i < width; i++) + for (int i = 0; i < _blockShapeData.width; i++) { - for (int j = 0; j < height; j++) + for (int j = 0; j < _blockShapeData.height; j++) { if (pattern[i, j] != 0) { @@ -331,11 +550,11 @@ namespace AibisDream return vertices; // 计算包围盒的四个角点(本地坐标) - float halfSize = cellSize / 2f; - float minXWorld = minX * cellSize - width * cellSize / 2f - halfSize; - float maxXWorld = (maxX + 1) * cellSize - width * cellSize / 2f + halfSize; - float minYWorld = minY * cellSize - height * cellSize / 2f - halfSize; - float maxYWorld = (maxY + 1) * cellSize - height * cellSize / 2f + halfSize; + float halfSize = _blockShapeData.cellSize / 2f; + float minXWorld = minX * _blockShapeData.cellSize - _blockShapeData.width * _blockShapeData.cellSize / 2f - halfSize; + float maxXWorld = (maxX + 1) * _blockShapeData.cellSize - _blockShapeData.width * _blockShapeData.cellSize / 2f + halfSize; + float minYWorld = minY * _blockShapeData.cellSize - _blockShapeData.height * _blockShapeData.cellSize / 2f - halfSize; + float maxYWorld = (maxY + 1) * _blockShapeData.cellSize - _blockShapeData.height * _blockShapeData.cellSize / 2f + halfSize; // 按逆时针顺序添加顶点(Unity的PolygonCollider2D要求) vertices.Add(new Vector2(minXWorld, minYWorld)); // 左下 @@ -371,11 +590,25 @@ namespace AibisDream { return angleA.CompareTo(angleB); } - + return (a - center).sqrMagnitude.CompareTo((b - center).sqrMagnitude); }); return vertices; } + + + } + + [Serializable] + public struct BlockShapeData + { + public int shapeId; + public string shapeName; + public int width; + public int height; + public float cellSize; + public string originalPatternStr; + public string spritePath; } } \ No newline at end of file diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs deleted file mode 100644 index b352882d9..000000000 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeDragger.cs +++ /dev/null @@ -1,406 +0,0 @@ -using System; -using AibisDream.Framework; -using UnityEngine; -using UnityEngine.EventSystems; - -namespace AibisDream -{ - /// - /// 形状拖拽组件 - /// 实现IBlockShapeDragger接口,处理形状的拖拽、吸附和放置逻辑 - /// - [RequireComponent(typeof(BlockShape))] - [RequireComponent(typeof(EventTriggerEx))] - public class BlockShapeDragger : MonoBehaviour, IBlockShapeDragger - { - [Header("拖拽设置")] - [SerializeField] private bool isDraggable = true; - [SerializeField] private float snapDistance = 0.5f; - [SerializeField] private BlockPuzzleGrid targetGridComponent; // Unity组件引用 - - [Header("视觉反馈")] - [SerializeField] private Color snapColor = new Color(0f, 1f, 0f, 0.7f); - [SerializeField] private Color invalidColor = new Color(1f, 0f, 0f, 0.7f); - [SerializeField] private Color normalColor = Color.white; - [SerializeField] private float dragScale = 1.1f; - - // 拖拽状态 - private DragState _currentState = DragState.Idle; - private bool _isDragging = false; - private Vector3 _dragOffset; - private Vector3 _originalPosition; - private Vector3 _originalScale; - private int _originalSortingOrder; - private bool _isSnapping = false; - private int _snapGridX; - private int _snapGridY; - - // 组件引用 - private BlockShape _blockShape; - private SpriteRenderer _spriteRenderer; - private EventTriggerEx _eventTrigger; - - // 事件 - public event Action OnDragStart; - public event Action OnDragUpdate; - public event Action OnDragEnd; - public event Action OnSnap; - public event Action OnUnsnap; - - // 接口实现 - public DragState CurrentState => _currentState; - public bool IsDraggable { get => isDraggable; set => isDraggable = value; } - public IBlockPuzzleGrid TargetGrid - { - get => targetGridComponent; - set => targetGridComponent = value as BlockPuzzleGrid; - } - public float SnapDistance { get => snapDistance; set => snapDistance = value; } - - // 内部使用的网格引用 - private IBlockPuzzleGrid targetGrid => targetGridComponent; - - private void Awake() - { - _blockShape = GetComponent(); - _spriteRenderer = GetComponent(); - _eventTrigger = GetComponent(); - - RegisterEvent(); - } - - private void RegisterEvent() - { - _eventTrigger.Register(EventTriggerType.PointerClick, OnPointerClick); - } - - private void OnPointerClick(BaseEventData eventData) - { - if (eventData is not PointerEventData { button: PointerEventData.InputButton.Left }) - { - return; - } - - PointerEventData pointerEventData = eventData as PointerEventData; - - Vector3 mouseWorldPos = GetMouseWorldPosition(pointerEventData.position); - // 如果当前物体不在拖拽中则进入拖拽逻辑 - if (!_isDragging) - { - StartDrag(mouseWorldPos); - } - // 如果当前物体在拖拽中则取消拖拽 - else - { - CancelDrag(); - } - } - - public void StartDrag(Vector3 mouseWorldPos) - { - if (!isDraggable || _isDragging) return; - - _isDragging = true; - _currentState = DragState.Dragging; - _originalPosition = transform.position; - _originalScale = transform.localScale; - - // 计算拖拽偏移量 - _dragOffset = transform.position - mouseWorldPos; - - // 提升层级和缩放 - if (_spriteRenderer != null) - { - _originalSortingOrder = _spriteRenderer.sortingOrder; - _spriteRenderer.sortingOrder = 100; - } - - transform.localScale = _originalScale * dragScale; - - OnDragStart?.Invoke(_blockShape); - } - - public void UpdateDrag() - { - if (!_isDragging) return; - - Vector3 mouseWorldPos = GetMouseWorldPosition(Input.mousePosition); - Vector3 targetPosition = mouseWorldPos + _dragOffset; - - if (targetGrid != null) - { - // 检查吸附可能 - var snapResult = targetGrid.CheckSnapToGrid(_blockShape); - if (snapResult.canSnap) - { - // 可以吸附,保存吸附内容 - } - else - { - // 没有吸附,自由拖拽 - transform.position = targetPosition; - _currentState = DragState.Dragging; - } - } - else - { - // 没有网格,自由拖拽 - transform.position = targetPosition; - _currentState = DragState.Dragging; - } - - OnDragUpdate?.Invoke(_blockShape, transform.position); - } - - public void EndDrag() - { - if (!_isDragging) return; - - bool placed = false; - - if (_isSnapping && targetGrid != null) - { - // 尝试放置到网格 - if (CanPlaceAt(_snapGridX, _snapGridY)) - { - if (TryPlaceOnGrid(_snapGridX, _snapGridY)) - { - placed = true; - _currentState = DragState.Placed; - OnShapePlaced(); - } - } - } - - if (!placed) - { - // 返回原位置 - transform.position = _originalPosition; - _currentState = DragState.Idle; - } - - // 恢复原始状态 - transform.localScale = _originalScale; - if (_spriteRenderer != null) - { - _spriteRenderer.sortingOrder = _originalSortingOrder; - } - - ShowSnapPreview(false, false); - - _isDragging = false; - _isSnapping = false; - - OnDragEnd?.Invoke(_blockShape, placed); - } - - public void CancelDrag() - { - if (!_isDragging) return; - - transform.position = _originalPosition; - transform.localScale = _originalScale; - if (_spriteRenderer != null) - { - _spriteRenderer.sortingOrder = _originalSortingOrder; - } - - ShowSnapPreview(false, false); - - _isDragging = false; - _isSnapping = false; - _currentState = DragState.Idle; - - OnDragEnd?.Invoke(_blockShape, false); - } - - public bool CanPlaceAt(int gridX, int gridY) - { - if (targetGrid == null || _blockShape == null) return false; - - Vector2Int[] blockPositions = _blockShape.GetBlockPositions(); - if (blockPositions == null || blockPositions.Length == 0) return false; - - // 形状的坐标系统: - // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左下角 - // - gridX, gridY 是形状左下角在网格中的位置 - // - 需要将形状的相对坐标转换为网格坐标 - foreach (var blockPos in blockPositions) - { - // 将形状的相对坐标转换为网格坐标(左下角为基准) - // 形状的 (0, 0) 对应网格的 (gridX, gridY) - // 形状的 (i, j) 对应网格的 (gridX + i, gridY + j) - int checkX = gridX + blockPos.x; - int checkY = gridY + blockPos.y; - - if (!targetGrid.IsValidPosition(checkX, checkY) || - !targetGrid.IsCellEmpty(checkX, checkY)) - { - return false; - } - } - - return true; - } - - public bool GetSnapGridPosition(out int gridX, out int gridY) - { - if (_isSnapping) - { - gridX = _snapGridX; - gridY = _snapGridY; - return true; - } - - gridX = 0; - gridY = 0; - return false; - } - - /// - /// 检查是否可以吸附到网格 - /// - private bool CheckSnapToGrid(Vector3 worldPos, out Vector3 snapPos, out int gridX, out int gridY) - { - snapPos = worldPos; - gridX = 0; - gridY = 0; - - if (targetGrid == null) return false; - - // 将世界坐标转换为网格坐标 - // 注意:WorldToGrid 需要世界坐标在网格范围内才能返回true - // 但我们需要检查所有附近的网格单元格,不仅仅是当前所在的单元格 - // 所以先尝试直接转换,如果失败则查找最近的网格单元格 - - int tempGridX, tempGridY; - bool inGrid = targetGrid.WorldToGrid(worldPos, out tempGridX, out tempGridY); - - if (!inGrid) - { - // 如果不在网格内,尝试查找最近的网格单元格 - // 计算最近的网格坐标 - Vector3 localPos = worldPos - targetGrid.Origin; - tempGridX = Mathf.FloorToInt(localPos.x / targetGrid.CellSize); - tempGridY = Mathf.FloorToInt(localPos.y / targetGrid.CellSize); - - // 检查是否在有效范围内 - if (!targetGrid.IsValidPosition(tempGridX, tempGridY)) - { - return false; - } - } - - // 获取网格单元格中心的世界坐标 - Vector3 gridCenter = targetGrid.GridToWorld(tempGridX, tempGridY); - - // 计算距离 - float distance = Vector3.Distance(worldPos, gridCenter); - - if (distance <= snapDistance) - { - // 计算形状应该放置的网格位置 - // 形状左下角对齐到网格单元格左下角 - gridX = tempGridX; - gridY = tempGridY; - - // 计算形状左下角的世界坐标 - // 网格单元格左下角的世界坐标 = Origin + (gridX * CellSize, gridY * CellSize) - Vector3 gridBottomLeft = targetGrid.Origin + new Vector3( - gridX * targetGrid.CellSize, - gridY * targetGrid.CellSize, - 0 - ); - - // 计算形状中心相对于形状左下角的偏移 - // 形状的 pattern 中,(0, 0) 是左下角 - // 在形状的本地坐标系中(假设形状中心在 (0, 0)),形状左下角的位置是: - // localX = -width * cellSize / 2 - // localY = -height * cellSize / 2 - // 形状中心相对于形状左下角的偏移 = (0, 0) - (localX, localY) = (width * cellSize / 2, height * cellSize / 2) - - // 形状左下角对齐到网格单元格左下角 - // 形状中心的世界坐标 = 网格单元格左下角的世界坐标 + 形状中心相对于形状左下角的偏移 - // 使用网格的 CellSize,因为形状的 cellSize 应该与网格的 CellSize 相同 - float shapeCenterOffsetX = _blockShape.Width * targetGrid.CellSize / 2f; - float shapeCenterOffsetY = _blockShape.Height * targetGrid.CellSize / 2f; - snapPos = gridBottomLeft + new Vector3(shapeCenterOffsetX, shapeCenterOffsetY, 0); - - return true; - } - - return false; - } - - /// - /// 尝试放置到网格 - /// - /// 网格X坐标(形状左下角位置) - /// 网格Y坐标(形状左下角位置) - private bool TryPlaceOnGrid(int gridX, int gridY) - { - if (!CanPlaceAt(gridX, gridY)) return false; - - Vector2Int[] blockPositions = _blockShape.GetBlockPositions(); - if (blockPositions == null) return false; - - // 形状的坐标系统: - // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左下角 - // - gridX, gridY 是形状左下角在网格中的位置 - // - 需要将形状的相对坐标转换为网格坐标 - foreach (var blockPos in blockPositions) - { - // 将形状的相对坐标转换为网格坐标(左下角为基准) - // 形状的 (0, 0) 对应网格的 (gridX, gridY) - // 形状的 (i, j) 对应网格的 (gridX + i, gridY + j) - int x = gridX + blockPos.x; - int y = gridY + blockPos.y; - targetGrid.SetCellState(x, y, GridCellState.Occupied); - } - - return true; - } - - /// - /// 显示吸附预览效果 - /// - private void ShowSnapPreview(bool show, bool isValid) - { - Color previewColor = show ? (isValid ? snapColor : invalidColor) : normalColor; - - // 更新主SpriteRenderer - if (_spriteRenderer != null) - { - _spriteRenderer.color = previewColor; - } - } - - /// - /// 形状放置完成 - /// - private void OnShapePlaced() - { - // 可以在这里添加放置后的逻辑 - // 例如:禁用拖拽、播放动画等 - isDraggable = false; - } - - /// - /// 获取鼠标世界坐标 - /// - private Vector3 GetMouseWorldPosition(Vector3 mousePos) - { - var pos = Camera.main.ScreenToWorldPoint(mousePos); - return new Vector3(pos.x, pos.y, 0); - } - - private void OnDisable() - { - if (_isDragging) - { - CancelDrag(); - } - } - } -} - diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeRack.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeRack.cs new file mode 100644 index 000000000..41b396f1e --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeRack.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using AibisDream.Framework; +using AibisDream.Utility; +using UnityEngine; +using UnityEngine.UI; + +namespace AibisDream +{ + public class BlockShapeRack : MonoBehaviour, IBlockShapeFactory + { + [SerializeField] private Transform shapeRoot; + [SerializeField] private ScrollRect scrollRect; + [SerializeField] private RackDataInfo[] blockShapeDataList; + private Dictionary buttonDict; + private GameObject _shapeCreateButtonPrefab; + + private void Awake() + { + InitPrefab(); + InitShapeButtons(); + } + + private void InitPrefab() + { + _shapeCreateButtonPrefab = ResourceKit.LoadAssetSync(ConstRef.ShapeCreateButtonPrefab); + _blockShapePrefab = ResourceKit.LoadAssetSync(ConstRef.BlockShapePrefab); + } + + private void InitShapeButtons() + { + buttonDict = new Dictionary(); + foreach (var blockShapeData in blockShapeDataList) + { + var button = Instantiate(_shapeCreateButtonPrefab, scrollRect.content).GetComponent(); + button.SetButtonInfo(blockShapeData.key, blockShapeData.count); + button.OnClick += CreateShapeByButton; + buttonDict.Add(blockShapeData.key, button); + } + } + + private void CreateShapeByButton(string key) + { + // 获取配置信息 + if (!BlockPuzzleKit.TryLoadBlockShapeData(key, out var blockShapeData)) + { + Debug.LogError($"获取配置信息失败: {key}"); + return; + } + + // 创建形状并开始拖拽 + var blockShape = CreateBlockShape(blockShapeData); + blockShape.ShapeDragger.StartDrag(); + } + + public void RecycleBlockShape(BlockShape blockShape) + { + // 将数据加回对象池 + if (buttonDict.TryGetValue(blockShape.ShapeName, out var oldButton)) + { + oldButton.AddCount(); + } + else + { + // 创建新的按钮 + var button = Instantiate(_shapeCreateButtonPrefab, scrollRect.content).GetComponent(); + button.SetButtonInfo(blockShape.ShapeName, 1); + button.OnClick += CreateShapeByButton; + buttonDict.Add(blockShape.ShapeName, button); + } + // 销毁物体 + Destroy(blockShape.gameObject); + } + + + // ------------------------------ 图形工厂类实现 ------------------------------ + + private GameObject _blockShapePrefab; + + public BlockShape CreateBlockShape(BlockShapeData blockShapeData) + { + var blockShape = Instantiate(_blockShapePrefab, shapeRoot).GetComponent(); + blockShape.Init(blockShapeData); + return blockShape; + } + + [Serializable] + public struct RackDataInfo + { + public string key; + public int count; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeRack.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeRack.cs.meta new file mode 100644 index 000000000..6fe354b0f --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/BlockShapeRack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b41fe99d78fb92428bd63b641c3944c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs index 9e5fdc984..01ef8daab 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/PlacementValidator.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using UnityEngine; namespace AibisDream @@ -9,283 +8,120 @@ namespace AibisDream /// public static class PlacementValidator { - /// - /// 检查形状是否可以放置在指定位置 - /// - /// 网格系统 - /// 要放置的形状 - /// 网格X坐标(形状左下角位置) - /// 网格Y坐标(形状左下角位置) - /// 放置验证结果 - public static PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY) - { - if (grid == null || shape == null) - { - return PlacementResult.InvalidPosition; - } - - // 获取形状的所有格子位置(相对坐标,基于形状的本地坐标系) - Vector2Int[] blockPositions = shape.GetBlockPositions(); - if (blockPositions == null || blockPositions.Length == 0) - { - return PlacementResult.InvalidPosition; - } - - // 形状的坐标系统: - // - GetBlockPositions() 返回的坐标中,(0, 0) 是形状的左下角 - // - pattern[i, j] 中,i 是 x(从左到右),j 是 y(从下到上,j=0 是底部) - // - gridX, gridY 是形状左下角在网格中的位置 - // - 需要将形状的相对坐标转换为网格坐标 - foreach (var blockPos in blockPositions) - { - // 将形状的相对坐标转换为网格坐标 - // 形状的 (0, 0) 对应网格的 (gridX, gridY) - // 形状的 (i, j) 对应网格的 (gridX + i, gridY + j) - int gridCellX = gridX + blockPos.x; - int gridCellY = gridY + blockPos.y; - - // 检查是否超出边界 - if (!grid.IsValidPosition(gridCellX, gridCellY)) - { - return PlacementResult.OutOfBounds; - } - - // 检查是否与已有块重叠 - if (!grid.IsCellEmpty(gridCellX, gridCellY)) - { - return PlacementResult.Overlap; - } - } - - return PlacementResult.Success; - } - - /// - /// 检查形状是否可以放置在指定位置(详细版本) - /// - /// 网格系统 - /// 要放置的形状 - /// 网格X坐标(形状左下角位置) - /// 网格Y坐标(形状左下角位置) - /// 失败原因(如果返回false) - /// 是否可以放置 - public static bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason) - { - failureReason = CanPlace(grid, shape, gridX, gridY); - return failureReason == PlacementResult.Success; - } - - /// - /// 获取形状在指定位置的所有占用格子坐标 - /// - /// 形状 - /// 网格X坐标(形状左下角位置) - /// 网格Y坐标(形状左下角位置) - /// 占用格子的网格坐标数组 - public static (int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY) - { - if (shape == null) - { - return new (int x, int y)[0]; - } - - Vector2Int[] blockPositions = shape.GetBlockPositions(); - if (blockPositions == null || blockPositions.Length == 0) - { - return new (int x, int y)[0]; - } - - List<(int x, int y)> occupiedCells = new List<(int x, int y)>(); - - foreach (var blockPos in blockPositions) - { - // 将形状的相对坐标转换为网格坐标(左下角为基准) - // 形状的 (0, 0) 对应网格的 (gridX, gridY) - // 形状的 (i, j) 对应网格的 (gridX + i, gridY + j) - int gridCellX = gridX + blockPos.x; - int gridCellY = gridY + blockPos.y; - occupiedCells.Add((gridCellX, gridCellY)); - } - - return occupiedCells.ToArray(); - } - - - /// - /// 将形状的单个相对坐标转换为网格坐标 - /// - /// 形状内的X坐标(相对坐标,相对于形状左下角) - /// 形状内的Y坐标(相对坐标,相对于形状左下角) - /// 网格X坐标(形状左下角位置) - /// 网格Y坐标(形状左下角位置) - /// 对应的网格坐标 - public static Vector2Int ConvertShapeLocalToGrid(int shapeLocalX, int shapeLocalY, int gridX, int gridY) - { - return new Vector2Int(gridX + shapeLocalX, gridY + shapeLocalY); - } - - /// - /// 检查世界坐标是否可以吸附到网格 - /// - /// 网格系统 - /// 世界坐标位置 - /// 吸附距离阈值 - /// 吸附检测结果 - public static SnapResult CheckSnapToGrid(IBlockPuzzleGrid grid, Vector3 worldPos, float snapDistance) + public static SnapResult CheckSnapToGrid(this IBlockPuzzleGrid grid, BlockShape shape) { + // 预制错误结果作为返回值 SnapResult result = new SnapResult { canSnap = false, - snapPosition = worldPos, + snapPosition = shape.transform.position, gridX = 0, gridY = 0, - distance = float.MaxValue + distance = float.MaxValue, + gridPositions = new Vector2Int[0] }; - if (grid == null) - { - return result; - } + // 将Shape的世界坐标转换为网格坐标(可以是虚拟坐标) + bool inGrid = grid.WorldToGrid(shape.transform.position, out int gridX, out int gridY); + if (!inGrid) return result; - // 将世界坐标转换为网格坐标 - // 注意:WorldToGrid 需要世界坐标在网格范围内才能返回true - // 但我们需要检查所有附近的网格单元格,不仅仅是当前所在的单元格 - // 所以先尝试直接转换,如果失败则查找最近的网格单元格 + // 将形状的所有格子转换为网格坐标 + // gridX, gridY 是形状的 (0, 0) 点在网格中的位置 + Vector2Int[] gridCells = ConvertShapeToGridCells(shape, gridX, gridY); + result.gridX = gridX; + result.gridY = gridY; + result.snapPosition = grid.GridToWorld(gridX, gridY); + result.gridPositions = gridCells; - int tempGridX, tempGridY; - bool inGrid = grid.WorldToGrid(worldPos, out tempGridX, out tempGridY); - - if (!inGrid) - { - // 如果不在网格内,尝试查找最近的网格单元格 - // 计算最近的网格坐标 - Vector3 localPos = worldPos - grid.Origin; - tempGridX = Mathf.FloorToInt(localPos.x / grid.CellSize); - tempGridY = Mathf.FloorToInt(localPos.y / grid.CellSize); - - // 检查是否在有效范围内 - if (!grid.IsValidPosition(tempGridX, tempGridY)) - { - return result; - } - } - - // 获取网格单元格中心的世界坐标 - Vector3 gridCenter = grid.GridToWorld(tempGridX, tempGridY); - - // 计算距离 - float distance = Vector3.Distance(worldPos, gridCenter); - - if (distance <= snapDistance) - { - // 计算形状应该放置的网格位置 - // 形状左下角对齐到网格单元格左下角 - result.gridX = tempGridX; - result.gridY = tempGridY; - - // 计算形状左下角的世界坐标 - // 网格单元格左下角的世界坐标 = Origin + (gridX * CellSize, gridY * CellSize) - Vector3 gridBottomLeft = grid.Origin + new Vector3( - tempGridX * grid.CellSize, - tempGridY * grid.CellSize, - 0 - ); - - result.snapPosition = gridBottomLeft; - result.distance = distance; - result.canSnap = true; - } + // 逐个坐标验证是否可以放置 + var canPlace = grid.CanPlace(gridCells); + if (!canPlace) return result; + result.canSnap = true; + result.distance = Vector3.Distance(shape.transform.position, result.snapPosition); return result; } /// - /// 检查世界坐标是否可以吸附到网格(简化版本,只返回是否可以吸附和网格坐标) + /// 将形状的相对坐标转换为网格坐标 + /// 已知形状的 (0, 0) 点在网格中的位置为 (gridX, gridY),将形状的其他格子坐标转换为网格坐标 /// - /// 网格系统 - /// 世界坐标位置 - /// 吸附距离阈值 - /// 吸附到的网格X坐标(形状左下角位置) - /// 吸附到的网格Y坐标(形状左下角位置) - /// 是否可以吸附 - public static bool CheckSnapToGrid(IBlockPuzzleGrid grid, Vector3 worldPos, float snapDistance, out int gridX, out int gridY) + /// 形状 + /// 网格X坐标(形状左下角位置,即形状的 (0, 0) 点对应的网格坐标) + /// 网格Y坐标(形状左下角位置,即形状的 (0, 0) 点对应的网格坐标) + /// 形状所有格子在网格中的坐标数组 + public static Vector2Int[] ConvertShapeToGridCells(IBlockShape shape, int gridX, int gridY) { - gridX = 0; - gridY = 0; - - SnapResult result = CheckSnapToGrid(grid, worldPos, snapDistance); - if (result.canSnap) + if (shape == null) { - gridX = result.gridX; - gridY = result.gridY; - return true; + return new Vector2Int[0]; } - return false; + Vector2Int[] blockPositions = shape.GetBlockPositions(); + if (blockPositions == null || blockPositions.Length == 0) + { + return new Vector2Int[0]; + } + + Vector2Int[] gridCells = new Vector2Int[blockPositions.Length]; + Vector2Int axis = shape.GetAxis(); + + for (int i = 0; i < blockPositions.Length; i++) + { + // 将形状的相对坐标转换为网格坐标 + // 形状的 (0, 0) 对应网格的 (gridX, gridY) + // 形状的 (blockPos.x, blockPos.y) 对应网格的 (gridX + blockPos.x, gridY + blockPos.y) + gridCells[i] = new Vector2Int( + gridX + blockPositions[i].x * axis.x, + gridY + blockPositions[i].y * axis.y + ); + } + + return gridCells; } /// - /// 检查世界坐标是否可以吸附到网格(完整版本,返回吸附位置和网格坐标) + /// 为吸附制作预览 /// - /// 网格系统 - /// 世界坐标位置 - /// 吸附距离阈值 - /// 吸附后的世界坐标位置 - /// 吸附到的网格X坐标(形状左下角位置) - /// 吸附到的网格Y坐标(形状左下角位置) - /// 是否可以吸附 - public static bool CheckSnapToGrid(IBlockPuzzleGrid grid, Vector3 worldPos, float snapDistance, out Vector3 snapPos, out int gridX, out int gridY) + /// 转换后的网格坐标组 + public static void ShowSnapPreview(this IBlockPuzzleGrid grid, Vector2Int[] shapeCells) { - snapPos = worldPos; - gridX = 0; - gridY = 0; - SnapResult result = CheckSnapToGrid(grid, worldPos, snapDistance); - if (result.canSnap) + } + + public static void TrySnapToGrid(this IBlockPuzzleGrid grid, BlockShape shape, Vector2Int rootCell) + { + // 判断RootCell的位置 + var rootWorldPos = grid.GridToWorld(rootCell.x, rootCell.y); + // 已经判断是否可吸附,直接吸就好了 + shape.transform.position = rootWorldPos; + // 设置网格状态 + var shapeCells = ConvertShapeToGridCells(shape, rootCell.x, rootCell.y); + foreach (var cell in shapeCells) { - snapPos = result.snapPosition; - gridX = result.gridX; - gridY = result.gridY; - return true; + grid.SetCellState(cell.x, cell.y, GridCellState.Occupied); } - - return false; + // 加入网格 + grid.ShapeDict.Add(shape, rootCell); } /// - /// 查找最近的网格单元格(即使不在吸附距离内) + /// 尝试从网格中移除形状 /// - /// 网格系统 - /// 世界坐标位置 - /// 最近的网格X坐标 - /// 最近的网格Y坐标 - /// 是否找到有效的网格单元格 - public static bool FindNearestGridCell(IBlockPuzzleGrid grid, Vector3 worldPos, out int gridX, out int gridY) + /// 网格 + /// 形状 + public static void TryRemoveShapeFromGrid(this IBlockPuzzleGrid grid, BlockShape shape) { - gridX = 0; - gridY = 0; - - if (grid == null) + if (grid.ShapeDict.TryGetValue(shape, out var rootCell)) { - return false; + // 设置网格状态 + var shapeCells = ConvertShapeToGridCells(shape, rootCell.x, rootCell.y); + foreach (var cell in shapeCells) + { + grid.SetCellState(cell.x, cell.y, GridCellState.Empty); + } + grid.ShapeDict.Remove(shape); } - - // 先尝试直接转换 - if (grid.WorldToGrid(worldPos, out gridX, out gridY)) - { - return true; - } - - // 如果不在网格内,计算最近的网格坐标 - Vector3 localPos = worldPos - grid.Origin; - gridX = Mathf.FloorToInt(localPos.x / grid.CellSize); - gridY = Mathf.FloorToInt(localPos.y / grid.CellSize); - - // 限制在有效范围内 - gridX = Mathf.Clamp(gridX, 0, grid.Width - 1); - gridY = Mathf.Clamp(gridY, 0, grid.Height - 1); - - return grid.IsValidPosition(gridX, gridY); } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeCreateButton.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeCreateButton.cs new file mode 100644 index 000000000..dee37cca4 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Class/ShapeCreateButton.cs @@ -0,0 +1,53 @@ +using System; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +namespace AibisDream +{ + [RequireComponent(typeof(Button))] + public class ShapeCreateButton : MonoBehaviour + { + [SerializeField] private Button button; + [SerializeField] private TMP_Text text; + + private string blockShapeKey; + private int count; + + public event Action OnClick; + + private void Awake() + { + GetComponent /// 网格四个顶点位置 Vector3[] GridVerticesToWorld(int x, int y); + + /// + /// 形状字典, 保存置入网格的形状及其根网格坐标 + /// + /// 形状字典 + Dictionary ShapeDict { get; } + + /// + /// 获取当前所有的Shapes + /// + /// 所有的Shapes + List GetShapes(); } } - diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs index 19cc7635d..1be309c34 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShape.cs @@ -49,6 +49,11 @@ namespace AibisDream /// int BlockCount { get; } + /// + /// 获取形状拖拽器 + /// + ShapeDragger ShapeDragger { get; } + /// /// 获取原始形状模式(未旋转) /// @@ -97,10 +102,16 @@ namespace AibisDream Vector2Int[] GetBlockPositions(); /// - /// 创建形状的副本 + /// 获取形状旋转后的轴向 /// - /// 形状副本 - // IBlockShape Clone(); + /// 旋转后的轴向 + Vector2Int GetAxis(); + + /// + /// 获取形状的中心位置 + /// + /// 中心位置 + Vector3 GetCenterPosition(); } } diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs index 9f031abbc..932921d94 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeDragger.cs @@ -33,12 +33,12 @@ namespace AibisDream /// /// 目标网格 /// - IBlockPuzzleGrid TargetGrid { get; set; } + IBlockPuzzleGrid TargetGrid { get; } /// - /// 吸附距离阈值 + /// 获取形状 /// - float SnapDistance { get; set; } + IBlockShape BlockShape { get; } /// /// 拖拽开始事件 @@ -68,7 +68,7 @@ namespace AibisDream /// /// 开始拖拽 /// - void StartDrag(Vector3 mouseWorldPos); + void StartDrag(); /// /// 更新拖拽位置 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs index 18d52bcb5..b4a94ae4e 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs @@ -1,57 +1,7 @@ namespace AibisDream { - /// - /// 形状工厂接口 - /// 负责创建和管理形状对象 - /// - public interface IBlockShapeFactory + public interface IBlockShapeFactory { - /// - /// 创建指定ID的形状 - /// - /// 形状ID - /// 形状对象,如果ID不存在则返回null - IBlockShape CreateShape(int shapeId); - - /// - /// 创建指定名称的形状 - /// - /// 形状名称 - /// 形状对象,如果名称不存在则返回null - IBlockShape CreateShape(string shapeName); - - /// - /// 创建随机形状 - /// - /// 随机形状对象 - IBlockShape CreateRandomShape(); - - /// - /// 获取所有可用的形状ID列表 - /// - /// 形状ID数组 - int[] GetAllShapeIds(); - - /// - /// 获取所有可用的形状名称列表 - /// - /// 形状名称数组 - string[] GetAllShapeNames(); - - /// - /// 注册新形状 - /// - /// 形状ID - /// 形状名称 - /// 形状模式(二维数组) - void RegisterShape(int shapeId, string shapeName, int[,] pattern); - - /// - /// 检查形状ID是否存在 - /// - /// 形状ID - /// 是否存在 - bool HasShape(int shapeId); + BlockShape CreateBlockShape(BlockShapeData blockShapeData); } } - diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs.meta index 611459543..b6b028a05 100644 --- a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs.meta +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeFactory.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 735c986ae1357ab489f5a5951ffb4bde +guid: 985c3e2cce06f3d4da0f894b88278d27 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeRack.cs b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeRack.cs new file mode 100644 index 000000000..5cb5ecd15 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeRack.cs @@ -0,0 +1,22 @@ +namespace AibisDream +{ + public interface IBlockShapeRack + { + /// + /// 加载基础配置 + /// + void Initialize(); + + /// + /// 将物体移入货架时调用 + /// + /// + void AddShape(IBlockShape shape); + + /// + /// 将物体移出货架时调用 + /// + /// + void RemoveShape(IBlockShape shape); + } +} diff --git a/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeRack.cs.meta b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeRack.cs.meta new file mode 100644 index 000000000..890fd0007 --- /dev/null +++ b/Assets/Scripts/MiniGame/BlockPuzzle/Interface/IBlockShapeRack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 329bb62a39aae8644a7dc195ec4946ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Utility/ConstRef.cs b/Assets/Scripts/Utility/ConstRef.cs index a6f301b74..b5b5486ef 100644 --- a/Assets/Scripts/Utility/ConstRef.cs +++ b/Assets/Scripts/Utility/ConstRef.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; namespace AibisDream.Utility { @@ -27,6 +27,8 @@ namespace AibisDream.Utility public static readonly string ChapterProgressPath = $"{Application.streamingAssetsPath}/Config/chapter.json"; + public static readonly string BlockShapeDataPath = $"{Application.streamingAssetsPath}/LevelData/BlockPuzzle/BlockShapeData.json"; + #region 本地化索引 public const string UITextTable = "UIText"; @@ -59,6 +61,10 @@ namespace AibisDream.Utility public const string RecordPrefab = "RecordItem"; + public const string BlockShapePrefab = "BlockShape"; + + public const string ShapeCreateButtonPrefab = "ShapeCreateButton"; + #endregion #region 动画配置 diff --git a/Assets/StreamingAssets/LevelData/BlockPuzzle.meta b/Assets/StreamingAssets/LevelData/BlockPuzzle.meta new file mode 100644 index 000000000..87b6f8e10 --- /dev/null +++ b/Assets/StreamingAssets/LevelData/BlockPuzzle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a72b02bd330ee394aa35eb2f96dbc02b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/LevelData/BlockPuzzle/BlockShapeData.json b/Assets/StreamingAssets/LevelData/BlockPuzzle/BlockShapeData.json new file mode 100644 index 000000000..74c0fb482 --- /dev/null +++ b/Assets/StreamingAssets/LevelData/BlockPuzzle/BlockShapeData.json @@ -0,0 +1 @@ +{"基础测试2":{"shapeId":2,"shapeName":"基础测试2","width":2,"height":3,"cellSize":1.0,"originalPatternStr":"0,1,1;1,1,0","spritePath":"BlockShape/条状"},"基础测试1":{"shapeId":0,"shapeName":"基础测试1","width":2,"height":3,"cellSize":1.0,"originalPatternStr":"0,1,1;1,1,0","spritePath":"BlockShape/条状"},"基础测试3":{"shapeId":3,"shapeName":"基础测试3","width":2,"height":3,"cellSize":1.0,"originalPatternStr":"0,1,1;1,1,0","spritePath":"BlockShape/条状"}} \ No newline at end of file diff --git a/Assets/StreamingAssets/LevelData/BlockPuzzle/BlockShapeData.json.meta b/Assets/StreamingAssets/LevelData/BlockPuzzle/BlockShapeData.json.meta new file mode 100644 index 000000000..311e07ff6 --- /dev/null +++ b/Assets/StreamingAssets/LevelData/BlockPuzzle/BlockShapeData.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5908e6bd6bc797b44bab7e5dd5ab22a5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset index 02392b898..6b4f779bd 100644 --- a/ProjectSettings/Physics2DSettings.asset +++ b/ProjectSettings/Physics2DSettings.asset @@ -45,4 +45,4 @@ Physics2DSettings: m_ReuseCollisionCallbacks: 1 m_AutoSyncTransforms: 0 m_GizmoOptions: 10 - m_LayerCollisionMatrix: fffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_LayerCollisionMatrix: fffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 975690646..b2ead109b 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -30,7 +30,7 @@ TagManager: - Image - MemoryScreen - CG - - + - BlockPuzzle - - - From 627f88131e03baba774303f1e4da33683c1790fa Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Tue, 9 Dec 2025 16:13:32 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E9=85=92=E5=90=A7=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E5=A1=AB=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssetGroups/Actor Resources.asset | 10 + Assets/Plugins/SOEditorTool.meta | 8 + Assets/Plugins/SOEditorTool/Attributes.meta | 3 + .../Attributes/CNNameAttribute.cs | 11 + .../Attributes/CNNameAttribute.cs.meta | 3 + Assets/Plugins/SOEditorTool/Editor.meta | 3 + .../SOEditorTool/Editor/CNNameDrawer.cs | 39 + .../SOEditorTool/Editor/CNNameDrawer.cs.meta | 3 + .../Editor/SOEditorConfigEditor.cs | 164 ++ .../Editor/SOEditorConfigEditor.cs.meta | 3 + .../SOEditorTool/Editor/UniversalSOEditor.cs | 422 +++ .../Editor/UniversalSOEditor.cs.meta | 3 + Assets/Plugins/SOEditorTool/Example.meta | 3 + .../SOEditorTool/Example/ExampleConfig.asset | 16 + .../Example/ExampleConfig.asset.meta | 8 + .../SOEditorTool/Example/WeaponConfig.cs | 7 + .../SOEditorTool/Example/WeaponConfig.cs.meta | 3 + Assets/Plugins/SOEditorTool/SOEditorConfig.cs | 9 + .../SOEditorTool/SOEditorConfig.cs.meta | 3 + Assets/RawResources/Art/酒吧素材.meta | 8 + .../RawResources/Art/酒吧素材/固定小动画.meta | 8 + .../Art/酒吧素材/固定小动画/前景人物.aseprite | Bin 0 -> 44142 bytes .../固定小动画/前景人物.aseprite.meta | 308 +++ .../Art/酒吧素材/固定小动画/广告牌.aseprite | Bin 0 -> 10487 bytes .../酒吧素材/固定小动画/广告牌.aseprite.meta | 308 +++ .../Art/酒吧素材/固定小动画/窗前.aseprite | Bin 0 -> 45376 bytes .../酒吧素材/固定小动画/窗前.aseprite.meta | 308 +++ .../Art/酒吧素材/固定小动画/酒保.aseprite | Bin 0 -> 8351 bytes .../酒吧素材/固定小动画/酒保.aseprite.meta | 308 +++ .../Art/酒吧素材/固定小动画/顾客NPC.aseprite | Bin 0 -> 19965 bytes .../酒吧素材/固定小动画/顾客NPC.aseprite.meta | 308 +++ .../RawResources/Art/酒吧素材/酒吧内场景.psd | 3 + .../Art/酒吧素材/酒吧内场景.psd.meta | 702 +++++ .../Art/酒吧素材/酒吧内角色动画.meta | 8 + .../Art/酒吧素材/酒吧内角色动画/医生Idle.anim | 70 + .../酒吧内角色动画/医生Idle.anim.meta | 8 + .../Art/酒吧素材/酒吧内角色动画/火山Idle.anim | 70 + .../酒吧内角色动画/火山Idle.anim.meta | 8 + .../Art/酒吧素材/酒吧内角色动画/调酒妹.meta | 8 + .../酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim | 78 + .../酒吧内角色动画/调酒妹/IDLE.anim.meta | 8 + .../酒吧内角色动画/调酒妹/调酒妹侧头.aseprite | Bin 0 -> 25934 bytes .../调酒妹/调酒妹侧头.aseprite.meta | 868 +++++++ .../调酒妹/调酒妹俯身动作.aseprite | Bin 0 -> 44599 bytes .../调酒妹/调酒妹俯身动作.aseprite.meta | 1988 +++++++++++++++ .../调酒妹/调酒妹呼吸动画.aseprite | Bin 0 -> 105618 bytes .../调酒妹/调酒妹呼吸动画.aseprite.meta | 2257 +++++++++++++++++ .../酒吧内角色动画/调酒妹/调酒妹握手.aseprite | Bin 0 -> 16545 bytes .../调酒妹/调酒妹握手.aseprite.meta | 532 ++++ .../酒吧内角色动画/调酒妹/调酒妹摇酒.aseprite | Bin 0 -> 53354 bytes .../调酒妹/调酒妹摇酒.aseprite.meta | 1372 ++++++++++ .../调酒妹/调酒妹放酒动作.aseprite | Bin 0 -> 16212 bytes .../调酒妹/调酒妹放酒动作.aseprite.meta | 532 ++++ .../调酒妹/酒吧调酒妹.controller | 72 + .../调酒妹/酒吧调酒妹.controller.meta | 8 + .../酒吧素材/酒吧内角色动画/酒吧医生.aseprite | Bin 0 -> 19380 bytes .../酒吧内角色动画/酒吧医生.aseprite.meta | 318 +++ .../酒吧内角色动画/酒吧医生.controller | 72 + .../酒吧内角色动画/酒吧医生.controller.meta | 8 + .../酒吧素材/酒吧内角色动画/酒吧火山.aseprite | Bin 0 -> 10993 bytes .../酒吧内角色动画/酒吧火山.aseprite.meta | 318 +++ .../酒吧内角色动画/酒吧火山.controller | 72 + .../酒吧内角色动画/酒吧火山.controller.meta | 8 + Assets/Render/Renderer2Dtest.asset | 22 +- Assets/Scenes/网格测试.unity | 2 +- Assets/Scenes/酒吧场景.unity | 2200 ++++++++++++++++ Assets/Scenes/酒吧场景.unity.meta | 7 + .../BlockPuzzle/Class/ValidateResultLog.cs | 7 +- .../MiniGame/HuoShan/Emo/Untitled-2.txt.meta | 2 +- .../AUTO_CONFIG_FEATURE.md.meta | 2 +- Assets/UI/Prefabs/文字预制体.prefab.meta | 2 +- 71 files changed, 13890 insertions(+), 19 deletions(-) create mode 100644 Assets/Plugins/SOEditorTool.meta create mode 100644 Assets/Plugins/SOEditorTool/Attributes.meta create mode 100644 Assets/Plugins/SOEditorTool/Attributes/CNNameAttribute.cs create mode 100644 Assets/Plugins/SOEditorTool/Attributes/CNNameAttribute.cs.meta create mode 100644 Assets/Plugins/SOEditorTool/Editor.meta create mode 100644 Assets/Plugins/SOEditorTool/Editor/CNNameDrawer.cs create mode 100644 Assets/Plugins/SOEditorTool/Editor/CNNameDrawer.cs.meta create mode 100644 Assets/Plugins/SOEditorTool/Editor/SOEditorConfigEditor.cs create mode 100644 Assets/Plugins/SOEditorTool/Editor/SOEditorConfigEditor.cs.meta create mode 100644 Assets/Plugins/SOEditorTool/Editor/UniversalSOEditor.cs create mode 100644 Assets/Plugins/SOEditorTool/Editor/UniversalSOEditor.cs.meta create mode 100644 Assets/Plugins/SOEditorTool/Example.meta create mode 100644 Assets/Plugins/SOEditorTool/Example/ExampleConfig.asset create mode 100644 Assets/Plugins/SOEditorTool/Example/ExampleConfig.asset.meta create mode 100644 Assets/Plugins/SOEditorTool/Example/WeaponConfig.cs create mode 100644 Assets/Plugins/SOEditorTool/Example/WeaponConfig.cs.meta create mode 100644 Assets/Plugins/SOEditorTool/SOEditorConfig.cs create mode 100644 Assets/Plugins/SOEditorTool/SOEditorConfig.cs.meta create mode 100644 Assets/RawResources/Art/酒吧素材.meta create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画.meta create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/前景人物.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/前景人物.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/广告牌.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/广告牌.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/窗前.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/窗前.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/酒保.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/酒保.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/顾客NPC.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/固定小动画/顾客NPC.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内场景.psd create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内场景.psd.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/医生Idle.anim create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/医生Idle.anim.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/火山Idle.anim create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/火山Idle.anim.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹侧头.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹侧头.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹俯身动作.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹俯身动作.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹呼吸动画.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹呼吸动画.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹握手.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹握手.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹摇酒.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹摇酒.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹放酒动作.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹放酒动作.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/酒吧调酒妹.controller create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/酒吧调酒妹.controller.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.controller create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.controller.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧火山.aseprite create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧火山.aseprite.meta create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧火山.controller create mode 100644 Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧火山.controller.meta create mode 100644 Assets/Scenes/酒吧场景.unity create mode 100644 Assets/Scenes/酒吧场景.unity.meta diff --git a/Assets/AddressableAssetsData/AssetGroups/Actor Resources.asset b/Assets/AddressableAssetsData/AssetGroups/Actor Resources.asset index 7b644016b..990b906bc 100644 --- a/Assets/AddressableAssetsData/AssetGroups/Actor Resources.asset +++ b/Assets/AddressableAssetsData/AssetGroups/Actor Resources.asset @@ -82,6 +82,16 @@ MonoBehaviour: m_ReadOnly: 0 m_SerializedLabels: [] FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: dc2e1a393256c414d88652162e05b699 + m_Address: "Animation/\u9152\u5427\u533B\u751F" + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: af92c8803a884704093ca4bd3cdb30b8 + m_Address: "Animation/\u9152\u5427\u706B\u5C71" + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 m_ReadOnly: 0 m_Settings: {fileID: 11400000, guid: 77169ce22e430f64fb36c771815a4a7b, type: 2} m_SchemaSet: diff --git a/Assets/Plugins/SOEditorTool.meta b/Assets/Plugins/SOEditorTool.meta new file mode 100644 index 000000000..c54f0f741 --- /dev/null +++ b/Assets/Plugins/SOEditorTool.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 203b6470a52cede43824c2b766b89464 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SOEditorTool/Attributes.meta b/Assets/Plugins/SOEditorTool/Attributes.meta new file mode 100644 index 000000000..b15bb3079 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Attributes.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1b33e012f04c4b66890fad3401d1abd1 +timeCreated: 1765258694 \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Attributes/CNNameAttribute.cs b/Assets/Plugins/SOEditorTool/Attributes/CNNameAttribute.cs new file mode 100644 index 000000000..76a5c2185 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Attributes/CNNameAttribute.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +public class CNNameAttribute : PropertyAttribute +{ + public string Name; + + public CNNameAttribute(string name) + { + this.Name = name; + } +} \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Attributes/CNNameAttribute.cs.meta b/Assets/Plugins/SOEditorTool/Attributes/CNNameAttribute.cs.meta new file mode 100644 index 000000000..0e8b3cd27 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Attributes/CNNameAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 251a6a4e8eda4e9bbfa088b9a34b0e7b +timeCreated: 1765258702 \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Editor.meta b/Assets/Plugins/SOEditorTool/Editor.meta new file mode 100644 index 000000000..1f8d685dd --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Editor.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 108f43113da2467789e5bef2327add79 +timeCreated: 1765215242 \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Editor/CNNameDrawer.cs b/Assets/Plugins/SOEditorTool/Editor/CNNameDrawer.cs new file mode 100644 index 000000000..4e2e70387 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Editor/CNNameDrawer.cs @@ -0,0 +1,39 @@ +using UnityEngine; +using UnityEditor; + + +[CustomPropertyDrawer(typeof(CNNameAttribute))] +public class CNNameDrawer : PropertyDrawer +{ + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // 1. 获取特性中的中文名 + CNNameAttribute attr = (CNNameAttribute)attribute; + + // 2. 替换原本的 Label + GUIContent newLabel = new GUIContent(attr.Name, label.tooltip); + + // 3. 绘制属性(使用中文名) + EditorGUI.PropertyField(position, property, newLabel, true); + + // 4. 绘制变量原名(灰色小字,显示在 Label 区域的右侧) + // 计算 Label 的区域 + float labelWidth = EditorGUIUtility.labelWidth; + Rect labelRect = new Rect(position.x, position.y, labelWidth, position.height); + + // 设置小字样式 + GUIStyle subStyle = new GUIStyle(EditorStyles.miniLabel); + subStyle.normal.textColor = new Color(0.5f, 0.5f, 0.5f, 0.6f); // 半透明灰色 + subStyle.alignment = TextAnchor.MiddleRight; // 右对齐 + subStyle.fontSize = 9; + subStyle.padding = new RectOffset(0, 2, 0, 0); //稍微留点边距 + + // 绘制变量名 (例如: "maxHP") + GUI.Label(labelRect, property.name, subStyle); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label); + } +} \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Editor/CNNameDrawer.cs.meta b/Assets/Plugins/SOEditorTool/Editor/CNNameDrawer.cs.meta new file mode 100644 index 000000000..b8e65c120 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Editor/CNNameDrawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0c0f975bcc144b9187928b83dc9aaeac +timeCreated: 1765258716 \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Editor/SOEditorConfigEditor.cs b/Assets/Plugins/SOEditorTool/Editor/SOEditorConfigEditor.cs new file mode 100644 index 000000000..9714128f2 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Editor/SOEditorConfigEditor.cs @@ -0,0 +1,164 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Linq; +using System.Collections.Generic; + +[CustomEditor(typeof(SOEditorConfig))] +public class SOEditorConfigEditor : Editor +{ + private SerializedProperty _typeNamesProp; + private string _searchText = ""; + + private void OnEnable() + { + _typeNamesProp = serializedObject.FindProperty("targetTypeNames"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + SOEditorConfig config = (SOEditorConfig)target; + + GUILayout.Label("已管理的 SO 类型:", EditorStyles.boldLabel); + + // === 1. 绘制已添加的类型列表 === + EditorGUILayout.BeginVertical("box"); + for (int i = 0; i < _typeNamesProp.arraySize; i++) + { + SerializedProperty prop = _typeNamesProp.GetArrayElementAtIndex(i); + string typeName = prop.stringValue; + + EditorGUILayout.BeginHorizontal(); + { + GUILayout.Label($"{i + 1}. {typeName}", EditorStyles.label); + + if (GUILayout.Button(EditorGUIUtility.IconContent("TreeEditor.Trash"), EditorStyles.iconButton, GUILayout.Width(25))) + { + _typeNamesProp.DeleteArrayElementAtIndex(i); + break; + } + } + EditorGUILayout.EndHorizontal(); + } + + if (_typeNamesProp.arraySize == 0) + { + GUILayout.Label("暂无类型,请添加", EditorStyles.centeredGreyMiniLabel); + } + + EditorGUILayout.EndVertical(); + + GUILayout.Space(10); + + // === 2. 拖拽区域 (核心修改) === + DrawDragDropArea(); + + GUILayout.Space(10); + + // === 3. 搜索添加 === + GUILayout.Label("或者:搜索添加", EditorStyles.boldLabel); + EditorGUILayout.BeginHorizontal(); + _searchText = EditorGUILayout.TextField(_searchText, EditorStyles.toolbarSearchField); + if (GUILayout.Button("搜索", GUILayout.Width(60))) + { + ShowTypeSelectorMenu(config); + } + + EditorGUILayout.EndHorizontal(); + + serializedObject.ApplyModifiedProperties(); + } + + private void DrawDragDropArea() + { + // 绘制一个虚线框区域 + Rect dropArea = GUILayoutUtility.GetRect(0.0f, 60.0f, GUILayout.ExpandWidth(true)); + GUI.Box(dropArea, "\n拖拽文件到这里添加\n(支持 .cs 脚本 或 .asset 资源)", EditorStyles.helpBox); + + Event evt = Event.current; + if (evt.type == EventType.DragUpdated || evt.type == EventType.DragPerform) + { + if (!dropArea.Contains(evt.mousePosition)) return; + + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + + if (evt.type == EventType.DragPerform) + { + DragAndDrop.AcceptDrag(); + + foreach (UnityEngine.Object dragged_object in DragAndDrop.objectReferences) + { + Type typeToAdd = null; + + // 情况 A: 拖入的是 .cs 脚本文件 + if (dragged_object is MonoScript script) + { + typeToAdd = script.GetClass(); + } + // 情况 B: 拖入的是 .asset 资源实例 (比如 New Tank.asset) + else if (dragged_object is ScriptableObject soInstance) + { + // 直接获取这个实例的类型 + typeToAdd = soInstance.GetType(); + } + + // 执行添加逻辑 + if (typeToAdd != null) + { + // 过滤掉 Config 本身,防止把自己加进去 + if (typeToAdd == typeof(SOEditorConfig)) continue; + + if (typeToAdd.IsSubclassOf(typeof(ScriptableObject))) + { + AddType(typeToAdd.FullName); + } + } + } + } + } + } + + private void ShowTypeSelectorMenu(SOEditorConfig config) + { + GenericMenu menu = new GenericMenu(); + + var allSoTypes = TypeCache.GetTypesDerivedFrom() + .Where(t => !t.IsAbstract && !t.IsGenericType && !t.Namespace.StartsWith("Unity") && !t.Namespace.StartsWith("UnityEditor")) + .OrderBy(t => t.Name); + + foreach (var type in allSoTypes) + { + if (!string.IsNullOrEmpty(_searchText) && !type.Name.ToLower().Contains(_searchText.ToLower())) + continue; + + string menuPath = string.IsNullOrEmpty(type.Namespace) ? type.Name : $"{type.Namespace}/{type.Name}"; + + menu.AddItem(new GUIContent(menuPath), config.targetTypeNames.Contains(type.FullName), () => { AddType(type.FullName); }); + } + + menu.ShowAsContext(); + } + + private void AddType(string typeFullName) + { + serializedObject.Update(); + bool exists = false; + for (int i = 0; i < _typeNamesProp.arraySize; i++) + { + if (_typeNamesProp.GetArrayElementAtIndex(i).stringValue == typeFullName) + { + exists = true; + break; + } + } + + if (!exists) + { + _typeNamesProp.InsertArrayElementAtIndex(_typeNamesProp.arraySize); + _typeNamesProp.GetArrayElementAtIndex(_typeNamesProp.arraySize - 1).stringValue = typeFullName; + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Editor/SOEditorConfigEditor.cs.meta b/Assets/Plugins/SOEditorTool/Editor/SOEditorConfigEditor.cs.meta new file mode 100644 index 000000000..fd33e815f --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Editor/SOEditorConfigEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 45f4877471fd47efb465a700a6869eb4 +timeCreated: 1765219950 \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Editor/UniversalSOEditor.cs b/Assets/Plugins/SOEditorTool/Editor/UniversalSOEditor.cs new file mode 100644 index 000000000..7c593cba3 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Editor/UniversalSOEditor.cs @@ -0,0 +1,422 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System; +using System.Linq; + +public class UniversalSOManager : EditorWindow +{ + // === 布局常量 === + private const float SIDEBAR_WIDTH = 160f; + private const float ASSET_LIST_WIDTH = 220f; + + // === 核心数据 === + private SOEditorConfig _config; + private Type _selectedType; // 现在直接存 Type,不再存 MonoScript + + // === 列表与编辑 === + private List _assetList = new List(); + private ScriptableObject _selectedAsset; + private Editor _cachedEditor; + + // === 状态 === + private string _searchRootPath = "Assets/SOGameData"; + private Vector2 _scrollPosTypes; + private Vector2 _scrollPosAssets; + private Vector2 _scrollPosInspector; + private string _searchString = ""; + private string _newAssetName = ""; + + [MenuItem("Tools/万能SO编辑器 (Universal SO Manager)")] + public static void ShowWindow() + { + GetWindow("SO Manager"); + } + + private void OnEnable() + { + string configPath = EditorPrefs.GetString("UniversalSOManager_ConfigPath", ""); + if (!string.IsNullOrEmpty(configPath)) + { + _config = AssetDatabase.LoadAssetAtPath(configPath); + } + } + + private void OnDisable() + { + if (_cachedEditor != null) DestroyImmediate(_cachedEditor); + if (_config != null) + { + EditorPrefs.SetString("UniversalSOManager_ConfigPath", AssetDatabase.GetAssetPath(_config)); + } + } + + private void OnGUI() + { + DrawTopGlobalBar(); + + if (_config == null) + { + DrawEmptyState(); + return; + } + + EditorGUILayout.BeginHorizontal(); + { + DrawSidebar(); + + EditorGUILayout.BeginVertical(); + { + DrawTypeOperationHeader(); + + EditorGUILayout.BeginHorizontal(); + { + DrawAssetList(); + DrawInspector(); + } + EditorGUILayout.EndHorizontal(); + } + EditorGUILayout.EndVertical(); + } + EditorGUILayout.EndHorizontal(); + } + + // ------------------------------------------------------------------------ + // UI 绘制函数 + // ------------------------------------------------------------------------ + + private void DrawTopGlobalBar() + { + EditorGUILayout.BeginHorizontal("box", GUILayout.Height(30)); + { + GUILayout.Label("资源路径:", GUILayout.Width(60)); + _searchRootPath = EditorGUILayout.TextField(_searchRootPath, GUILayout.Width(150)); + if (GUILayout.Button("...", EditorStyles.miniButton, GUILayout.Width(25))) + { + string path = EditorUtility.OpenFolderPanel("选择根目录", Application.dataPath, ""); + if (!string.IsNullOrEmpty(path) && path.StartsWith(Application.dataPath)) + { + _searchRootPath = "Assets" + path.Substring(Application.dataPath.Length); + RefreshAssetList(); + } + } + + GUILayout.Space(20); + + GUILayout.Label("Config文件:", GUILayout.Width(70)); + EditorGUI.BeginChangeCheck(); + _config = (SOEditorConfig)EditorGUILayout.ObjectField(_config, typeof(SOEditorConfig), false, GUILayout.Width(200)); + if (EditorGUI.EndChangeCheck()) + { + _selectedType = null; + _assetList.Clear(); + _selectedAsset = null; + GUIUtility.ExitGUI(); + } + + // 快捷编辑 Config 按钮 + if (_config != null) + { + if (GUILayout.Button("编辑Config", EditorStyles.miniButton, GUILayout.Width(80))) + { + Selection.activeObject = _config; + } + } + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("强制刷新", EditorStyles.toolbarButton, GUILayout.Width(80))) + { + AssetDatabase.Refresh(); + RefreshAssetList(); + } + } + EditorGUILayout.EndHorizontal(); + } + + private void DrawSidebar() + { + EditorGUILayout.BeginVertical("box", GUILayout.Width(SIDEBAR_WIDTH), GUILayout.ExpandHeight(true)); + + GUILayout.Label("SO 种类", EditorStyles.boldLabel); + GUILayout.Space(5); + + _scrollPosTypes = EditorGUILayout.BeginScrollView(_scrollPosTypes); + + if (_config != null && _config.targetTypeNames != null) + { + foreach (var typeName in _config.targetTypeNames) + { + // 解析类型 + Type type = GetTypeByName(typeName); + + if (type == null) + { + // 类型丢失(可能代码改名了) + GUI.color = Color.red; + GUILayout.Label($"丢失: {typeName}"); + GUI.color = Color.white; + continue; + } + + bool isSelected = (_selectedType == type); + if (isSelected) GUI.backgroundColor = new Color(0.6f, 0.8f, 1f); + + // 使用短名显示,但在 Tooltip 显示全名 + if (GUILayout.Button(new GUIContent(type.Name, type.FullName), EditorStyles.miniButton, GUILayout.Height(28))) + { + SelectType(type); + } + + GUI.backgroundColor = Color.white; + } + } + + EditorGUILayout.EndScrollView(); + EditorGUILayout.EndVertical(); + } + + private void DrawTypeOperationHeader() + { + EditorGUILayout.BeginVertical("box", GUILayout.Height(60), GUILayout.ExpandWidth(true)); + + string title = _selectedType != null ? _selectedType.Name : "请选择种类"; + GUILayout.Label($"当前操作: {title}", EditorStyles.boldLabel); + + GUILayout.Space(5); + + EditorGUILayout.BeginHorizontal(); + { + GUILayout.Label("搜索:", GUILayout.Width(40)); + string newSearch = EditorGUILayout.TextField(_searchString, EditorStyles.toolbarSearchField, GUILayout.Width(200)); + if (newSearch != _searchString) + { + _searchString = newSearch; + RefreshAssetList(); + } + + GUILayout.FlexibleSpace(); + + GUILayout.Label("新名称:", GUILayout.Width(50)); + _newAssetName = EditorGUILayout.TextField(_newAssetName, GUILayout.Width(150)); + + EditorGUI.BeginDisabledGroup(_selectedType == null); + if (GUILayout.Button("新增 (Create)", EditorStyles.miniButtonRight, GUILayout.Width(100))) + { + CreateAsset(); + } + + EditorGUI.EndDisabledGroup(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + private void DrawAssetList() + { + EditorGUILayout.BeginVertical("box", GUILayout.Width(ASSET_LIST_WIDTH), GUILayout.ExpandHeight(true)); + + GUILayout.Label("资源列表", EditorStyles.miniLabel); + + _scrollPosAssets = EditorGUILayout.BeginScrollView(_scrollPosAssets); + + if (_assetList != null) + { + for (int i = 0; i < _assetList.Count; i++) + { + var asset = _assetList[i]; + if (asset == null) continue; + + EditorGUILayout.BeginHorizontal("box"); + { + if (_selectedAsset == asset) GUI.backgroundColor = Color.green; + + if (GUILayout.Button(asset.name, EditorStyles.label, GUILayout.Height(22))) + { + SelectAsset(asset); + } + + GUI.backgroundColor = Color.white; + + if (GUILayout.Button(EditorGUIUtility.IconContent("d_ViewToolOrbit"), EditorStyles.iconButton, GUILayout.Width(22))) + EditorGUIUtility.PingObject(asset); + + if (GUILayout.Button(EditorGUIUtility.IconContent("d_TreeEditor.Duplicate"), EditorStyles.iconButton, GUILayout.Width(22))) + DuplicateAsset(asset); + + if (GUILayout.Button(EditorGUIUtility.IconContent("TreeEditor.Trash"), EditorStyles.iconButton, GUILayout.Width(22))) + { + if (EditorUtility.DisplayDialog("删除确认", $"确定删除 {asset.name} 吗?", "删除", "取消")) + { + DeleteAsset(asset); + GUIUtility.ExitGUI(); + } + } + } + EditorGUILayout.EndHorizontal(); + } + } + + EditorGUILayout.EndScrollView(); + EditorGUILayout.EndVertical(); + } + + private void DrawInspector() + { + EditorGUILayout.BeginVertical("box", GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); + + if (_selectedAsset != null) + { + GUILayout.Label("属性编辑", EditorStyles.boldLabel); + + EditorGUILayout.BeginHorizontal(); + GUILayout.Label("文件名:", GUILayout.Width(50)); + string newName = EditorGUILayout.DelayedTextField(_selectedAsset.name); + if (newName != _selectedAsset.name) RenameAsset(_selectedAsset, newName); + EditorGUILayout.EndHorizontal(); + + GUILayout.Space(10); + + _scrollPosInspector = EditorGUILayout.BeginScrollView(_scrollPosInspector); + + if (_cachedEditor == null || _cachedEditor.target != _selectedAsset) + { + if (_cachedEditor != null) DestroyImmediate(_cachedEditor); + _cachedEditor = Editor.CreateEditor(_selectedAsset); + } + + if (_cachedEditor != null) + { + EditorGUI.BeginChangeCheck(); + _cachedEditor.OnInspectorGUI(); + if (EditorGUI.EndChangeCheck()) EditorUtility.SetDirty(_selectedAsset); + } + + EditorGUILayout.EndScrollView(); + } + else + { + GUILayout.FlexibleSpace(); + GUILayout.Label("<< 请选择资源", EditorStyles.centeredGreyMiniLabel); + GUILayout.FlexibleSpace(); + } + + EditorGUILayout.EndVertical(); + } + + private void DrawEmptyState() + { + EditorGUILayout.BeginVertical(); + GUILayout.FlexibleSpace(); + EditorGUILayout.HelpBox("请在顶部指定一个 SOEditorConfig 配置文件。", MessageType.Info); + GUILayout.FlexibleSpace(); + EditorGUILayout.EndVertical(); + } + + // ------------------------------------------------------------------------ + // 逻辑处理 + // ------------------------------------------------------------------------ + + // 辅助:从字符串获取类型 (遍历所有程序集) + private Type GetTypeByName(string fullName) + { + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + var type = assembly.GetType(fullName); + if (type != null) return type; + } + + return null; + } + + private void SelectType(Type type) + { + _selectedType = type; + _selectedAsset = null; + _newAssetName = "New " + type.Name; + RefreshAssetList(); + } + + private void SelectAsset(ScriptableObject asset) + { + _selectedAsset = asset; + GUI.FocusControl(null); + } + + private void RefreshAssetList() + { + if (_selectedType == null) return; + _assetList.Clear(); + + // 查找资源 + string[] guids = AssetDatabase.FindAssets($"t:{_selectedType.Name}", new[] { _searchRootPath }); + + foreach (var guid in guids) + { + string path = AssetDatabase.GUIDToAssetPath(guid); + var asset = AssetDatabase.LoadAssetAtPath(path); + + // 严格类型检查 (支持继承) + if (asset != null && _selectedType.IsAssignableFrom(asset.GetType())) + { + if (string.IsNullOrEmpty(_searchString) || asset.name.ToLower().Contains(_searchString.ToLower())) + { + _assetList.Add(asset); + } + } + } + + _assetList.Sort((a, b) => string.Compare(a.name, b.name, StringComparison.Ordinal)); + } + + private void CreateAsset() + { + if (_selectedType == null) return; + + string targetFolder = $"{_searchRootPath}/{_selectedType.Name}"; + if (!AssetDatabase.IsValidFolder(targetFolder)) + { + if (AssetDatabase.IsValidFolder(_searchRootPath)) + AssetDatabase.CreateFolder(_searchRootPath, _selectedType.Name); + else + targetFolder = _searchRootPath; + } + + string fullPath = $"{targetFolder}/{_newAssetName}.asset"; + fullPath = AssetDatabase.GenerateUniqueAssetPath(fullPath); + + var instance = ScriptableObject.CreateInstance(_selectedType); + AssetDatabase.CreateAsset(instance, fullPath); + AssetDatabase.SaveAssets(); + + AssetDatabase.Refresh(); + RefreshAssetList(); + SelectAsset(instance); + } + + private void DuplicateAsset(ScriptableObject asset) + { + string path = AssetDatabase.GetAssetPath(asset); + string newPath = AssetDatabase.GenerateUniqueAssetPath(path); + AssetDatabase.CopyAsset(path, newPath); + AssetDatabase.SaveAssets(); + RefreshAssetList(); + } + + private void DeleteAsset(ScriptableObject asset) + { + string path = AssetDatabase.GetAssetPath(asset); + AssetDatabase.DeleteAsset(path); + AssetDatabase.SaveAssets(); + if (_selectedAsset == asset) _selectedAsset = null; + RefreshAssetList(); + } + + private void RenameAsset(ScriptableObject asset, string newName) + { + string path = AssetDatabase.GetAssetPath(asset); + AssetDatabase.RenameAsset(path, newName); + AssetDatabase.SaveAssets(); + RefreshAssetList(); + } +} \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Editor/UniversalSOEditor.cs.meta b/Assets/Plugins/SOEditorTool/Editor/UniversalSOEditor.cs.meta new file mode 100644 index 000000000..6db70e411 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Editor/UniversalSOEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 70dc192513964637860b748b8957f0f6 +timeCreated: 1765215245 \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Example.meta b/Assets/Plugins/SOEditorTool/Example.meta new file mode 100644 index 000000000..376d270d6 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Example.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7c22e204a4c845268592ac59ecdc4b52 +timeCreated: 1765259304 \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Example/ExampleConfig.asset b/Assets/Plugins/SOEditorTool/Example/ExampleConfig.asset new file mode 100644 index 000000000..87bc2c699 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Example/ExampleConfig.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b9d2ad94e1454d91833b3134b5c927bd, type: 3} + m_Name: ExampleConfig + m_EditorClassIdentifier: + targetTypeNames: + - WeaponConfig diff --git a/Assets/Plugins/SOEditorTool/Example/ExampleConfig.asset.meta b/Assets/Plugins/SOEditorTool/Example/ExampleConfig.asset.meta new file mode 100644 index 000000000..1ae378c28 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Example/ExampleConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd879080496a8eb47bee4af200e048ba +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SOEditorTool/Example/WeaponConfig.cs b/Assets/Plugins/SOEditorTool/Example/WeaponConfig.cs new file mode 100644 index 000000000..f759d8579 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Example/WeaponConfig.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +[CreateAssetMenu(fileName = "NewWeapon", menuName = "SOConfig/Weapon")] +public class WeaponConfig : ScriptableObject +{ + [Header("武器")] [CNName("武器名称")] public int weaponName; +} \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/Example/WeaponConfig.cs.meta b/Assets/Plugins/SOEditorTool/Example/WeaponConfig.cs.meta new file mode 100644 index 000000000..7aee839a7 --- /dev/null +++ b/Assets/Plugins/SOEditorTool/Example/WeaponConfig.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ca7dfd64ca684b00b235658f84d4206d +timeCreated: 1765259314 \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/SOEditorConfig.cs b/Assets/Plugins/SOEditorTool/SOEditorConfig.cs new file mode 100644 index 000000000..efc97027f --- /dev/null +++ b/Assets/Plugins/SOEditorTool/SOEditorConfig.cs @@ -0,0 +1,9 @@ +using UnityEngine; +using System.Collections.Generic; + +[CreateAssetMenu(fileName = "SOEditorConfig", menuName = "Tools/SO编辑器配置 (Config)")] +public class SOEditorConfig : ScriptableObject +{ + // 存储类型的全名 (例如 "MyGame.TankEngine") + public List targetTypeNames = new List(); +} \ No newline at end of file diff --git a/Assets/Plugins/SOEditorTool/SOEditorConfig.cs.meta b/Assets/Plugins/SOEditorTool/SOEditorConfig.cs.meta new file mode 100644 index 000000000..3c5a725ee --- /dev/null +++ b/Assets/Plugins/SOEditorTool/SOEditorConfig.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b9d2ad94e1454d91833b3134b5c927bd +timeCreated: 1765218978 \ No newline at end of file diff --git a/Assets/RawResources/Art/酒吧素材.meta b/Assets/RawResources/Art/酒吧素材.meta new file mode 100644 index 000000000..2fafb739d --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 25bf96c04a9cfec4da0f5729a1dd995d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画.meta b/Assets/RawResources/Art/酒吧素材/固定小动画.meta new file mode 100644 index 000000000..ab44cefad --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/固定小动画.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd9eb0eb368ae0c4aaa33c378df1d244 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画/前景人物.aseprite b/Assets/RawResources/Art/酒吧素材/固定小动画/前景人物.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..c6a923efdcf5ba0673554d91cceb9193304f0ec4 GIT binary patch literal 44142 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

42aIEW&ZrxaDw$#v?&Pxow!D9-D;3jkX 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 literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画/前景人物.aseprite.meta b/Assets/RawResources/Art/酒吧素材/固定小动画/前景人物.aseprite.meta new file mode 100644 index 000000000..4ebeb498b --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/固定小动画/前景人物.aseprite.meta @@ -0,0 +1,308 @@ +fileFormatVersion: 2 +guid: 98eeb56f1f70c8043b61ccd9b1453203 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 0 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 0 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008263831281129 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u524D\u666F\u4EBA\u7269_Frame_0" + originalName: + pivot: {x: 0.5, y: 0.864} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 384 + height: 125 + spriteID: 70136649a6ea10e4eb4154080f31067b + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u524D\u666F\u4EBA\u7269_Frame_1" + originalName: + pivot: {x: 0.5, y: 0.864} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 137 + width: 384 + height: 125 + spriteID: e00b8d3d8a60a71489186b42154aae14 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 137} + - name: "\u524D\u666F\u4EBA\u7269_Frame_2" + originalName: + pivot: {x: 0.5, y: 0.864} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 270 + width: 384 + height: 125 + spriteID: 7a8237aada2e91f419e64a9f14ea6723 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 270} + - name: "\u524D\u666F\u4EBA\u7269_Frame_3" + originalName: + pivot: {x: 0.5, y: 0.864} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 403 + width: 384 + height: 125 + spriteID: b95cbb7eac66828459e75da448375d9a + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 403} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: 1301651309 + name: "\u524D\u666F\u4EBA\u7269" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u524D\u666F\u4EBA\u7269_Frame_0" + frameIndex: 0 + cellRect: + x: 0 + y: 0 + width: 384 + height: 125 + spriteId: 70136649a6ea10e4eb4154080f31067b + - name: "\u524D\u666F\u4EBA\u7269_Frame_1" + frameIndex: 1 + cellRect: + x: 0 + y: 0 + width: 384 + height: 125 + spriteId: e00b8d3d8a60a71489186b42154aae14 + - name: "\u524D\u666F\u4EBA\u7269_Frame_2" + frameIndex: 2 + cellRect: + x: 0 + y: 0 + width: 384 + height: 125 + spriteId: 7a8237aada2e91f419e64a9f14ea6723 + - name: "\u524D\u666F\u4EBA\u7269_Frame_3" + frameIndex: 3 + cellRect: + x: 0 + y: 0 + width: 384 + height: 125 + spriteId: b95cbb7eac66828459e75da448375d9a + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 384, y: 216} diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画/广告牌.aseprite b/Assets/RawResources/Art/酒吧素材/固定小动画/广告牌.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..bf521c4a71f6808fc8dc103106fbce9aa7cb5bdb GIT binary patch literal 10487 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 literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画/广告牌.aseprite.meta b/Assets/RawResources/Art/酒吧素材/固定小动画/广告牌.aseprite.meta new file mode 100644 index 000000000..1e7538e89 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/固定小动画/广告牌.aseprite.meta @@ -0,0 +1,308 @@ +fileFormatVersion: 2 +guid: 1d2bdb7aac434de4d81f3ab8370c6b42 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 0 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 0 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008267255210996 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u5E7F\u544A\u724C_Frame_0" + originalName: + pivot: {x: 0.4923664, y: 0.53125} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 262 + height: 16 + spriteID: 4ba3892e00b44fa43ace5db9b39d0a07 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u5E7F\u544A\u724C_Frame_1" + originalName: + pivot: {x: 0.4923664, y: 0.53125} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 28 + width: 262 + height: 16 + spriteID: 7a50a935ec386de4b836bfa201c67139 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 28} + - name: "\u5E7F\u544A\u724C_Frame_2" + originalName: + pivot: {x: 0.48846152, y: 0.53125} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 52 + width: 260 + height: 16 + spriteID: e51c9548319ad3b4dadb84420f0b8185 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 52} + - name: "\u5E7F\u544A\u724C_Frame_3" + originalName: + pivot: {x: 0.4864865, y: 0.53125} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 76 + width: 259 + height: 16 + spriteID: 49e29739ab988474db6e7de3fbaacbc0 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 76} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: -881569107 + name: "\u5E7F\u544A\u724C" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u5E7F\u544A\u724C_Frame_0" + frameIndex: 0 + cellRect: + x: 4 + y: 3 + width: 262 + height: 16 + spriteId: 4ba3892e00b44fa43ace5db9b39d0a07 + - name: "\u5E7F\u544A\u724C_Frame_1" + frameIndex: 1 + cellRect: + x: 4 + y: 3 + width: 262 + height: 16 + spriteId: 7a50a935ec386de4b836bfa201c67139 + - name: "\u5E7F\u544A\u724C_Frame_2" + frameIndex: 2 + cellRect: + x: 6 + y: 3 + width: 260 + height: 16 + spriteId: e51c9548319ad3b4dadb84420f0b8185 + - name: "\u5E7F\u544A\u724C_Frame_3" + frameIndex: 3 + cellRect: + x: 7 + y: 3 + width: 259 + height: 16 + spriteId: 49e29739ab988474db6e7de3fbaacbc0 + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 266, y: 23} diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画/窗前.aseprite b/Assets/RawResources/Art/酒吧素材/固定小动画/窗前.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..bb9922b82c8459153c6850728df49b6e3ddc1f56 GIT binary patch literal 45376 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

FWuK2H1uquLcTo1HVW!%ncLum9`{f6pVT(kAUx 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 L`G$}3P%Zv1wI$Lr literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画/酒保.aseprite.meta b/Assets/RawResources/Art/酒吧素材/固定小动画/酒保.aseprite.meta new file mode 100644 index 000000000..48599da3d --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/固定小动画/酒保.aseprite.meta @@ -0,0 +1,308 @@ +fileFormatVersion: 2 +guid: 75061899b1a4c924fbbe0631ed1fcb3a +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 0 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 0 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008271652303497 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u9152\u4FDD_Frame_0" + originalName: + pivot: {x: 0.4888889, y: 0.5344828} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 45 + height: 87 + spriteID: 2649453efee2256409d2280c58763084 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u9152\u4FDD_Frame_1" + originalName: + pivot: {x: 0.4888889, y: 0.5290698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 99 + width: 45 + height: 86 + spriteID: 6134a5f81a841b440acfedbc946f71c3 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 99} + - name: "\u9152\u4FDD_Frame_2" + originalName: + pivot: {x: 0.4888889, y: 0.51744187} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 57 + y: 4 + width: 45 + height: 86 + spriteID: 6634e7dc1b354b94fabcccdee4222653 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 57, y: 4} + - name: "\u9152\u4FDD_Frame_3" + originalName: + pivot: {x: 0.4888889, y: 0.5352941} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 57 + y: 98 + width: 45 + height: 85 + spriteID: 5e31c863f40485343a648227e21ed82f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 57, y: 98} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: -1161494397 + name: "\u9152\u4FDD" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u9152\u4FDD_Frame_0" + frameIndex: 0 + cellRect: + x: 7 + y: 0 + width: 45 + height: 87 + spriteId: 2649453efee2256409d2280c58763084 + - name: "\u9152\u4FDD_Frame_1" + frameIndex: 1 + cellRect: + x: 7 + y: 1 + width: 45 + height: 86 + spriteId: 6134a5f81a841b440acfedbc946f71c3 + - name: "\u9152\u4FDD_Frame_2" + frameIndex: 2 + cellRect: + x: 7 + y: 2 + width: 45 + height: 86 + spriteId: 6634e7dc1b354b94fabcccdee4222653 + - name: "\u9152\u4FDD_Frame_3" + frameIndex: 3 + cellRect: + x: 7 + y: 1 + width: 45 + height: 85 + spriteId: 5e31c863f40485343a648227e21ed82f + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 58, y: 93} diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画/顾客NPC.aseprite b/Assets/RawResources/Art/酒吧素材/固定小动画/顾客NPC.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..1f13dd0e5dd6069db6ae4ed68dbcb9f79775107b GIT binary patch literal 19965 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 literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/固定小动画/顾客NPC.aseprite.meta b/Assets/RawResources/Art/酒吧素材/固定小动画/顾客NPC.aseprite.meta new file mode 100644 index 000000000..9cf21509b --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/固定小动画/顾客NPC.aseprite.meta @@ -0,0 +1,308 @@ +fileFormatVersion: 2 +guid: 55f87b75a03aedb4fbc6c3fd66d58023 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 0 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 0 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008263831271090 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u987E\u5BA2NPC_Frame_0" + originalName: + pivot: {x: 0.5, y: 0.5127118} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 74 + y: 4 + width: 62 + height: 118 + spriteID: 96bda23cc3c6e0749b6ab627b1b5fa6f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 74, y: 4} + - name: "\u987E\u5BA2NPC_Frame_1" + originalName: + pivot: {x: 0.5, y: 0.50840336} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 62 + height: 119 + spriteID: ee893d64704d41741b07b1509760029b + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u987E\u5BA2NPC_Frame_2" + originalName: + pivot: {x: 0.5, y: 0.5127118} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 144 + y: 4 + width: 62 + height: 118 + spriteID: d847b8a5f7056bc44b2fcff4a585f947 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 144, y: 4} + - name: "\u987E\u5BA2NPC_Frame_3" + originalName: + pivot: {x: 0.5, y: 0.5127118} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 131 + width: 62 + height: 118 + spriteID: 627d7ec90a5c7d34dabacfedb4428233 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 131} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: 561863541 + name: "\u987E\u5BA2NPC" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u987E\u5BA2NPC_Frame_0" + frameIndex: 0 + cellRect: + x: 3 + y: 2 + width: 62 + height: 118 + spriteId: 96bda23cc3c6e0749b6ab627b1b5fa6f + - name: "\u987E\u5BA2NPC_Frame_1" + frameIndex: 1 + cellRect: + x: 3 + y: 2 + width: 62 + height: 119 + spriteId: ee893d64704d41741b07b1509760029b + - name: "\u987E\u5BA2NPC_Frame_2" + frameIndex: 2 + cellRect: + x: 3 + y: 2 + width: 62 + height: 118 + spriteId: d847b8a5f7056bc44b2fcff4a585f947 + - name: "\u987E\u5BA2NPC_Frame_3" + frameIndex: 3 + cellRect: + x: 3 + y: 2 + width: 62 + height: 118 + spriteId: 627d7ec90a5c7d34dabacfedb4428233 + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 68, y: 125} diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内场景.psd b/Assets/RawResources/Art/酒吧素材/酒吧内场景.psd new file mode 100644 index 000000000..86bd493a2 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内场景.psd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:850781017d2cdbad51bd0ca6e16585a9181c9bd0be919215af851a61dd89c3b4 +size 442386 diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内场景.psd.meta b/Assets/RawResources/Art/酒吧素材/酒吧内场景.psd.meta new file mode 100644 index 000000000..664d93da0 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内场景.psd.meta @@ -0,0 +1,702 @@ +fileFormatVersion: 2 +guid: 2d04bbcf31d73e143b33fb4f61c084b0 +importerOverride: + nativeImporterType: 2089858483 + scriptedImporterType: + serializedVersion: 2 + Hash: b10b55a1aa6a1aa32521bc0cab59632e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: b2a9591990af98743ba3ff7cf1000886, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 1 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + spriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + spritePosition: {x: 0, y: 0} + mosaicSpriteImportData: [] + rigSpriteImportData: + - name: "\u706F\u7BA1" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 137 + y: 446 + width: 240 + height: 67 + spriteID: 9dfc2ad9d9c47884290ce51223a3ec15 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 137, y: 446} + spritePosition: {x: 144, y: 149} + - name: "\u524D\u666F\u4EBA\u7269" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 228 + width: 384 + height: 125 + spriteID: 357085aaad37ab14aa24af83b88d2e12 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 228} + spritePosition: {x: 0, y: 0} + - name: "\u6905\u5B50" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 294 + y: 361 + width: 195 + height: 74 + spriteID: 764266c6cc4261745b6d19d1212e21c3 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 294, y: 361} + spritePosition: {x: 135, y: 0} + - name: "\u706B\u5C71" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 602 + width: 65 + height: 138 + spriteID: dcc8da213ec020048abf33e0d96f136a + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 602} + spritePosition: {x: 198, y: 2} + - name: NPC + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 396 + y: 228 + width: 62 + height: 118 + spriteID: 8203f8920bc086e42b7c0e4e1e061164 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 396, y: 228} + spritePosition: {x: 280, y: 16} + - name: doctor + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 748 + width: 51 + height: 128 + spriteID: 60f6ab6b7a4fece4092366741395acfa + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 748} + spritePosition: {x: 129, y: 4} + - name: "\u684C\u4E0A\u7269\u54C1" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 137 + y: 521 + width: 175 + height: 27 + spriteID: 195cc8ca313accb4e9467a1e428876dc + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 137, y: 521} + spritePosition: {x: 107, y: 78} + - name: "\u524D\u53F0" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 361 + width: 282 + height: 77 + spriteID: 6adbaffa108fbd5479442716bfeb295f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 361} + spritePosition: {x: 102, y: 4} + - name: "\u524D\u53F0\u5DE6\u4FA7\u6905\u5B50" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 466 + y: 228 + width: 35 + height: 71 + spriteID: 510120fa8751fe343998e0b4cdb1eda0 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 466, y: 228} + spritePosition: {x: 79, y: 12} + - name: "\u8C03\u9152\u5E08" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 884 + width: 45 + height: 87 + spriteID: 192972e49436ea2489e1fbd3ce8ed2e8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 884} + spritePosition: {x: 330, y: 71} + - name: "\u8C03\u9152\u59B9" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 464 + y: 4 + width: 34 + height: 68 + spriteID: f61a4955f80e2a84cb843f0f8161a895 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 464, y: 4} + spritePosition: {x: 171, y: 76} + - name: "\u5E7F\u544A" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 137 + y: 581 + width: 262 + height: 16 + spriteID: a5dc120089bab6d4a8a6bc59054d2bfc + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 137, y: 581} + spritePosition: {x: 122, y: 178} + - name: "\u5C4F\u5E55\u52A8\u753B" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 137 + y: 556 + width: 266 + height: 17 + spriteID: c6544bc121e7ccb45b990060564000a0 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 137, y: 556} + spritePosition: {x: 118, y: 177} + - name: "\u5427\u53F0" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 309 + height: 216 + spriteID: 3718efe8b3dd7824d9c855f20094b3f7 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 2, y: 4} + spritePosition: {x: 75, y: 0} + - name: "\u4FA7\u8FB9\u7A97\u8FB9" + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 321 + y: 4 + width: 135 + height: 216 + spriteID: 917499e799feb35408b21a101938ae00 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 321, y: 4} + spritePosition: {x: 0, y: 0} + - name: night + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 446 + width: 125 + height: 148 + spriteID: a5e43dc9584d73f408763506aa9c7cfd + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 446} + spritePosition: {x: 0, y: 68} + characterData: + bones: [] + parts: [] + dimension: {x: 0, y: 0} + characterGroups: [] + pivot: {x: 0, y: 0} + boneReadOnly: 0 + sharedRigSpriteImportData: [] + sharedRigCharacterData: + bones: [] + parts: [] + dimension: {x: 0, y: 0} + characterGroups: [] + pivot: {x: 0, y: 0} + boneReadOnly: 0 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + mosaicLayers: 1 + characterMode: 1 + documentPivot: {x: 0, y: 0} + documentAlignment: 0 + importHiddenLayers: 0 + layerMappingOption: 2 + generatePhysicsShape: 0 + paperDollMode: 0 + keepDupilcateSpriteName: 1 + skeletonAssetReferenceID: + padding: 4 + spriteSizeExpand: 0 + spriteCategoryList: + categories: [] + spritePackingTag: + resliceFromLayer: 0 + mosaicPSDLayers: [] + rigPSDLayers: + - name: "\u706F\u7BA1" + spriteName: "\u706F\u7BA1" + isGroup: 0 + parentIndex: -1 + spriteID: 9dfc2ad9d9c47884290ce51223a3ec15 + layerID: 26 + mosaicPosition: {x: 137, y: 446} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u524D\u666F\u4EBA\u7269" + spriteName: "\u524D\u666F\u4EBA\u7269" + isGroup: 0 + parentIndex: -1 + spriteID: 357085aaad37ab14aa24af83b88d2e12 + layerID: 25 + mosaicPosition: {x: 4, y: 228} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u6905\u5B50" + spriteName: "\u6905\u5B50" + isGroup: 0 + parentIndex: -1 + spriteID: 764266c6cc4261745b6d19d1212e21c3 + layerID: 24 + mosaicPosition: {x: 294, y: 361} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u706B\u5C71" + spriteName: "\u706B\u5C71" + isGroup: 0 + parentIndex: -1 + spriteID: dcc8da213ec020048abf33e0d96f136a + layerID: 23 + mosaicPosition: {x: 4, y: 602} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: NPC + spriteName: NPC + isGroup: 0 + parentIndex: -1 + spriteID: 8203f8920bc086e42b7c0e4e1e061164 + layerID: 22 + mosaicPosition: {x: 396, y: 228} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: doctor + spriteName: doctor + isGroup: 0 + parentIndex: -1 + spriteID: 60f6ab6b7a4fece4092366741395acfa + layerID: 21 + mosaicPosition: {x: 4, y: 748} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u684C\u4E0A\u7269\u54C1" + spriteName: "\u684C\u4E0A\u7269\u54C1" + isGroup: 0 + parentIndex: -1 + spriteID: 195cc8ca313accb4e9467a1e428876dc + layerID: 20 + mosaicPosition: {x: 137, y: 521} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u524D\u53F0" + spriteName: "\u524D\u53F0" + isGroup: 0 + parentIndex: -1 + spriteID: 6adbaffa108fbd5479442716bfeb295f + layerID: 19 + mosaicPosition: {x: 4, y: 361} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u524D\u53F0\u5DE6\u4FA7\u6905\u5B50" + spriteName: "\u524D\u53F0\u5DE6\u4FA7\u6905\u5B50" + isGroup: 0 + parentIndex: -1 + spriteID: 510120fa8751fe343998e0b4cdb1eda0 + layerID: 18 + mosaicPosition: {x: 466, y: 228} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u8C03\u9152\u5E08" + spriteName: "\u8C03\u9152\u5E08" + isGroup: 0 + parentIndex: -1 + spriteID: 192972e49436ea2489e1fbd3ce8ed2e8 + layerID: 17 + mosaicPosition: {x: 4, y: 884} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u8C03\u9152\u59B9" + spriteName: "\u8C03\u9152\u59B9" + isGroup: 0 + parentIndex: -1 + spriteID: f61a4955f80e2a84cb843f0f8161a895 + layerID: 16 + mosaicPosition: {x: 464, y: 4} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u5E7F\u544A" + spriteName: "\u5E7F\u544A" + isGroup: 0 + parentIndex: -1 + spriteID: a5dc120089bab6d4a8a6bc59054d2bfc + layerID: 15 + mosaicPosition: {x: 137, y: 581} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u5C4F\u5E55\u52A8\u753B" + spriteName: "\u5C4F\u5E55\u52A8\u753B" + isGroup: 0 + parentIndex: -1 + spriteID: c6544bc121e7ccb45b990060564000a0 + layerID: 14 + mosaicPosition: {x: 137, y: 556} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u5427\u53F0" + spriteName: "\u5427\u53F0" + isGroup: 0 + parentIndex: -1 + spriteID: 3718efe8b3dd7824d9c855f20094b3f7 + layerID: 13 + mosaicPosition: {x: 4, y: 4} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: "\u4FA7\u8FB9\u7A97\u8FB9" + spriteName: "\u4FA7\u8FB9\u7A97\u8FB9" + isGroup: 0 + parentIndex: -1 + spriteID: 917499e799feb35408b21a101938ae00 + layerID: 12 + mosaicPosition: {x: 321, y: 4} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: night + spriteName: night + isGroup: 0 + parentIndex: -1 + spriteID: a5e43dc9584d73f408763506aa9c7cfd + layerID: 11 + mosaicPosition: {x: 4, y: 446} + flatten: 0 + isImported: 1 + isVisible: 1 + sharedRigPSDLayers: [] + pSDLayerImportSetting: [] + importFileNodeState: 1 + platformSettingsDirtyTick: 639008231610878680 + spriteSizeExpandChanged: 0 + generateGOHierarchy: 0 + textureAssetName: + prefabAssetName: + spriteLibAssetName: + skeletonAssetName: + secondarySpriteTextures: [] diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画.meta new file mode 100644 index 000000000..af02517ea --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21183f6970762c64c94a3e7ff1e3dd4c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/医生Idle.anim b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/医生Idle.anim new file mode 100644 index 000000000..c0058a337 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/医生Idle.anim @@ -0,0 +1,70 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u533B\u751FIdle" + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - serializedVersion: 2 + curve: + - time: 0 + value: {fileID: 7775007450094160942, guid: 0cea27261fffbf741bf731d5075bfb88, type: 3} + - time: 0.5 + value: {fileID: 5633751320196528272, guid: 0cea27261fffbf741bf731d5075bfb88, type: 3} + - time: 0.8 + value: {fileID: -3814031830717977439, guid: 0cea27261fffbf741bf731d5075bfb88, type: 3} + - time: 1.3 + value: {fileID: -6659459464340912206, guid: 0cea27261fffbf741bf731d5075bfb88, type: 3} + - time: 1.8 + value: {fileID: -6659459464340912206, guid: 0cea27261fffbf741bf731d5075bfb88, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + flags: 2 + m_SampleRate: 100 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1.81 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 0 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/医生Idle.anim.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/医生Idle.anim.meta new file mode 100644 index 000000000..440752db5 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/医生Idle.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ccc09e0d078db84fae6193f99f76544 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/火山Idle.anim b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/火山Idle.anim new file mode 100644 index 000000000..a83a03abb --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/火山Idle.anim @@ -0,0 +1,70 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u706B\u5C71Idle" + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - serializedVersion: 2 + curve: + - time: 0 + value: {fileID: -8641775619458314835, guid: 01402d7221f31f142a9d0c86df0307e6, type: 3} + - time: 0.5 + value: {fileID: 2371626098144267126, guid: 01402d7221f31f142a9d0c86df0307e6, type: 3} + - time: 0.8 + value: {fileID: 5666602759200384425, guid: 01402d7221f31f142a9d0c86df0307e6, type: 3} + - time: 1.3 + value: {fileID: 5375141114978187824, guid: 01402d7221f31f142a9d0c86df0307e6, type: 3} + - time: 1.8 + value: {fileID: 5375141114978187824, guid: 01402d7221f31f142a9d0c86df0307e6, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + flags: 2 + m_SampleRate: 100 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1.81 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 0 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/火山Idle.anim.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/火山Idle.anim.meta new file mode 100644 index 000000000..91d9374e8 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/火山Idle.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51a54e427cae32943984bc89cf1aacc5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹.meta new file mode 100644 index 000000000..9bb996b51 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aaf90c45f3a4ac34f9ecfe38cc980045 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim new file mode 100644 index 000000000..b79e6f4d4 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: IDLE + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - serializedVersion: 2 + curve: + - time: 0 + value: {fileID: 2239032503184581305, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + - time: 0.5 + value: {fileID: 8129244339203407777, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + - time: 0.8 + value: {fileID: -3706096164870116202, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + - time: 1.3 + value: {fileID: 5666337953410687022, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + - time: 1.8 + value: {fileID: -2010505867083004755, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + - time: 2.3 + value: {fileID: 2149900129833255973, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + - time: 2.8 + value: {fileID: -2361254620218298149, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + - time: 3.3 + value: {fileID: 4833124347235867667, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + - time: 3.8 + value: {fileID: 4833124347235867667, guid: 395dd687f0870f34fa9f872529f0aaab, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + flags: 2 + m_SampleRate: 100 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 3.81 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 0 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim.meta new file mode 100644 index 000000000..65ebbe2cb --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/IDLE.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd0bba28ebaa08c4db033fd651fdd823 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹侧头.aseprite b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹侧头.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..dfc94f1a4f18ae97d878943a1cccf8838cae7462 GIT binary patch literal 25934 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 literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹侧头.aseprite.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹侧头.aseprite.meta new file mode 100644 index 000000000..b449412f5 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹侧头.aseprite.meta @@ -0,0 +1,868 @@ +fileFormatVersion: 2 +guid: 2b7f60724c9633a4baeaa2d1925950d7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008902983815982 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_0" + originalName: + pivot: {x: 0.45, y: -1.1999999} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 40 + height: 65 + spriteID: 738db465b704f58419ab96b8965d08b2 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_1" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 442 + width: 40 + height: 64 + spriteID: f5bb886f3c2d15740a2672010c7bf9ae + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 442} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_2" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 4 + width: 40 + height: 64 + spriteID: 5bc19ee29a2b8f341b2f7fe6b18c7682 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 4} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_6" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 76 + width: 40 + height: 64 + spriteID: b2239270e8510d245ad599a95c2f0824 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 76} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_8" + originalName: + pivot: {x: 0.45, y: -1.1999999} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 77 + width: 40 + height: 65 + spriteID: d23c086f6719e9a4c9baac3196ffaeab + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 77} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_9" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 148 + width: 40 + height: 64 + spriteID: 6206db5ccf0eed84bbd6365f4703d545 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 148} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_10" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 220 + width: 40 + height: 64 + spriteID: fcb71618a6c7faa49a1fefde7e61f69e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 220} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_14" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 292 + width: 40 + height: 64 + spriteID: 9bb00ecf69837e04c896763a3a626762 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 292} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_16" + originalName: + pivot: {x: 0.45, y: -1.1999999} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 150 + width: 40 + height: 65 + spriteID: 17d303e27b924b644967ae1f6121917a + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 150} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_17" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 364 + width: 40 + height: 64 + spriteID: 073da1ec74f1c6b449a81713c5219557 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 364} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_18" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 436 + width: 40 + height: 64 + spriteID: 81eb9b4d58ebcf04ca1113f9e2d93c39 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 436} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_22" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 4 + width: 40 + height: 64 + spriteID: d7702cb476dc0004385a33bfcac8e940 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 4} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_3" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 76 + width: 40 + height: 64 + spriteID: ab324860ea73bd0488c8935ea368dd5f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 76} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_4" + originalName: + pivot: {x: 0.45, y: -1.1999999} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 223 + width: 40 + height: 65 + spriteID: d86a829cba208e84b8e475325deb6eb7 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 223} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_5" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 148 + width: 40 + height: 64 + spriteID: b19cc41b3641c0c4da22a364796298b7 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 148} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_7" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 220 + width: 40 + height: 64 + spriteID: bf15eb78f94481c47b15d7609fda5335 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 220} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_11" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 292 + width: 40 + height: 64 + spriteID: ab130b80e6085f344877d10c5cede65c + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 292} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_12" + originalName: + pivot: {x: 0.45, y: -1.1999999} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 296 + width: 40 + height: 65 + spriteID: 603232f71294f814da2a2464141d2888 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 296} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_13" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 364 + width: 40 + height: 64 + spriteID: 3bf0a81d799a40444a546bb259bbbde6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 364} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_15" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 436 + width: 40 + height: 64 + spriteID: 60be73fcca817e541855d05c268f9745 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 436} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_19" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 4 + width: 40 + height: 64 + spriteID: e5008c682af541a4aacebd12d5d00b28 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 4} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_20" + originalName: + pivot: {x: 0.45, y: -1.1999999} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 369 + width: 40 + height: 65 + spriteID: 58542e4a5b875504a8fe00c83f223586 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 369} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_21" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 76 + width: 40 + height: 64 + spriteID: a79dd7cf870397844af867692126aefc + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 76} + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_23" + originalName: + pivot: {x: 0.45, y: -1.21875} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 148 + width: 40 + height: 64 + spriteID: 218078d1707690948a084aa3088e241c + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 148} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: 1816812543 + name: "\u8C03\u9152\u59B9\u4FA7\u5934" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_0" + frameIndex: 0 + cellRect: + x: 17 + y: 78 + width: 40 + height: 65 + spriteId: 738db465b704f58419ab96b8965d08b2 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_1" + frameIndex: 1 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: f5bb886f3c2d15740a2672010c7bf9ae + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_2" + frameIndex: 2 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: 5bc19ee29a2b8f341b2f7fe6b18c7682 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_6" + frameIndex: 6 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: b2239270e8510d245ad599a95c2f0824 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_8" + frameIndex: 8 + cellRect: + x: 17 + y: 78 + width: 40 + height: 65 + spriteId: d23c086f6719e9a4c9baac3196ffaeab + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_9" + frameIndex: 9 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: 6206db5ccf0eed84bbd6365f4703d545 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_10" + frameIndex: 10 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: fcb71618a6c7faa49a1fefde7e61f69e + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_14" + frameIndex: 14 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: 9bb00ecf69837e04c896763a3a626762 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_16" + frameIndex: 16 + cellRect: + x: 17 + y: 78 + width: 40 + height: 65 + spriteId: 17d303e27b924b644967ae1f6121917a + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_17" + frameIndex: 17 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: 073da1ec74f1c6b449a81713c5219557 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_18" + frameIndex: 18 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: 81eb9b4d58ebcf04ca1113f9e2d93c39 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_22" + frameIndex: 22 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: d7702cb476dc0004385a33bfcac8e940 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_3" + frameIndex: 3 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: ab324860ea73bd0488c8935ea368dd5f + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_4" + frameIndex: 4 + cellRect: + x: 17 + y: 78 + width: 40 + height: 65 + spriteId: d86a829cba208e84b8e475325deb6eb7 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_5" + frameIndex: 5 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: b19cc41b3641c0c4da22a364796298b7 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_7" + frameIndex: 7 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: bf15eb78f94481c47b15d7609fda5335 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_11" + frameIndex: 11 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: ab130b80e6085f344877d10c5cede65c + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_12" + frameIndex: 12 + cellRect: + x: 17 + y: 78 + width: 40 + height: 65 + spriteId: 603232f71294f814da2a2464141d2888 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_13" + frameIndex: 13 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: 3bf0a81d799a40444a546bb259bbbde6 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_15" + frameIndex: 15 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: 60be73fcca817e541855d05c268f9745 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_19" + frameIndex: 19 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: e5008c682af541a4aacebd12d5d00b28 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_20" + frameIndex: 20 + cellRect: + x: 17 + y: 78 + width: 40 + height: 65 + spriteId: 58542e4a5b875504a8fe00c83f223586 + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_21" + frameIndex: 21 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: a79dd7cf870397844af867692126aefc + - name: "\u8C03\u9152\u59B9\u4FA7\u5934_Frame_23" + frameIndex: 23 + cellRect: + x: 17 + y: 78 + width: 40 + height: 64 + spriteId: 218078d1707690948a084aa3088e241c + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 70, y: 150} diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹俯身动作.aseprite b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹俯身动作.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..ad4c808ab2e50b217b4ac1c2dd0b8d14b10901ab GIT binary patch literal 44599 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 literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹俯身动作.aseprite.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹俯身动作.aseprite.meta new file mode 100644 index 000000000..f9655fc0d --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹俯身动作.aseprite.meta @@ -0,0 +1,1988 @@ +fileFormatVersion: 2 +guid: acffe623ea311c64c97c7b85d7e87ea4 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008903204018758 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_0" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 47 + height: 55 + spriteID: 46da353af0d7a9d479fd6a2da20f0773 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_1" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 114 + y: 4 + width: 47 + height: 54 + spriteID: 39e6f968c2504d3468067319949b4450 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 114, y: 4} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_2" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 334 + y: 4 + width: 47 + height: 53 + spriteID: e8b9bd8fea8e6d8408ee7fca61d8211f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 334, y: 4} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_3" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 114 + y: 66 + width: 47 + height: 54 + spriteID: 7b78d13786280a149b77922416b77cca + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 114, y: 66} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_8" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 67 + width: 47 + height: 55 + spriteID: 9b5014714c84f7948a15dbd3ef847785 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 67} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_9" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 114 + y: 128 + width: 47 + height: 54 + spriteID: fe365f9ab260b0041a17c28113ed7bde + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 114, y: 128} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_10" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 334 + y: 65 + width: 47 + height: 53 + spriteID: 02431301e031ba0448f7ed78640625f5 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 334, y: 65} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_11" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 114 + y: 190 + width: 47 + height: 54 + spriteID: 3b2d97e39036c524da697d10a309719d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 114, y: 190} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_16" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 130 + width: 47 + height: 55 + spriteID: 6e3c2cdac8dce9549ac50012a4c9eaf6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 130} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_17" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 114 + y: 252 + width: 47 + height: 54 + spriteID: 8dc2c63e8bf4fa14189f85fedb52e8b4 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 114, y: 252} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_18" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 334 + y: 126 + width: 47 + height: 53 + spriteID: b524f3f9cdbae0b4785bde243281d53f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 334, y: 126} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_19" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 114 + y: 314 + width: 47 + height: 54 + spriteID: 015e1d3f03e6a38438635b63e0b8bc1d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 114, y: 314} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_24" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 193 + width: 47 + height: 55 + spriteID: b02133572378bad4db7963bb45b2011e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 193} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_25" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 114 + y: 376 + width: 47 + height: 54 + spriteID: 997ab12e24389234bb72ad9270de0ab3 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 114, y: 376} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_26" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 334 + y: 187 + width: 47 + height: 53 + spriteID: 8200f681d1cbecc47a7e267bbc9be5fc + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 334, y: 187} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_27" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 114 + y: 438 + width: 47 + height: 54 + spriteID: c6adbf83150350e489c8df381d2f154f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 114, y: 438} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_32" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 256 + width: 47 + height: 55 + spriteID: 1b2de0974b285e74c9f2d2863312e12d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 256} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_33" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 169 + y: 4 + width: 47 + height: 54 + spriteID: 0cc3e782fff506545a2668c536417675 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 169, y: 4} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_34" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 334 + y: 248 + width: 47 + height: 53 + spriteID: 3def0d4cbb0db1e49ae19d75be4143e4 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 334, y: 248} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_35" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 169 + y: 66 + width: 47 + height: 54 + spriteID: 6e861cf8217a5ad4bbbe9520980ed509 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 169, y: 66} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_40" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 319 + width: 47 + height: 55 + spriteID: a19336d240ea2b040b96d692ed17b028 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 319} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_41" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 169 + y: 128 + width: 47 + height: 54 + spriteID: c86478569ab2d5b45beec044ec532518 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 169, y: 128} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_42" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 334 + y: 309 + width: 47 + height: 53 + spriteID: 4bb076aa2c588484894a88df5fdbefaa + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 334, y: 309} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_43" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 169 + y: 190 + width: 47 + height: 54 + spriteID: 4bc7df14a360ae04c80c4a75ef3ca4e4 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 169, y: 190} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_48" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 382 + width: 47 + height: 55 + spriteID: c9fd456b02b15ea4bbd31a7d2b5d6f23 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 382} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_49" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 169 + y: 252 + width: 47 + height: 54 + spriteID: 89e5dc030d4307b4c9a3f334c855060d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 169, y: 252} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_50" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 334 + y: 370 + width: 47 + height: 53 + spriteID: 5fda07730a07dd045ad4f860988a797d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 334, y: 370} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_51" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 169 + y: 314 + width: 47 + height: 54 + spriteID: 7d8f52db2bd21004a923c0b9f1c579fe + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 169, y: 314} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_56" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 445 + width: 47 + height: 55 + spriteID: 2602adc49e6f34a4dac862dc60932356 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 445} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_57" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 169 + y: 376 + width: 47 + height: 54 + spriteID: 5e8ae1f3a47db114c9f7de18c5423370 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 169, y: 376} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_58" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 334 + y: 431 + width: 47 + height: 53 + spriteID: cf2a3c543a6d8a6418d2229fdf83c0f4 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 334, y: 431} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_59" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 169 + y: 438 + width: 47 + height: 54 + spriteID: 36d3a9a695aead74ba1f8d2b141c906f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 169, y: 438} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_4" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 59 + y: 4 + width: 47 + height: 55 + spriteID: fe9ba65e1054a4649a36e59fbccd7408 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 59, y: 4} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_5" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 224 + y: 4 + width: 47 + height: 54 + spriteID: 2b7ec5ff8bb78a64e8ece20f39576ac1 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 224, y: 4} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_6" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 389 + y: 4 + width: 47 + height: 53 + spriteID: 81b472b4a9919704da32747c98fef1e6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 389, y: 4} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_7" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 224 + y: 66 + width: 47 + height: 54 + spriteID: 5c2e74c185c05314d817754309199aa2 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 224, y: 66} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_12" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 59 + y: 67 + width: 47 + height: 55 + spriteID: 5ddf2d9de99d6e949b657bb7b0df71b5 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 59, y: 67} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_13" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 224 + y: 128 + width: 47 + height: 54 + spriteID: 7900854045f7f0b4a972b5555f7b69f8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 224, y: 128} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_14" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 389 + y: 65 + width: 47 + height: 53 + spriteID: 2361325ce290d2d4e8be13d353465a85 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 389, y: 65} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_15" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 224 + y: 190 + width: 47 + height: 54 + spriteID: 86df0b4fe04ae4347a6e2e32e75dff87 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 224, y: 190} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_20" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 59 + y: 130 + width: 47 + height: 55 + spriteID: 33597f81bb4467346ad9f771c94bc86c + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 59, y: 130} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_21" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 224 + y: 252 + width: 47 + height: 54 + spriteID: 9e01dd5298864ed48a482208f47f4794 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 224, y: 252} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_22" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 389 + y: 126 + width: 47 + height: 53 + spriteID: ba5e7cbce9e2e6e44afd4cda74ce5f34 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 389, y: 126} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_23" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 224 + y: 314 + width: 47 + height: 54 + spriteID: 20d3616afb44bdc48a2d98e249ebf07a + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 224, y: 314} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_28" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 59 + y: 193 + width: 47 + height: 55 + spriteID: d0c610c1decb9d94f9b859fe58d32907 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 59, y: 193} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_29" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 224 + y: 376 + width: 47 + height: 54 + spriteID: 2b9b949be3b00774a9e41188576431a9 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 224, y: 376} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_30" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 389 + y: 187 + width: 47 + height: 53 + spriteID: 3b1e18a53d12e1f4fb552b2443527508 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 389, y: 187} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_31" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 224 + y: 438 + width: 47 + height: 54 + spriteID: 200878988e0161c47b2c55a0492db9ae + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 224, y: 438} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_36" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 59 + y: 256 + width: 47 + height: 55 + spriteID: 7cdab11c6fcd68e4aac4ef77df6a73c8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 59, y: 256} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_37" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 279 + y: 4 + width: 47 + height: 54 + spriteID: bce1154d18a163648b3f061dd4eaf408 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 279, y: 4} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_38" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 389 + y: 248 + width: 47 + height: 53 + spriteID: 029df18b22777e540824c0c2890d252f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 389, y: 248} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_39" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 279 + y: 66 + width: 47 + height: 54 + spriteID: cc76deda13d354e479b0c5f192e19215 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 279, y: 66} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_44" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 59 + y: 319 + width: 47 + height: 55 + spriteID: 2fea3b0d941c40b4da0e457b0d9cabac + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 59, y: 319} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_45" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 279 + y: 128 + width: 47 + height: 54 + spriteID: e3668abcb96e89348a83425a5fc05a97 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 279, y: 128} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_46" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 389 + y: 309 + width: 47 + height: 53 + spriteID: e143f12def2eb37428e2e461da6a9adc + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 389, y: 309} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_47" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 279 + y: 190 + width: 47 + height: 54 + spriteID: f76ab2aef15ebd74aa091df11a24767d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 279, y: 190} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_52" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 59 + y: 382 + width: 47 + height: 55 + spriteID: 6d73412361d823840a0d0c65df617d8b + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 59, y: 382} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_53" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 279 + y: 252 + width: 47 + height: 54 + spriteID: 4ab3da77861aeb9499e97a450b137d01 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 279, y: 252} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_54" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 389 + y: 370 + width: 47 + height: 53 + spriteID: 8af050451d12137408dc9710a4be15e8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 389, y: 370} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_55" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 279 + y: 314 + width: 47 + height: 54 + spriteID: 9f36e558e75f96c49a39405b819737d9 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 279, y: 314} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_60" + originalName: + pivot: {x: 0.3191489, y: -1.4181818} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 59 + y: 445 + width: 47 + height: 55 + spriteID: 03c6ae773ce95af41b9dd509c0487a63 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 59, y: 445} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_61" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 279 + y: 376 + width: 47 + height: 54 + spriteID: 0b83bdef1e299ef4daeeb12ec0287073 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 279, y: 376} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_62" + originalName: + pivot: {x: 0.3191489, y: -1.471698} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 389 + y: 431 + width: 47 + height: 53 + spriteID: 848c89b8d681fee4a90857d4b8b1d9bb + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 389, y: 431} + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_63" + originalName: + pivot: {x: 0.3191489, y: -1.4444443} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 279 + y: 438 + width: 47 + height: 54 + spriteID: 7bc4b571af6dde24aaf52d0ebd7ee1dd + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 279, y: 438} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: -2042203720 + name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_0" + frameIndex: 0 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 46da353af0d7a9d479fd6a2da20f0773 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_1" + frameIndex: 1 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 39e6f968c2504d3468067319949b4450 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_2" + frameIndex: 2 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: e8b9bd8fea8e6d8408ee7fca61d8211f + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_3" + frameIndex: 3 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 7b78d13786280a149b77922416b77cca + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_8" + frameIndex: 8 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 9b5014714c84f7948a15dbd3ef847785 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_9" + frameIndex: 9 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: fe365f9ab260b0041a17c28113ed7bde + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_10" + frameIndex: 10 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 02431301e031ba0448f7ed78640625f5 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_11" + frameIndex: 11 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 3b2d97e39036c524da697d10a309719d + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_16" + frameIndex: 16 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 6e3c2cdac8dce9549ac50012a4c9eaf6 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_17" + frameIndex: 17 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 8dc2c63e8bf4fa14189f85fedb52e8b4 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_18" + frameIndex: 18 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: b524f3f9cdbae0b4785bde243281d53f + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_19" + frameIndex: 19 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 015e1d3f03e6a38438635b63e0b8bc1d + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_24" + frameIndex: 24 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: b02133572378bad4db7963bb45b2011e + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_25" + frameIndex: 25 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 997ab12e24389234bb72ad9270de0ab3 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_26" + frameIndex: 26 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 8200f681d1cbecc47a7e267bbc9be5fc + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_27" + frameIndex: 27 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: c6adbf83150350e489c8df381d2f154f + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_32" + frameIndex: 32 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 1b2de0974b285e74c9f2d2863312e12d + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_33" + frameIndex: 33 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 0cc3e782fff506545a2668c536417675 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_34" + frameIndex: 34 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 3def0d4cbb0db1e49ae19d75be4143e4 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_35" + frameIndex: 35 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 6e861cf8217a5ad4bbbe9520980ed509 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_40" + frameIndex: 40 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: a19336d240ea2b040b96d692ed17b028 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_41" + frameIndex: 41 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: c86478569ab2d5b45beec044ec532518 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_42" + frameIndex: 42 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 4bb076aa2c588484894a88df5fdbefaa + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_43" + frameIndex: 43 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 4bc7df14a360ae04c80c4a75ef3ca4e4 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_48" + frameIndex: 48 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: c9fd456b02b15ea4bbd31a7d2b5d6f23 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_49" + frameIndex: 49 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 89e5dc030d4307b4c9a3f334c855060d + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_50" + frameIndex: 50 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 5fda07730a07dd045ad4f860988a797d + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_51" + frameIndex: 51 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 7d8f52db2bd21004a923c0b9f1c579fe + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_56" + frameIndex: 56 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 2602adc49e6f34a4dac862dc60932356 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_57" + frameIndex: 57 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 5e8ae1f3a47db114c9f7de18c5423370 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_58" + frameIndex: 58 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: cf2a3c543a6d8a6418d2229fdf83c0f4 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_59" + frameIndex: 59 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 36d3a9a695aead74ba1f8d2b141c906f + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_4" + frameIndex: 4 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: fe9ba65e1054a4649a36e59fbccd7408 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_5" + frameIndex: 5 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 2b7ec5ff8bb78a64e8ece20f39576ac1 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_6" + frameIndex: 6 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 81b472b4a9919704da32747c98fef1e6 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_7" + frameIndex: 7 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 5c2e74c185c05314d817754309199aa2 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_12" + frameIndex: 12 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 5ddf2d9de99d6e949b657bb7b0df71b5 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_13" + frameIndex: 13 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 7900854045f7f0b4a972b5555f7b69f8 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_14" + frameIndex: 14 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 2361325ce290d2d4e8be13d353465a85 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_15" + frameIndex: 15 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 86df0b4fe04ae4347a6e2e32e75dff87 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_20" + frameIndex: 20 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 33597f81bb4467346ad9f771c94bc86c + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_21" + frameIndex: 21 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 9e01dd5298864ed48a482208f47f4794 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_22" + frameIndex: 22 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: ba5e7cbce9e2e6e44afd4cda74ce5f34 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_23" + frameIndex: 23 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 20d3616afb44bdc48a2d98e249ebf07a + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_28" + frameIndex: 28 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: d0c610c1decb9d94f9b859fe58d32907 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_29" + frameIndex: 29 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 2b9b949be3b00774a9e41188576431a9 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_30" + frameIndex: 30 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 3b1e18a53d12e1f4fb552b2443527508 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_31" + frameIndex: 31 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 200878988e0161c47b2c55a0492db9ae + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_36" + frameIndex: 36 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 7cdab11c6fcd68e4aac4ef77df6a73c8 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_37" + frameIndex: 37 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: bce1154d18a163648b3f061dd4eaf408 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_38" + frameIndex: 38 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 029df18b22777e540824c0c2890d252f + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_39" + frameIndex: 39 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: cc76deda13d354e479b0c5f192e19215 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_44" + frameIndex: 44 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 2fea3b0d941c40b4da0e457b0d9cabac + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_45" + frameIndex: 45 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: e3668abcb96e89348a83425a5fc05a97 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_46" + frameIndex: 46 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: e143f12def2eb37428e2e461da6a9adc + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_47" + frameIndex: 47 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: f76ab2aef15ebd74aa091df11a24767d + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_52" + frameIndex: 52 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 6d73412361d823840a0d0c65df617d8b + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_53" + frameIndex: 53 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 4ab3da77861aeb9499e97a450b137d01 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_54" + frameIndex: 54 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 8af050451d12137408dc9710a4be15e8 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_55" + frameIndex: 55 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 9f36e558e75f96c49a39405b819737d9 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_60" + frameIndex: 60 + cellRect: + x: 20 + y: 78 + width: 47 + height: 55 + spriteId: 03c6ae773ce95af41b9dd509c0487a63 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_61" + frameIndex: 61 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 0b83bdef1e299ef4daeeb12ec0287073 + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_62" + frameIndex: 62 + cellRect: + x: 20 + y: 78 + width: 47 + height: 53 + spriteId: 848c89b8d681fee4a90857d4b8b1d9bb + - name: "\u8C03\u9152\u59B9\u4FEF\u8EAB\u52A8\u4F5C_Frame_63" + frameIndex: 63 + cellRect: + x: 20 + y: 78 + width: 47 + height: 54 + spriteId: 7bc4b571af6dde24aaf52d0ebd7ee1dd + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 70, y: 150} diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹呼吸动画.aseprite b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹呼吸动画.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..08cafe4d7247e9cefcc5368ba6d04af2637ec683 GIT binary patch literal 105618 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 literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹呼吸动画.aseprite.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹呼吸动画.aseprite.meta new file mode 100644 index 000000000..81f29ed68 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹呼吸动画.aseprite.meta @@ -0,0 +1,2257 @@ +fileFormatVersion: 2 +guid: 395dd687f0870f34fa9f872529f0aaab +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: IDLE + second: {fileID: 7400000, guid: dd0bba28ebaa08c4db033fd651fdd823, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\xE5\x81\x87\xE7\xAC\x91" + second: {fileID: 7400000, guid: b81dcd2d34c627345b1ec1785fbf61b0, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\xE5\x90\x8C\xE6\x83\N\xE8\x81\x86\xE5\x90\xAC" + second: {fileID: 7400000, guid: 222800ceb3012e5418eda2167d7fd864, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\xE6\x97\_\xE8\xAF\xAD" + second: {fileID: 7400000, guid: 69fbd74b9449eb248b69ec1f9ecc560c, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\xE6\xAD\xAA\xE5\x98\xB4\xE7\xAC\x91" + second: {fileID: 7400000, guid: 42f2639a0b7f2cd47aa624c8427454b2, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\xE6\xAD\xAA\xE5\x98\xB4\xE8\x8B\xA6\xE7\xAC\x91" + second: {fileID: 7400000, guid: 2db9f5f77b68a8e4ca87a18ade8d30f0, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\xE7\x9C\xAF\xE7\x9C\xBC\xE6\xAD\xAA\xE5\x98\xB4\xE7\xAC\x91" + second: {fileID: 7400000, guid: 88e1aad1890261848b9b0f066e3e4448, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\xE8\x81\x86\xE5\x90\xAC" + second: {fileID: 7400000, guid: b3edc7e720e26fa4b936dc934e745aed, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\xE9\x9A\xBE\xE8\xBF\x87" + second: {fileID: 7400000, guid: 9dac2869953ae50428407252ccd523af, type: 2} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008906510305932 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_0" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 40 + height: 69 + spriteID: 307d7fba3a0e10f4281e9373ab2d8803 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_1" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 389 + width: 40 + height: 68 + spriteID: 1de26d8b1ed4d7f478617d74c704d803 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 389} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_2" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 465 + width: 40 + height: 68 + spriteID: 54b3cfdf2bfba5648997ac54f6a7d88d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 465} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_3" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 541 + width: 40 + height: 68 + spriteID: 438ef1a2fb0370e439ad70ca173527b9 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 541} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_4" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 81 + width: 40 + height: 69 + spriteID: 3b307e663e4576742a1a0a813e9ac5ab + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 81} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_5" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 617 + width: 40 + height: 68 + spriteID: 70499aeb8500f9f4a8dd333b69c45aa3 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 617} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_6" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 693 + width: 40 + height: 68 + spriteID: c3d731bbfb50e9f47bc6f3d46127f61d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 693} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_7" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 769 + width: 40 + height: 68 + spriteID: 97cdbadec9c2407408b651b97eef004d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 769} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_8" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 158 + width: 40 + height: 69 + spriteID: 02cb3cee28b6c8a4ab72dd52c9d60a43 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 158} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_9" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 845 + width: 40 + height: 68 + spriteID: 7e5470589a4e88c4ea575425d67565f6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 845} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_10" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 921 + width: 40 + height: 68 + spriteID: e8aeb4a7d02365b4680b459f199749c3 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 921} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_11" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 4 + width: 40 + height: 68 + spriteID: 11725ad3da0c3e541b3969b918f69ab8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 4} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_12" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 235 + width: 40 + height: 69 + spriteID: 1c34cd4649345d74aa0e77d113304935 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 235} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_13" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 80 + width: 40 + height: 68 + spriteID: 42947b9c1d5d26d4c8ea7413a721696d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 80} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_14" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 156 + width: 40 + height: 68 + spriteID: 5d3117f78654d964f8f868ef37d1ab87 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 156} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_15" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 232 + width: 40 + height: 68 + spriteID: 5cc60862b1dfe624c80570f4946482b8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 232} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_16" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 312 + width: 40 + height: 69 + spriteID: 372c42a3cab18854eadda1af0dad878a + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 312} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_17" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 308 + width: 40 + height: 68 + spriteID: 3dbcfd1713cc6db429e16cc1b531fd17 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 308} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_18" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 384 + width: 40 + height: 68 + spriteID: 38683e7197b06554284e3c78e5f3a5e3 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 384} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_19" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 460 + width: 40 + height: 68 + spriteID: 7e5e1c3f3c285b44cb4f5607578de259 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 460} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_20" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 389 + width: 40 + height: 69 + spriteID: 1d5cee75f61f03349b4052842e87a30a + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 389} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_21" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 536 + width: 40 + height: 68 + spriteID: 7a9ccbbb8a88af84badb18bfae9cd160 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 536} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_22" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 612 + width: 40 + height: 68 + spriteID: a109fb611f3b44e44a75f88ff848d676 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 612} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_23" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 688 + width: 40 + height: 68 + spriteID: 8f5eb60795a37bb4aaca9edab4acf6cb + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 688} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_24" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 466 + width: 40 + height: 69 + spriteID: 2caf99eb5ef64534fbc8b5ac4f2220b1 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 466} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_25" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 764 + width: 40 + height: 68 + spriteID: 7b8bd32664cd2f746bdbf0286cb9c7e6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 764} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_26" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 840 + width: 40 + height: 68 + spriteID: e1519df8e2b3ad84883b88508cf9e699 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 840} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_27" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 100 + y: 916 + width: 40 + height: 68 + spriteID: 466a32acb8e501b4aa343c492fd147cb + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 100, y: 916} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_28" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 543 + width: 40 + height: 69 + spriteID: d19954cc6856c4a4dbd4cb223e2ce7ef + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 543} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_29" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 4 + width: 40 + height: 68 + spriteID: fdfca5723da89714d8edfcdc261b12ff + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 4} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_30" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 80 + width: 40 + height: 68 + spriteID: 0904b6ad906f46e4faeb8b035a4098db + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 80} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_31" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 156 + width: 40 + height: 68 + spriteID: 6df77c793737c064ea73eb057108ceec + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 156} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_32" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 620 + width: 40 + height: 69 + spriteID: 73cf03d3f3b445c4d97507359ce2c459 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 620} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_33" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 232 + width: 40 + height: 68 + spriteID: 1f695d6875cb77540b59bd26df9e1fc8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 232} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_34" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 308 + width: 40 + height: 68 + spriteID: 495d4e49f14b36b4d818a8042b2053b4 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 308} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_35" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 384 + width: 40 + height: 68 + spriteID: f079283b29681dc48ac5576fa856ee2d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 384} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_36" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 697 + width: 40 + height: 69 + spriteID: 65962932007dee241af68b57b79168a9 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 697} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_37" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 460 + width: 40 + height: 68 + spriteID: eef9893c42cd15b4097f8a436fec84f5 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 460} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_38" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 536 + width: 40 + height: 68 + spriteID: 78a74a44e06f7db43ac7598f9d801932 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 536} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_39" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 612 + width: 40 + height: 68 + spriteID: 64d594b85c8289d40880d8ebe3731718 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 612} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_40" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 774 + width: 40 + height: 69 + spriteID: 96abdb5ac0eaff34e90e8be79b845a9b + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 774} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_41" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 688 + width: 40 + height: 68 + spriteID: 70b93d9cb57cbc74585480e1baaa8695 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 688} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_42" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 764 + width: 40 + height: 68 + spriteID: 7b8af52d927c351418fff665ddee07ac + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 764} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_43" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 840 + width: 40 + height: 68 + spriteID: e16ebd66e992ffb429612fb7b49ffeba + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 840} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_44" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 851 + width: 40 + height: 69 + spriteID: 6ec85efa30ff66946836be5291f7cf56 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 851} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_45" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 148 + y: 916 + width: 40 + height: 68 + spriteID: 3d8d7873518725140b83eb7a3a871391 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 148, y: 916} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_46" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 4 + width: 40 + height: 68 + spriteID: e9bf94e9a1ee7dc48a8a4514e08bb505 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 4} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_47" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 80 + width: 40 + height: 68 + spriteID: 62e6a05daecb192488fa4acf58a93ce8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 80} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_48" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 928 + width: 40 + height: 69 + spriteID: 3f64057f039a81141894426e80d2d408 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 928} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_49" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 156 + width: 40 + height: 68 + spriteID: e6e2ded049f540342a1fccf11bd8143f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 156} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_50" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 232 + width: 40 + height: 68 + spriteID: d11da6d447202c14a9960a7264f445b0 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 232} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_51" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 308 + width: 40 + height: 68 + spriteID: d6951dab1142b5941b5ff89a773946e0 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 308} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_52" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 4 + width: 40 + height: 69 + spriteID: 4a11924a53accc24f85573ebe6eb8768 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 4} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_53" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 384 + width: 40 + height: 68 + spriteID: f4d8bf45b369f6245a0112005c662914 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 384} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_54" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 460 + width: 40 + height: 68 + spriteID: c67e5a693ead5314caaf33c1861585e7 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 460} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_55" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 536 + width: 40 + height: 68 + spriteID: d74ec657f08b1314bbf9bb7e2c47f38d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 536} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_56" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 81 + width: 40 + height: 69 + spriteID: 534c055c7c73ac642966003ecdfc2a32 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 81} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_57" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 612 + width: 40 + height: 68 + spriteID: 55fc1a65156c5dc4ab30e418d395a2d2 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 612} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_58" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 688 + width: 40 + height: 68 + spriteID: 1205b85c2891d8e429c4ce6b79bb1fe9 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 688} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_59" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 764 + width: 40 + height: 68 + spriteID: 09adee13561f9be4ba6883047c561f0a + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 764} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_60" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 158 + width: 40 + height: 69 + spriteID: 7206aed963713104987cb92165f51c64 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 158} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_61" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 840 + width: 40 + height: 68 + spriteID: 17df1dd7bbedc8646b8556e4aca7b8f4 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 840} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_62" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 196 + y: 916 + width: 40 + height: 68 + spriteID: db446fe355d84a8419e0f73d3aa73b5c + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 196, y: 916} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_63" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 244 + y: 4 + width: 40 + height: 68 + spriteID: 68cced9102a951749838241454bd6ae9 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 244, y: 4} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_64" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 235 + width: 40 + height: 69 + spriteID: 3ed647eaa8f09174dacac07b90577639 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 235} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_65" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 244 + y: 80 + width: 40 + height: 68 + spriteID: deed7bc561b4b954a9405a43690ac72c + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 244, y: 80} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_66" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 244 + y: 156 + width: 40 + height: 68 + spriteID: ad57b89b854cb1042a65af5de5b070b9 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 244, y: 156} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_67" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 244 + y: 232 + width: 40 + height: 68 + spriteID: c4e7a4a920c632b48ac436ac77168483 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 244, y: 232} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_68" + originalName: + pivot: {x: 0.45, y: -1.115942} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 52 + y: 312 + width: 40 + height: 69 + spriteID: 4a35014fdea513e4283d3505647a788e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 52, y: 312} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_69" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 244 + y: 308 + width: 40 + height: 68 + spriteID: cd50e7598aab5e54bb81ab74a0723985 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 244, y: 308} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_70" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 244 + y: 384 + width: 40 + height: 68 + spriteID: c9a77927cc536b4448e91e99a71a411e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 244, y: 384} + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_71" + originalName: + pivot: {x: 0.45, y: -1.132353} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 244 + y: 460 + width: 40 + height: 68 + spriteID: 3eb2d298daa651b4dab6b834faebb633 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 244, y: 460} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: -2015011281 + name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_0" + frameIndex: 0 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 307d7fba3a0e10f4281e9373ab2d8803 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_1" + frameIndex: 1 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 1de26d8b1ed4d7f478617d74c704d803 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_2" + frameIndex: 2 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 54b3cfdf2bfba5648997ac54f6a7d88d + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_3" + frameIndex: 3 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 438ef1a2fb0370e439ad70ca173527b9 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_4" + frameIndex: 4 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 3b307e663e4576742a1a0a813e9ac5ab + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_5" + frameIndex: 5 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 70499aeb8500f9f4a8dd333b69c45aa3 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_6" + frameIndex: 6 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: c3d731bbfb50e9f47bc6f3d46127f61d + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_7" + frameIndex: 7 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 97cdbadec9c2407408b651b97eef004d + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_8" + frameIndex: 8 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 02cb3cee28b6c8a4ab72dd52c9d60a43 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_9" + frameIndex: 9 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 7e5470589a4e88c4ea575425d67565f6 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_10" + frameIndex: 10 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: e8aeb4a7d02365b4680b459f199749c3 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_11" + frameIndex: 11 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 11725ad3da0c3e541b3969b918f69ab8 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_12" + frameIndex: 12 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 1c34cd4649345d74aa0e77d113304935 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_13" + frameIndex: 13 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 42947b9c1d5d26d4c8ea7413a721696d + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_14" + frameIndex: 14 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 5d3117f78654d964f8f868ef37d1ab87 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_15" + frameIndex: 15 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 5cc60862b1dfe624c80570f4946482b8 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_16" + frameIndex: 16 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 372c42a3cab18854eadda1af0dad878a + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_17" + frameIndex: 17 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 3dbcfd1713cc6db429e16cc1b531fd17 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_18" + frameIndex: 18 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 38683e7197b06554284e3c78e5f3a5e3 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_19" + frameIndex: 19 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 7e5e1c3f3c285b44cb4f5607578de259 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_20" + frameIndex: 20 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 1d5cee75f61f03349b4052842e87a30a + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_21" + frameIndex: 21 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 7a9ccbbb8a88af84badb18bfae9cd160 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_22" + frameIndex: 22 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: a109fb611f3b44e44a75f88ff848d676 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_23" + frameIndex: 23 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 8f5eb60795a37bb4aaca9edab4acf6cb + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_24" + frameIndex: 24 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 2caf99eb5ef64534fbc8b5ac4f2220b1 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_25" + frameIndex: 25 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 7b8bd32664cd2f746bdbf0286cb9c7e6 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_26" + frameIndex: 26 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: e1519df8e2b3ad84883b88508cf9e699 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_27" + frameIndex: 27 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 466a32acb8e501b4aa343c492fd147cb + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_28" + frameIndex: 28 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: d19954cc6856c4a4dbd4cb223e2ce7ef + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_29" + frameIndex: 29 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: fdfca5723da89714d8edfcdc261b12ff + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_30" + frameIndex: 30 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 0904b6ad906f46e4faeb8b035a4098db + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_31" + frameIndex: 31 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 6df77c793737c064ea73eb057108ceec + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_32" + frameIndex: 32 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 73cf03d3f3b445c4d97507359ce2c459 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_33" + frameIndex: 33 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 1f695d6875cb77540b59bd26df9e1fc8 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_34" + frameIndex: 34 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 495d4e49f14b36b4d818a8042b2053b4 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_35" + frameIndex: 35 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: f079283b29681dc48ac5576fa856ee2d + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_36" + frameIndex: 36 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 65962932007dee241af68b57b79168a9 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_37" + frameIndex: 37 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: eef9893c42cd15b4097f8a436fec84f5 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_38" + frameIndex: 38 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 78a74a44e06f7db43ac7598f9d801932 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_39" + frameIndex: 39 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 64d594b85c8289d40880d8ebe3731718 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_40" + frameIndex: 40 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 96abdb5ac0eaff34e90e8be79b845a9b + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_41" + frameIndex: 41 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 70b93d9cb57cbc74585480e1baaa8695 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_42" + frameIndex: 42 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 7b8af52d927c351418fff665ddee07ac + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_43" + frameIndex: 43 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: e16ebd66e992ffb429612fb7b49ffeba + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_44" + frameIndex: 44 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 6ec85efa30ff66946836be5291f7cf56 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_45" + frameIndex: 45 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 3d8d7873518725140b83eb7a3a871391 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_46" + frameIndex: 46 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: e9bf94e9a1ee7dc48a8a4514e08bb505 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_47" + frameIndex: 47 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 62e6a05daecb192488fa4acf58a93ce8 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_48" + frameIndex: 48 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 3f64057f039a81141894426e80d2d408 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_49" + frameIndex: 49 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: e6e2ded049f540342a1fccf11bd8143f + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_50" + frameIndex: 50 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: d11da6d447202c14a9960a7264f445b0 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_51" + frameIndex: 51 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: d6951dab1142b5941b5ff89a773946e0 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_52" + frameIndex: 52 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 4a11924a53accc24f85573ebe6eb8768 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_53" + frameIndex: 53 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: f4d8bf45b369f6245a0112005c662914 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_54" + frameIndex: 54 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: c67e5a693ead5314caaf33c1861585e7 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_55" + frameIndex: 55 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: d74ec657f08b1314bbf9bb7e2c47f38d + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_56" + frameIndex: 56 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 534c055c7c73ac642966003ecdfc2a32 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_57" + frameIndex: 57 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 55fc1a65156c5dc4ab30e418d395a2d2 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_58" + frameIndex: 58 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 1205b85c2891d8e429c4ce6b79bb1fe9 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_59" + frameIndex: 59 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 09adee13561f9be4ba6883047c561f0a + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_60" + frameIndex: 60 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 7206aed963713104987cb92165f51c64 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_61" + frameIndex: 61 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 17df1dd7bbedc8646b8556e4aca7b8f4 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_62" + frameIndex: 62 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: db446fe355d84a8419e0f73d3aa73b5c + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_63" + frameIndex: 63 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 68cced9102a951749838241454bd6ae9 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_64" + frameIndex: 64 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 3ed647eaa8f09174dacac07b90577639 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_65" + frameIndex: 65 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: deed7bc561b4b954a9405a43690ac72c + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_66" + frameIndex: 66 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: ad57b89b854cb1042a65af5de5b070b9 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_67" + frameIndex: 67 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: c4e7a4a920c632b48ac436ac77168483 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_68" + frameIndex: 68 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 4a35014fdea513e4283d3505647a788e + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_69" + frameIndex: 69 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: cd50e7598aab5e54bb81ab74a0723985 + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_70" + frameIndex: 70 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: c9a77927cc536b4448e91e99a71a411e + - name: "\u8C03\u9152\u59B9\u547C\u5438\u52A8\u753B_Frame_71" + frameIndex: 71 + cellRect: + x: 17 + y: 77 + width: 40 + height: 68 + spriteId: 3eb2d298daa651b4dab6b834faebb633 + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 70, y: 150} diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹握手.aseprite b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹握手.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..571ee464e2788516ec37101c3b55624bdec42c54 GIT binary patch literal 16545 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 literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹握手.aseprite.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹握手.aseprite.meta new file mode 100644 index 000000000..535337bbe --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹握手.aseprite.meta @@ -0,0 +1,532 @@ +fileFormatVersion: 2 +guid: ebd90dad5b394f0448ddc0cf2405e823 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008905032422677 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_0" + originalName: + pivot: {x: 0.45, y: -1.1159421} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 160 + y: 4 + width: 40 + height: 69 + spriteID: 73e5734b1f0bdf845a3db6448b58f00e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 160, y: 4} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_1" + originalName: + pivot: {x: 0.40540537, y: -1.1818182} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 160 + y: 81 + width: 37 + height: 66 + spriteID: 4cfc4a0e3ad19c54b9a8df2336b309a0 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 160, y: 81} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_2" + originalName: + pivot: {x: 0.34090906, y: -1.1846154} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 44 + height: 65 + spriteID: f9476b972a36203448ba04043cc576e8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_3" + originalName: + pivot: {x: 0.34090906, y: -1.2031251} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 56 + y: 4 + width: 44 + height: 64 + spriteID: 283ccfc51c958604ea8a85f030d9f85e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 56, y: 4} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_4" + originalName: + pivot: {x: 0.34090906, y: -1.2222223} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 108 + y: 76 + width: 44 + height: 63 + spriteID: a66c767b88cf1f344975a37888e929c5 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 108, y: 76} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_8" + originalName: + pivot: {x: 0.34090906, y: -1.1846154} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 77 + width: 44 + height: 65 + spriteID: 0cbf97be7bb2d0c48b507477ab79c0e2 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 77} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_9" + originalName: + pivot: {x: 0.34090906, y: -1.2031251} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 56 + y: 76 + width: 44 + height: 64 + spriteID: dc88cfa9f8040e544ba26951a2cb7ea6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 56, y: 76} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_10" + originalName: + pivot: {x: 0.34090906, y: -1.2222223} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 108 + y: 147 + width: 44 + height: 63 + spriteID: 88c52977d82e1774f8f03d3c8d29b939 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 108, y: 147} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_5" + originalName: + pivot: {x: 0.34090906, y: -1.2031251} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 56 + y: 148 + width: 44 + height: 64 + spriteID: 64920d0a9c4e11d44a5639de08e048ba + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 56, y: 148} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_6" + originalName: + pivot: {x: 0.34090906, y: -1.1846154} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 150 + width: 44 + height: 65 + spriteID: 07bae2a232320c1448a2d73ac7503142 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 150} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_7" + originalName: + pivot: {x: 0.40540537, y: -1.1818182} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 160 + y: 155 + width: 37 + height: 66 + spriteID: 2a3ef40b7f32d6f448fe4ba532d1b521 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 160, y: 155} + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_11" + originalName: + pivot: {x: 0.34090906, y: -1.2031251} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 108 + y: 4 + width: 44 + height: 64 + spriteID: 0417d65d6cd61df458a9c2359acfb43b + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 108, y: 4} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: -1453135014 + name: "\u8C03\u9152\u59B9\u63E1\u624B" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_0" + frameIndex: 0 + cellRect: + x: 17 + y: 77 + width: 40 + height: 69 + spriteId: 73e5734b1f0bdf845a3db6448b58f00e + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_1" + frameIndex: 1 + cellRect: + x: 20 + y: 78 + width: 37 + height: 66 + spriteId: 4cfc4a0e3ad19c54b9a8df2336b309a0 + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_2" + frameIndex: 2 + cellRect: + x: 20 + y: 77 + width: 44 + height: 65 + spriteId: f9476b972a36203448ba04043cc576e8 + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_3" + frameIndex: 3 + cellRect: + x: 20 + y: 77 + width: 44 + height: 64 + spriteId: 283ccfc51c958604ea8a85f030d9f85e + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_4" + frameIndex: 4 + cellRect: + x: 20 + y: 77 + width: 44 + height: 63 + spriteId: a66c767b88cf1f344975a37888e929c5 + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_8" + frameIndex: 8 + cellRect: + x: 20 + y: 77 + width: 44 + height: 65 + spriteId: 0cbf97be7bb2d0c48b507477ab79c0e2 + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_9" + frameIndex: 9 + cellRect: + x: 20 + y: 77 + width: 44 + height: 64 + spriteId: dc88cfa9f8040e544ba26951a2cb7ea6 + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_10" + frameIndex: 10 + cellRect: + x: 20 + y: 77 + width: 44 + height: 63 + spriteId: 88c52977d82e1774f8f03d3c8d29b939 + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_5" + frameIndex: 5 + cellRect: + x: 20 + y: 77 + width: 44 + height: 64 + spriteId: 64920d0a9c4e11d44a5639de08e048ba + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_6" + frameIndex: 6 + cellRect: + x: 20 + y: 77 + width: 44 + height: 65 + spriteId: 07bae2a232320c1448a2d73ac7503142 + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_7" + frameIndex: 7 + cellRect: + x: 20 + y: 78 + width: 37 + height: 66 + spriteId: 2a3ef40b7f32d6f448fe4ba532d1b521 + - name: "\u8C03\u9152\u59B9\u63E1\u624B_Frame_11" + frameIndex: 11 + cellRect: + x: 20 + y: 77 + width: 44 + height: 64 + spriteId: 0417d65d6cd61df458a9c2359acfb43b + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 70, y: 153} diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹摇酒.aseprite b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹摇酒.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..247db557a52a9dca94b8575c7ef29f245668d35a GIT binary patch literal 53354 zcmcG$2Ut@}zxEwENEf6?Rg|K1BvONlVnIMeK{^-#=_S(JRs^K0s7M!4=^(v>6bU^d zCG;XCQUe4Cp}w=+`|R!Wob#UdT<7|}TzdP@tXVU&X3hO`X4V3`Z!p;8$1^Yu*jtz& zj0^^YwSvF@d=6n`P~!h@pI1CE*v=Z=uUhFqE%zBqlU@AV3tUfi#m9G(B9{d4X=Y0mFqFojLfH_!h`yB`mO zl?TIMT*LpQoq7j@F+YXD$}qoO4+k_}9zJ^Hq9i5d>FFtHYlW1AI`r?)|1-niIsfm$ zZ}mw+_5IyE;s51nzqJ7h{~XsKVEb?YV>g$Cv0&I?6w943 zN;Y~Jg-HrHLiYE4yGf@HgPdm|fctaYgBTqDrT-%2G2kmX%GO2@N>;ypM-b`m<^jdP z6Od5Bj=-2<>@aQ^KTHTF3X_1z!p_5#VHaRmU^ieousbkAm>CQSdkAxcxxqYPez3=| z5Lg84IqWqo0hS8;0Ly~q!-`<#uo_qctOeEq`v&WWjld>hv#>?jDr^h3OGZXUL&iwP zM#fDhKz5q!ESW5s0vUqr3fWDv+hm4h7GySLPGs(6eq=#p5o9mP63EiXvd9X_D#;qi z+Q@pyhRCMK=E>H{cE~Bn8OYhm`N)OIrN|Y?FOqAL-yt_8w;^{W_aT2u9!>t1{5^Rt zc^P>Fc?Wqv`6T%w`6dO7f}Vnd;sk{Rg#v{-g${)gg*Am6MF2%O#T$zE6!{cY6ljWG zib;wk3KAtXB^#w6r39riy4@qJM?{XO9=UVG?#SaKZ;#|3`FdpZ z2!WoS{v^F3y)L~i{U7vi=|9uA(ofNo7>+WWVNhoW$*JN5|nJoaw()niAGojay~%^SA| zGskt0dmc|Y{`L404?B-C50WRGr-)~mmz?(u?`>XR-gMqh-c3G!zN>sLeDQoud`tWs z{1^D`_+RnY@y`pe2_OV)1zri%3oHm86TB$sAoy0WS#b3P?}=+C+)t#P=svM~Qsm^_ zlTS_-oE#H6BBUT>E%ZvLQE2s)z$vX$ey4Iy4WFhvt#JC`>A2JA(?nqrVFTe%;d0@h zB3vTZMSMhZL`Fp!Mb$)IMc<3|iBXFwh}nxJi+wvoen$Sx!!wCzFlWin!q3{CO+MQr zP9?4=?j-(R94o;faZ$oUB1d9Ml0)*QhU$`K!KHzg(lbrg`nfHSBf1>&WX_*H>?x zzu|wQS(8CiPcuRD$IUZ0-ELNCk!#)1iq#s`KCSJfU9JPuxvmqdGj>blmg}u*U25H1 zx{11Tw`Feo-A3!N>6zuue+bSLJ{$X(I9?spsYne|Qdv-F7umknMTOx}~a=YOxm z@VKF^VTBQmk-pIb}rea1V?8|S0p^U;^m7wOyR zcf#+n-<1DF|Fi(IfcpWBfkJ^#184uZ`bXyDBaiJLcRi7Q^76?>kU>z@Q@*EvJe>}{ z8k`ft6yg?w4OI?JeMb4r_E~qBTv&YALHL94_6X^SHxYZ0$jJ66nW(o>htby2-7)Z( zl;_mXot_W8PDHl@mQ~6ROQg`0jz8g%tnpXB+`2Cx7>U59vxexju z&>s~(W_>#TDdN+9hEv95=IzYptn*n}*}T~?IpjI+IrF(Dx!>|G=T+oO!#U?&G34E`K)7+M?l7~UQEW0Yz%e2iu6%{cG)`w6j$f=T#f?bPL|&L4U| zMy8R|i!-R1z1gR8jB{^r0=TT7vOjC)HRiu97%$8&x-9N4g)Fl!C#{ICl;AJmJ6G?m z&aSzw9j-?bxCt2>=QbKQZ*7imId1I|!?(G&Gf4_0^p3#}Zr5{x^qA+v1fwX z;KB^4-BAUgu195n-Z%s0(G!ML{Z|`IWT99?1gibcSvjCrWuVwd7P>AAQK%Ld3FxYA zQOs{K7 zKpl0}fco5luAPJL8c;6Y+d#$nF9SW#e-WtYaebi597aI-PG0~jaRN%06@=8B=_=4m zd{BIsLmj9#lNnGW21B4)tkAi-ERf!3&;)A30+nD%uLtzH=p~@n)FCyvsR7jF_D!Is zcW(i;)`8N!Z$c&8-Gyp#H-hq5ncM~Hbzcjp<9(rt_4(Y*~241>rha=nbuJGg-%eO0vD*9vPV!kAvd7A7Jdi1 zgRcysQTkXDx}DlIVflhm-#?( zhCOs{h9`6fivpk$+PtAF?eQZ6+UU;>^h+Q#a{kbPdOp|yx<}zw(7leey8$%HRU2sh zBk1k~IqE{`zck{}9S|pYLE|Ca5xNVRzEJ;v4usB1^M{T`_#lDC23P{Ec>=jC{|{)i zR|Z2Z@Bag8L+ewhS9>F%J{fum^%(jY)B`=ykb}CPL*oWHa&3NSrv^)s~wCGy444jmX+`XXu-P>pcR>6Q2gOJ(8}CcptYZ0 z1MMh=P82tWwn2Y?442fzkk1^@=21waMh1b_q}1i%Ae0{{b{0zd-b z0e}G@0l)xY0001RKd?UVJup3RJg__PIxsqLIj}hJH!wGFHn27DG%z%9Gq5u7F)%T3 zFt9K1E-)@|EwC)`D=;f?DzGW=C@?5+C$J{)B`_s$B(Nj!A}}IwA+R9uA21(q9DFuNS{{BFIpo9JV95f&Na`sc@8SwQ#XE+L* zeNi*}ykfR48y8(LTbGZ^eZl`LC;8t6{b?;~*q=w!KsuM;uf3SRa-9AxCkT(i=E5TW zsx~22vMej1Nw>5@*7Z)kw>WVJXb$CT}L+mt1@4B zRTcigE6^2DVX4PhLQkWhc5@Wf)Z4IELHtmd?_STqsJn7|blNy{q_H<`iNg~;kb5RV z`Ko$zUM1GPB^oXi7#~vf$jfYNPzb;3kHpql1R$h}1@2JDJ-Sa*UwAd(_Eu5MGqtY) zHu$wS8Fi{YE75c%cTZQN1-wm%@*a5fI}(K$t#&hF&EL{3>BY4SlVf$&zM9WH_Viks z{HhqhgU5KH9H(qEVM-h-^K?To7!W^9e>o^ z2r!|L;u4qUP<)k&+}dh7xiE=UJu*NheeVl_D}8~x4vo?O8pC^KZ;sW)A~zxMBqrx@ z?PmYp@TV0auT-Q%DiM$QfkrK5RBgMDX?4kGkwVdTj_vK`^@JVTPJauZD_>MRo*RwE z*XGHdQSz^0Dp6R_%Z`C>Pvk7t4R!hxz z)0k~@l|;v2yUATvwfd|38Kgo5)Q&@@A*mMk`mh&WaODqk3SzwZZak5%K)~c|zHy~5 z_LlMGgVpu4N-IQegZ>j8`N+t6qYsHhrcvt^-lQC=WjUTpr1S%;fPCgT_Uc*w#}lHp zh_+c9DY<$XR3?9n+E=E-dy3N1w~~y#t=1Rbuc|O>&u*=^?dh6ldTLx{I_2L)3Z-U5 zUTs4fp#-8dbB`^Z=)3Bh-BF=<`*@l2NY5v-09`&M5izxK|AVEk??;tu3O>^L-dd5G zBUTLA&Hg)J&0AAXm1C{l6k&2JSE+ z&-3y7erUL%qb^xK$GiDTi(8sV7)|)0Z5v8Gjox|H(WQu%pTi<H@{4OSmakwm`doZ|tE(fq<%8E@^9^ z`~AkC(BZ48U0z17`W3o!6FZ4RmCMVESMbMtMFN}!>P)s#LOapVwi4YJ zznqUV(7+8UZ-(!hPnHvPbacwSADmu~;YAECl?l8F!bgqGJ%8Qly!2^mqf&VYQRK6= z9Ae}1HF`8it)F?x+mAqenM!Q4xaze(xkkJcMAUk6i!lYa)-{o{d3KX8rJCQ@H?nH5 zb{~5?U6PSM&~Pm^aB7>;?kD2{cS=Nl1$ef5cVe4zB)?^{aR1 z4UW;|jV}<)*b```v1H*f@b?&iaZ0m1d1HP zR@<}dvQw{aOVO5H)ID|Yp_1m6hTQ&_qVEMyW|6a!BLwL`0UDYsv%iX zju(%Pz@NaM1Rr@K_$=zP8+F}Oq7-htQck(p+Ek%)aiz9il_;+aA6UX+Fy{UdAvum4 zO?AsovzYpl75<44V&mDIZslHOG=Eo&4K8+<=|RsMeDAvYc@-(;wWXmSDWis^``LA* zCcWU*8oLrN>1ul#p2VUMzXZ)%8;w409!~cpr2!RWCWchWEnmLW>^)YPrSFu}Nt?l~ zKK(~jkl&^5x2_*iG6M8!17=l74tMVsCB?fo55=>4q8<7sY%s`y?3Pynb7ht$rU??1 zE9rj5+8A2SZdb?r2?03$l;KEcM!81O+VsxiQl@qpe7*#~^~Q-aX{o2CB`MJWKiBh# z4JA5vIgp?2}S?yqJP;%THhZ}v$wDK6~d@w#+ zkEq`*73oqm)SYJvf6rL9dSEkKI^oK!y+X6`*jpMd9?0Pk@}fX5DoL)?E_38b6z%pT z922#89+lyf=oaF(SgYwOSnjc+XnDn7Ov8PlrVy9OJndQKYZnoV4Gs$n6Q8_Un5~DS z!I&z0eA0H}ZdwxW_&97C!fCA>lC;XFq!3SKyk?eBe|>k@&6c?IvvRw&G6)=ONt&xJ za*^45GhaoL2%0=-Jzerk#LIM zykEk$^xU4w@>ZSyIr`*oRGLXhZk9$_bGx^8m!+X(?Sam`y|P;1$|X2@>E~Nl2ehhuMb0q zmA5`8?H!N_HFo4Ejg&27C6Thkq_(f;4&u2CH}8t<@_Z zlJ82Nn}i;8{|PRx-zakgM*BYk7aT<+_eUkq*fMOw?d;X}e-TU^Ea@PEA^uB(iT*{f zdVBVZ>@=$ca~6l7_g^j3=EaXm9L*8Zy?pWVZ7OZr%fYAaJ+t^o%R$ZlM36)OQpLX$ z%w?UUuEVq5yI46fxi*PkWy{0UX%6Kauk=aNOurKD;f|blPqPaX64O4+>pWb(G>sY)@sik6QZ}BSu1$9onA5mBUPDs8 zF|qT#(v&bysK6C3%4nQzLIk8Z^@grJSoYO6!A(RphL$oT;C8FyK>>WPF}@-GyE7jA zRm9bbh_z%DS357O083-VeaCow2M!->an^iV-gF|SZ_1S5muBO)y+o9*@hOa_YTw*( zE=o5oc3WsVpb4c4=zxzBA|J+%%z0F3Q|32h_%h*p9E$O@1&Dk78KfSScL7X!0;K6m zNAPeUZBnUbw0|wwEzG+Kz9EF};wdls=}|r6r{GhGOy7Bgu&62I6W%g>`?Y(>>M@GG zt>JxK^{sE6qrM@M2{Y zI?*%;bIDYtz;aTxp#2N7Zv^v5$|5zHu>V}sUnS+1ex3|se58|%%}++SbgC7;U1M{^ zpLt`;vir1Op=1|N%vICgAsS?^PSnGk_K%8Z2WoZkT*MNUJvQ1G4$!(- znsl6A9I=L_Xw7fcL3wjcW@ddo1D>z^S_eCxy~br^P_r}i44KR9{!{KwtAR*hiY|6p z3E`}AcUH0`LopLMtrO{(QTHh|JHU!(d_u!&qs7Nm0J97CD{R12rpadcFZJ2zAwufP zZFda(23jnnMK`7tc6@Lcrp38JM*#;o4SL81F4rxUuR$z+txkeFw(|K|dCw4)d=H#P z(7RF&v{Eq(_8pnNFysE8QHlWtc1ZtxA9NU<^P#2{y=w3Iusbc^b`8R}C;S4*^oq9E zp;vPtGV#HFCle#=#4j>^VKQ4u*%gRC+#gswRCx71^P+yJX3UeM^}x4AEIe_%Cw4U& zM7gNaE!Y`M|1djX1B=*~r@a&ZBGdy=Hbkgve-rBW1?QPx3(m1YwTFEcT-2*56o*N~ z`)jV>w3W^r*-E;R^X$p9M`!McZqp3^xJ4=Qanj;q8tsqC_k!m+zNUTGYPj<4%FlOT zj`ibYQq5x#74Mb(mnI2Pp7N_NN8|8ydn;W;kxKoX@nt+_!ZacwQKD3WZ^$s4f0x=S zuZZz`mCXZlEPX+~5?*`7PBnq=dNg`V;O5CUc*2igQ!UpO(%yLA5Poxavx}b(^AvYC z{cF(tnDXGgIQf}g6T5is9&5Au%pZMqbKL60But_%szaOCU^&rl*8Ujx)H!6Pz-QO9 z#;x%-Cbs6d-)-c6*U zs*s67iw$a@RPllib6hTUoVTq-$KLs6tTK=8m zp-SEdruB!X!jzJ$sEgUKms6YX_4sz-65QMZzseI@qPDbh>`~;yQS&qIp}6k_dV0ay zW)TT)_Zg1O_VC~z#-(1*QQA}$p7E0jbTU@RtBLGiXnuq+R(Za7IZ!SXcSSLTNle<2{ z?Jn+$V9lhF+sou!kBW{K-u;+Z{=F4t{N>U2<}q83+zoE^UE z80fg7u~1S;P2_eT%pwkVO5cwu&2F_#TTV-f_O8Rt6|d&1)Hj9x@uF4~?d~=Hn7KY< z4DotSC(17PMc$UFsZjsDnGH9bqB_D^ax-a|xxdw)pK!E$UNs~lCNF>+*&1$7P*{sh zvWG8tm!8;>@fj#mtnr$eB1?mJj78gLjxR6VBkqY+88##sjvJr0(}zuj6Z^Lk)&DQ{&N6JwtI-Q3PA$W<=SH-zY3 zv$~K?=$^?>3(cEa@_KaGAil8fZ{#%@g0m9oR!tm9RPHdV&n<9&lzUdC;JCz!4t~6$ zB|G;->fG&)&S!As{(FIpEqM%A70z!wGQrs6N5w>4mVTZ73s!BpkR37}njvTj=)HG) zoU=~Ndw$EXWR`okEepKXp&M0ZlYW3u7ASrr|7p~w4jy@y&};hGt*@YCo_nfM29dZ( z4BgCM&2^vaO%xj1cHML@GY~P(c{J=fLMX5Pa}BtNeY2j~8z#e!`Vl}-f!2VX*!jJx zs+YgkfcAIhFUR9bFnA^U_}<2a!YDPc^~G72oixg{-tJvU_zA57NuJB&)8g5W7LIpn zo3QyGMP9+nr`or-?H|KNM)52s>SO09ON=vOv3x0-^*6PSDS1oSwTH>vd3DvfCfzhZ zcp008mjNrl%Hokm+gUOF9IyiPK74@d4W`f)*-2DXk!mOTYR$2sGL&j3=5hfLeTM$T>-{f~Piz4S9j!faTo>$d1$HH69LCc79VDFl4q z7qGh}w325e-^ZBVT`+ff)pNlk#4T}M++sSvRYlRY3dt(#gQU}TVsoDgQky$B(b{^g z%)G``jv2#{5v=6CcT&x3i&sFoUvHwr@kP%TEg`rwg{`G2RKqvv8PPMwszJl!eb+67 zrG-$U#3ZAlGR`}WxO(wGGN!qVob6^e01ZsD`u?#uZ8 zZ~&$(vh?6+@25j7DX({>{b=16?hVMM7}xTm=R`aj?XdkapENLS?lmMmv{$FWgJ8W~ z%hp!pxSWv}=Bd8gSFR#Ar~4Yo1a*6IW%u!-Ywp?d@}ZpF=AA8Xmyz`ia*c*9v?3VI zD;izNxXaaPCU4}k@1nAhRDefos%F)ed5yn#bmJ#UY_25lhLG_l!l$m!Z=m#}QpXIc zIN2<4(zWkZaqBbpz~Uq^R^JfEM!K^M zrPYK)CmvT%(k$*aF2l`XWNEkz z7CkO^8!O^$nm5el8^e1lyCftfFz4Cf7>P47`c;k&AP1EoIoO9f_8T>hfcLHHq4R-9}n*y(q-vA*E?WtlrDcV*t+n17ADE9@J`|vl*nMv ziVpmN@%;s*W8m?`KO6L?VHZI0{c)-gl+c)NqtA@tCqsijeZPJEdGo?G_QF?p9jH=bgv>9CD7;J0%S! zezRNM*dO~mzkmyq1YV|YKYV1}1IDg~&e*2$u74nLC^MYVL_zcKYfncy<|fl2%)Qai~j z*H1+hnX>shm@F-6B+lZyip3YX@!%;8I*-iI`LGF%KoQx{@+zpLY`5~)g8-Ow%(~LG(#DxAcVJGbUc-{XZAMVCyE@XeF8S06_>23<{w51RP6Jhv~Rt@U;zrI`@psIKp~t?U=%UQEeWK!0EDRj<$J z2Z=f1B|Cw1*|ijE|HRZ7*%OHA2aT#6LaO+;VVFB&H+M#J<1GS3WNYu$vCO`JpN>!2 zjHZnLVB%-wAX;9>eKpC;--o#UiH%E8Y+Ch?dduppoBHuFbmTk{Sdj>^&2<^WE%W-( z+`0hL)Q8F$K6iaJx5{(OyVkpLoN*?6%}XZTiwflu4HUxm&X1MG%GIs*7)RP?i@YpC z{jcQ;T3?EH>Oi)e_|)sn(#aUgXj(qe>g(!G%F}lqOae9;2!!+Bs!9Goa@&HM(x!ELbujfb? zMTddISl`VP69ayIGM6hc2Hmp+Jdb9V9Fwqh@!muJaa?YaR2O^fc%a^TCZ)ko-br7l zb>>pzct4xi!?r#=G1N_@E%Ukk1f)@km}-xx~Ohf ztQM9l%i(vsM$Q-eB9Wx&ox(Ay+5`Ujz`fjXW#=Zc!{xcb^8xR|*$XeD*E>@RL&w&3 zh|LX6r3pTPORBVA#ly*#?IU(+7<7I0oTUgc_fK^1SJqY!s{L4<7CKy6YkORyhC6+X zGxWa2te1gvcG&;1^28K^$W0Z5`y%fbSUbV{^2fvWKX!Bv1P09eZSWXg zgpJAc{zqfC!^tu@L!yB*_BO){o#=*^k=loWpGyZ%aT;5}LQMlr&GV?<@CHTk9itc? z*RLfDHEoIwoIXB1EW4^IK);T{!56Dt@veDCsUwTwffMLUV_7y|+}jS8=t3UW={k+8 zRLMMx%Tdp#T8!94%IwwL?G~aAaK2z}ZBxvU`?GfJ>0{!vm%Q8VQ^Zhq^^N6HJ?<2V z6wHosDsRx?cm!9<7E>^Tha*2L{mNCO8^gjahI>-0Pj4NbX81^hj@T0Yd?6sF@ogEy zneh%BPd`p)!cK-JAYIG#{Mvb`R=Lj#0c~%;AD^teuN^R9rR8aUh>AhG)bL)NiAh3r zY7*!vWGGg|0;NTnW(&C9`(^TG27ElQAYv%?8;~~ndQ#ndm^2BB^(-#yPZ%b#*TtV0 zygY-*4pv(>*SnOj+-3+^mZ5m+8=lrX&wjoCa>@8IvAS9$q}k7}tS&=4Me=2KSNc`q z?6dUPh2jE{?cJIwhY5K2W1N2DJGO^iC4PKt2e+j#|p$Np4%eE*g&!`@wfcGQe{;}^^`D~7Tb$0$;QeaDxB zEPsx|&zz4R+mB&&^g@731*Y8?OsZF}^#`>J?dB+c*o(jDDjl>gW%(@SVl#{DD_PNK zI74T{;T06-@!}1C&0W_z{*z3HNw>!puWTkESFe@`s}>v$%sKN~_QUW{PFrPP{meGz zvmBSWcKw7vU!WL849_u&@sA$~HiA(@e)p<3rw@#$zSISIyPC)c+S5?P zOoZ1D%N+~aIe6G)iM&1W>_(3-#e}RQ>Wk}eYjL?1*XsmXhq#mVY8PC_Ka2l0xi|si z`R#vyYA`eKO4=pNF9uSdTcr`DhFS8{d=>b&nFI4*GlzeLfykdThqnL*x-2cf&m4MA z7AhURB7XYrn zOXDkH^a9nyt**q0?!@!XM5SbpXf?G!D+xwb4->Vr>Y}c5qy^sIxsmfI!D4nRWAnjY z@4?iz0vl%j?tb>(j0Orlj&$p$eVd$J`m$#eXKwCKqk>g5A~YWb+TtbWvO91x^YAVa z6BRSN@pK0xG2sZEx0iX^g`9ySvz3wr@ys}BPd{KUO(XvUcY3uzQ9_0uv953cHmf@_&$w8gi<&gpF z2Ar!54_1Cl_jQ!x0|(on8Dh1=^Wv}%QpG>IBzY?ZWCj1sWr0Sk6Y*US9+cEag`g#P}q_#z6uYINVfTuWl zd0SC<>W6p3+oh}bX=D1m#Fh~t7b@9B?yPfo*;Va z%sj!%!b=PnDNQ=#!qZCxRAm!Q4J+YrjtW8RZ#IMC8{N@;><{b6^rba;76wP+ZzJv<*M25r&_;?tevnoXDz!nssf+uo#3mm$@5%P zW_C!?Iycci7dN8ku$@2cZuBwW^5E^xEF*4Kyg|ysXG6aMuX|Dhr(B#9#=3mM-i+kBTS@X~T~`3I0@kr{r30^nc72n6Kq? z{ykYp7c`*$dh(@qgT^ryjnr)j#6Mm?Ba}b;b>YSLx8DQx z60J&;9^$6HKlWd;U%Xl9`s~F>FX3@umIj}ef0ACuvwdNd%)(-F!rAopR>G^=w$GI5 zvp)`pGos!|$;YMiba2N-U~-xq%i4shKbu>Pysf|e=Fn%W%5BemL^0CcJ4mN&skp^_ zVFvDl;6+Z%4S&Bjsj$#d2Zy`2D+ZM+3psu{!sfRv^{GD9L!%Kj2frUsthI}9u9YYo zZq??Gt-U{5=~~X9dcH@P*fa19IV^e@=-?QgE3Yqk+C{QFu1R!?+v>3CvpLu452J*J z%#jYuKFl4ikCAAG24Pd-&2j-1zG~L#v;LNTGPnn+QB|FCa8m)HmMT&P+HgVVdn=|E z9}#gvs37X0UcJGmq6=j6`AUsz=M{UHUgW=s?Tg`-b*Pz+7Fx`HiALqujuVRLY|vvqgw3nlICJ>PPl zcoVhwSvN+<7&(TzZ0x>L@?zq3LiZJ!1zxw@iMsPi@$q6QCmb66tw|L%U4DIveaow* z#v1YIDNs@ON-L+hB^fjkxGPGp}D;;nKT8@Az#nY+DZb+9@dLi&Kp z@*hYleUcg^wn(4En(pDX?2TvH%l}A39bXKXmUeS0VI^d=9amx!5?73T>#K{L@kXO^ zqjVP-se>$u>sPS0q?w^`)Jgv@gXcn}-($|CztU8d`N3zAq!CF$G<>bocjYq5Hp)G` z$G1Lv=goCP5k=0P9lw;#ac6&#RYGe--=^e`;_-};5S)tF!>UplgPBgNF}W(O4@L(R zl7$LPr*O;icKX z%qdR(+Y2(_@iLlNR~Mf=7OxC8NS!^cZ4kTG9v;s3-;ZwLa0S^GD50UPCu@^4Q|-j{t?158+vPMK(HN480LFl+bfr3{1LdPpLa2IDxQUMpwtTfjIO*Un z#C0X=nK~wEVnQcO-QM0`Oitpy+=(W<%scJIg_^H?uH~PSr^TdRcPqbQ)FDl2)Ec{2 zNLP={j~eO-S{KkU*Fc+$bZ^Sf(!)oJyLeDJdfz#Vrg%r-2ArYfINgbWoPvm+1)_m7 zvnjKP%IB#;m3p-$rYo)YzK2$JN|u7Tg(!GBLt+lSlp%mCjCA{~~1T{SGK;gF? z8*R$e7}5=gfw`RJWTnCLYMymFU{b-S-y+;sE^C%bs=G04vAT1eu8wKTL}*0e>L~X0 z$JvYbhD`8UwOGQ!^wy2RONcHuKP^%(9OZaIprxI>vPc#8vva=qqPa1$m4lEbK2z-9 z8EPYX-gDLPa8Ju__OmPBW?F!Q!)^a@-rE8v`$I|X_BvRZG6h$^s;V--^l{@!74gx) z*q8z&GOkp(B&6Zteoeh+HdC@qTJ28F!^Om8MFR=bu}or;@*qo9NDe)AXqQ?eGAg;r zzkJPbcPWU~Ueck4x;WO<0ht=D8C@{H|54kcFlzB<`Q^ky`P8{+{zot<5_neQ?e z6FtH@Zl|hKtt+{#f!K*yoo~iUwR)sqS2ie{1pq?qa6138|Mh&%JQ7iI7#8hml(# z6yURkjm1Ni%w6hi{Uh@qBzrMYWU$xZ=PeOAWI>de0ew=N6l7y0;>q z+P_HL?H~O}Pk~$-VVA6tLeB@u%oV%k*dXAI85r$o=4F?_LY4QDPZk%AvMc-X<$a^U zbrbg|w#Ikz7a!!uV3+%xwF}G~_;4~#(}Zz@%AOheyhX9Pqdn*9w5GG_bc2Vhwr@B) zwnUfLr}^CIz4U8!0=6) zi`jT$@>nuG88d%%xtua#=zMW;H4-@+5E!_>!s+02s=n4jMIoR9Pt~y)XD=_*Oyd#PA$jp(;+W-Es`DVelo2crz99BeRorrm3&S)i5RRDc$8a@g?b1?PNmT*j z$c!|)%*)M=MJ%;jv-C}?WxG|(75E~-LCcMc^xni)(LtBbvDopTuX+EKz5mYoyFFa5 zL7PmuqvvM-Yy{k)e=bUK;nl_!IKSRVOZ(ofRfR?5#Lh66Zhg6%?@vFa`Lw9RDH6fe zSM((Ex&W@IDtEbeF44~3->$E4kiKqt(UaN|cXFf;QMK*WxwCq>JJ<5f=f^Bd1FEz( zA8~o6>0tN3ZdU!BN>Pu^$l^jV=GxA!Pt(n}VkFe}^LBMK7N+067l;}BaoS#@4e1G6X+A!R5bdv1IuooC9!3S&kZ6#y#WhyJxYwp!mOdpIf3hZ>Yd_s?lFtrC7$xxTBr~HriS;9Kiye! zUF-#XIhh)lle9MkuO2=rfIiY-Vwt0;1YS!1X>S+lASTdpQlLys0H2m$na;ews4UiQ z+p9Ey-pML#1213)?{HNjH0T7%uy361*pG%y$13l%=$AIX7?m`&F_ zkArh-X#$%)nHZ`P$K6d6qpSWNCRN)DDa-@5C~NtzJYTz6R-c8Me{B4oU9@KC9&WM01M(4H{cK&sA6pM=UoDpEQ4^hOsG- z$IgufR@MoV>=y|GQ=8?A}^He8}| zY{x+}Pe_*uh0)5>tU=cj$^6ZWcFR=vh<+8gNBcO{x3Lq4UAQP$Isu%~gN?cqwTLCu zhaBcjpIWoPx$nV`WnOCzZy2tSye8r{dfu+5@orA0_t@)UGs+NV^;>c6LW{B`0W;}6 zb@j7zl0H{&`1^hsC=w0T@~?8r7!O-U35VZdO5CZz*rtHnEo5n{+Ti{{?_t8nfCu!XgyED@V0I1Hl8y846Dz66xSIWB9;+}Lec zNKPY6J*9!~abQwos@12sHFu=rhCVu`mQD28FC&E}e$AO&%jr}(dqiTuoC&cUJ26py zK6D}MwK`o=$NucjDV0=*`ho$w)Tg{eht>H5FlXYUOXZ#3eQFVd5MK7=SK-TICf;dj zQ2ojq>$o+KOp*F{@O685F0rosdw>ZdAP#zBv+laAp1M>0IYK88Oq$pdmBaF0YaXiB zPp`IB$iNW=C3w>ChsD?l*}B>0fc)u?er{%>ftgZob?_;pb}GCIp_ty3zCFX;Tj-h{ z5p7C5GwFu-cidu}vioP}{J^vw05v|hNUeub=$gedwn2{-HQ67a7+e)(%ksqQEFw`b7mra*JCB4>6@8oBXLNGNz{Hb%vJ4U zNyT67dAi_{vRk3M8H?WtoyOBOx1yFH_L}cL=&B52OtY`>m{Q5YN&h%#MVNSUrfy&m zT)HUBY49)}%#r}PX10gN&4=40%UpT(C33 z1JFA)d#^VPF$tRjvdG-AJ{`v>GHm9&6%hW*^`|JG* zWqc;|9i}~JEBvHG{M<~2!;W}-03}H zqHyAozH))a+;%SUqIUCkO%?Za2jiG|WLlSjQq3Np%DMP<@v>Ll=JOwy$CkiP)oPmY zH2wn@{@-BmUr(9-E4WDig3CXX9E-;y{yfK;55ML9d5)dB6-VX-Eo4fZ7y0uXJI769eo9R|wxDaJTWpFn zl?7UO-h#oN#SeGGe_}w$xnN1gmzBv76JdyF_#1V*rwCn@L7OvCr%@orU@7HO_H-vZ z2tVbE4f3lXkMOUtaf7ednB4{?r|1a;Gpx+v@UJo8C-NzHu6Z|O@IjmxIzRf%WA;at zahwYAJSQr@+z=CWTxMX&RyPc^81vM%V737aMU{mP1$WEf;$wA1L+Z-mJQJ~C<#)!5 zS&dQfA^F-`AHH}aZy|i{fl|5U+?yrD3NN&zZ}aT?k&?QcVFk`?z*&S@GnJ1l%5OG@ zxfwCNQGf)b>W3uAN?K?oiA^gA0}u!sABYxntiOye4rTg$V0MfMP9 zxcss+Z7Phy@?L*GE-vX{In4E3_{c|=FSWGBAbX<6#&qTFonnF`s3rta!hSGuieM7r z%XUp`(54rLOTkIiDHmRy8MN>R5R5YVwa%7@# zV|O3_Dl_}{Ri-?UL-CL;w``zq6o8wiP0Ov_1vgafTN0#zhAYEtns_#*EC{qvjPMoO zSQ1L03xlTjhU~i#70X;wkEjfV9A~nhggz6O-CelT?po+NBMJXkXaquBA7id2;Pmw_ zv!j|wWyoM}>dP*sxf@W_SuG%s7_&alTzNTc9r60W(NN_>Zc(8YjRTj%EF8%Zv0J6! zk0P>j?Yz0=8yvnL?U9J_E;SsL-R$AnC}SExJ>=yZGMk9gIUUJs%Sd@wM3aEz*3~`o z6fGvmouoglJZ)X;SDu`b;@*)88cx1v5?t2Fe)UGDKZPC*}#K^Wq!NWxSTBRbu6CU_pvjTX-jcm4;&RfAX=HGbnpBcCF-!g8rq?)f4rzUFcPhTBk z$M5}sm*<@?Lb1&x@CVNX>h9k#h&YmH<`?Y>m zaTMr6%lxAz!C)`p^}2Dz@6Gg$Cm90K0&4)<3t5|M1HtmH2h21(TuCZ%a)^Qx#}|{0 zB@#sXjp^y1f^M}ju(Q?o`kc=@hf}1KyW?|I!tokjBzw$2Q8S5rI{w_cv!^I(@L_db zGvai!9D?2t**8p|n|j&Vp_xTDzdjN^%Z(a69U)#d-2fKGepPES5@IDZ`m4t_^UI?p z$mv@elYHGK$Kn|!x;v7Buti($7NozOe()CISi0q7i^hFUo+=?wCk#>pdWRl$d46u_ zpP(Y`*f2?=qg%(i#7Y%>_l5^(y%agr0r2c_Ix>J;nT5wwgqLV)!JhZSw$|ylQ#%oC zy6on8S@kj+6?@f$psaXy&@rEr?E%6(&edo~jN}M{SRo@+1&Q&Ri4d$WpcSflfzavm z2uyJGFth_z#RG=ai%e|^w?ob+!c^rKA)&rjH-%M1`yExUSVRYsy8_mFiE4i2Zie7^h$YBz{6mB<`G{@^y2G9AD15Rnj{ojSH2*^@|l)1;N2o0~hw z7on70W3Ufnl9ft9fijQxBVH21Q6W3E2ME3!)yu2&z!;G-0EkyB7p2lf=h>I|yFfs8 zl=KWR;i#=}#+qT_z3Zhx$f1>{F}+4cp>5Ft`n0M>*}Q(K$bEfj%SJb|95@sF+t|>` z`qh{Vpdw6hZPKbFAV-*KHNBL*BDtA0hF$qmi}x zRypT_3~FIZlV~|DAE>@ND2DH|Dck)KCw8ln&nNVmu4f$KMG@2sNLTx5rh zoSAjQT;HjL73)#Wg!xc+L0P*MH>t+^d8tx~^V0S*mAAcXjHSFlwAl}I zN%gN={oM2Dep1FS;?^oL@rnZfGUxq*jQuYxy7V23ME_B@l>1gzs^Lf5PTn~h@jb2L zn3-Gp)qlGB?pgNx!`BY3@4azR@`~ztepTt(*JN9e%WXawm7XX)ruh5OeOEl6wkW33 zs^8%C`S7DCw6(TFLWC@i;J2EaH*0oyJ0+tfM%>CEXCDTzs>#B4L2mf*vcWK*ebNR! zsOM(uW2!^b;tm<;exSB<;=Dh z#?_|R-k^i;Q|R{(h;oXspYH`gU(lqAu2|M2DMZaKw{5@7v}0IHvNC?e{4V`36l|MU zs&P*S&0CCa?~Y9d`BZx>wl#Scl>7QQb#u5$&S2YqR#~5x7{m3qd|Ao(sJSOOgCFq+ z6at=ri^Wl7#!z^fnX)cgL_CR95D#3HU^Rj(P!9&B=quX|Z;hDC^l;bME9R>SzRM+> zhW57JvqLah`m%O-R-)11Rs1wflx3|K7HI5_58MsSK(|j#!S`%o-x}4@D(oBA9PaA} zgGIA^Fj5~tcwM=8X75VV**CEg`}?DN&s`R||G7iSv zu4?|AzPq&A_tMQS7S?Njsv*5Lls70|0;?MIhV!)@cSvn$4e8f3mk4B zFIcwtoaY9KEbX36w{35N8Gv0)GW?A3NjZ^5xTOj?Ik|TsS2fHQZq8YrM-Aq{u1Kct z4PLuHdeJ4i_xhM?Ta%*hSbnY@T(N1NGQ_$n)JFidXxeKs=#IZcxk?X>3IsA>+4Kvj zm8XPq=YYOz@VCQ$(#4_$$?i`HHp+e1hn>M~9~MF%MEIU>qSYMl$0>t#i$s)tWWu(l z=k8GroAxh!)_~7mHPd32!*oF>v)&4_DA=po*7_BJ$eZeg(OB%5*6#)0fz$y*2XL@O z^W}tw{BRt23~%PX3Cav~2ZC{lXxCf?KWML&SlsUD=xpAN?+Eq(J#FhE00IH#UXJGe zloRt#xY00i@4x!@;!RRkFNdNzV7=7)2lau&hbmhdKV5D({Z-#%%+5Ty4{lZtC zU%vl4I```O75i^#8KwPyF{9JIVja}^*0jO2(ZL+SC|*zilz``Uq}_;&ti|*&Jd{_#tl0_H2TOcJeMtj0YV(oz9!L&i= zwN!q!@nLB5fTjiAs6JrTiE`V7@KQFJ5{L{NxNxEQBkre!JM1&fYcQrU%n}5hwqi_C z{pd{^&HTH{+aY|4SvWFCt@5#z%nqK~IEv`A-{^Fe1XbHQ938lon$ZklwGkI8)^L+0 zWh61lsGx`AfZ+uJQ^92^-=*cMxbW>y1Masrv`VS#;qqb`YLUL=c0GH8$|6{d@A7i+ zy0(^ObUgENpP?;C&)hd{l5?9FWgl7w@`}N%&lUUCF|a`hl|&VbPszq81YeRqu;D2s zIZka1n3nFRV|a|%{W6K6MNypFCRC9+WL=GZFGS}1IL7UFkhzZh&XVuphm%-JbE+1P>(i@6^r`S}uSBy#oRyd9sgG9l9~_fLnE!)`f->w=(cci`o^q&C+DIr)yn_1gi-$6zkX zE)YT|@ZIy>OBluVFYMS)*drOo>yql5W9Y|i^JOx8ueR*PvFW-83EG6XLHd+nlTotn z^|eA&7=HaKo3VZ|hyD>p>(E#I)aN}e*!-GDqk%0EOAU?5txtSBJw4-hbv1dlT|aHi zTT9^9+>IZL2s8;?AKj~wF5`L}@&vgN zuY~$#v5DVLm;Ux|T>9r4#r|(r*#Fi7c*S{#j%XLYia2WV(){`{f#p}D0{^-ps;Q*> z4VM1acmBH9ME{ZKmHQUrYwG_N{}=ePlVtqzTcr2wZ_a*y8SZ>X%;n7gW{D;Kdy#_Q z=iVXm z7WbpF7j>&oc;K=YR`aaNU_w<`1UQv3o|yO!e$ey+ilZEbJJ|;J(Q`+Y>L0dzk^8<~ z%^HL95X+LgkY!h_0n;15JXiTXbhdwGQhViah|vX5upVa0IieswN`g4M}xE;@{=y*&&esr z=ed>^76MP~5NXV3QN#ILgf_1~q*>PY_M>oMyyo<8q;v4+zT)b@pBXnRb&vbjqftri z9$LMLQ}uA$_>-G2;T5+vr*B#dScHxVtm~s?6xy4DTA0V~5VQL=$|+Dv6JyAw@J*7S zmz7@^k*^--PlR+Dj;Rlv8!svxn@PJ2dV}kKm)eu2t!5XIs!~R=4E_AH80`5vI5UI{ zYpo%X)1@C|ij+C+3}hMWLbnxZEfOkvVI!zsSyZn}MQXKRotZ1?p3st14@G)3z>~%3 z+%>*gRqDD%0_%6ya%7(~eyq*u$ng(?*C)PIIG0jUfaQWy`*X{r#D)h-g0}37dfk)Z zA6ciHl634-A-dkqj_C484$ms&T3R(Dp!+46zmbyh$AXj*MghtO8-sE&1F4A*gF@0> zoGoWI_&=rvOYHp>&$wPTc-^?RJ6p=UKP4eQy*-#q2{czPK8xDzJY9g ziP#CsGinQ{8hyWg6IS<>k+^zBS=^lHMw_#Mp^&Dp2=8TMY&}!oOQC$Grof-ZGN;Gz zDn6;x0TsS$hy7<)65B&4tKdF@)UX3Y`K?nH4i&{8)~Km^Du{YNlQq|K0Vuv1BHELmugw?(o-+rxp636#l!STJt9Sr zr(zi=jCTe>C=gv6MY&hR=qM3Yb92q;+yE%_yv%WD;;ls93FS2Tlvd|1udi^Sylp~O zB8yI82QIxyfMZj!%2>)RfDHXdIiG@Zdvl0fFm~jzC&^wqZVShe`$%LBowX;OY&)&m znwDI>oO;|CzZxtE@WLqf?c-?++=KEbxQe!4(SCS+7`w_M;yC z%Ua!8N|Hgj%X~)`BjG`zcSDmGh0xUWgWgEpohL>mtU)@x&6878 zy1Rs8NBRlM>A;&XYgb@F;qCMg<{kKR-kk^8stMDdk`ytP3aG4GYS0s4mA<$t@RY%} z4PwU7KC{d*<5B$UWoOxs`zIdFXgk5`pu(tr3g|s=fl0YJ&5d#mxHyS?b=2~?LL+C5 zW1@8ZOXU5uPVQ~xcn$dyb+NUcHT+me$(TV@&~ULe{7G<_mm6M=6am84Y1cQbrKDR9 z9+)qdl}2}t-G|XWoi=m^tD(fBl3JyKmap3(S4{%hKT=obKYYr5;56QceInu(E(kFI zUtoUz!qEOa?x}4dD#kcnWcb^0T&NIe8R(g*I-eh#aP%odcDl}#^vI(}sw4^>5N z6R-%62XoW+EDD=0ckvrTcb=Cr7|Ir)&-<_yNjFxnvQiq(vDEbZ2+jLtNs${68FC|_ z0hD)6-adF|0JWAwoCA=0FWEc35qFgB*)nMIX$S+Xknpej!=K5ve2gLdZPTb&OJnEY~=ijhpe&(no zxYSmB=rFeYF)z#BOZuc(k}gJ5gVf!%vENB_sWdn3v~qr&?I$Gn@u0wkVOvUE}uivG2lE}yqLTMkvjaqDQ2v{Q=Zj9sJ`3^ ze?aRwO#ebvQfBUM97Wwl;pvwq>&2lxYY@is&W&OvF<)|?T_5o0vzt|9>dnD3S6LYf zz!0eUn!j6z7rsd|WPW$xRAGO2(O`MU3FG-K1N%Lb1qno}EC3oNZs8-Ff*kLa%9_Q%yu2M4uz<4)!;D_TD}a1xBU`LpAbPEF z;MLW;JmMH}pi~jm)eyl8`Ap=>rHVRm8y{YX7Xi3{+L3nG?JQIHId89}*%9?KJD3Ir zEOJ26gzVaTzX0QmT6ZRhOR68v=@K=@Y_W)XX5v|O2#;c zOW;(NT6Lgbyk@I76KTfCE2r4-Mq&T+M-48`M$42%&E5~SL4N%Bd5h`L?O|Ad}m>^Dj1HwyW6v_BYG-aq- z6$Hj(%HsrJHk;0_%)|tVpN0znrbJ^lu{Uzvn>xg4t08jPZ!jCNr z1N!U?5|wJoAH*5Nd^wO|-+$ZudW~hV3S9*7&TB!>#!uXd@@a3F>|%yuBfBeLEGp^F z4x#K}R@nT^wG~1fz}a=R)9SPvg`BRk{aECac(Q481U;?oJUlf;SMT$|Fw%1=bu^u7 zHRp2_#4w-w2qz(x#z!o zV8&}Wd4?8?zZ!G5M>H!zHvU!rwYwd^U#H(I!wqvcsZ=U7orB0*(tLiV|18lwFsXZ3 zaCM|0RGw4a6$3C)7!Qtrve1JAqX5mbfHJ?kE-^Gcv8?i18w5#Q8|AC27LD0>nS#*j zkzfF((zr^Zm6p#lEr*w8-LwEUu%4JsRdHI)z-)$|Wn1**e72y==v|k$JN)2>nO>xL zT`O=+{1_^4*|xfJ>@Z|r%0PBm0hHf(96q&UEU__cz+TopD>vUColz|SN#jLH;C7Fm zNw*F`5oc&}jk5qX*?C*QYDZEh{vNOFe*MQ?fh@#e!#U{x~F znUu*N*r;eW^O~;M*^|4qBVhI&O#Z4cU;Pdy|D4tPbCilt&+gy7ay0Ur&ig+|D5T3KKy`SGvoQ)OfcHC7;SvT6T9s0!8W z`M@oi4%rc+rIjBF0EVFOf&vQMjgE=b>o49{O(&o6AcjTX>XrM zGk=&Y4OO7>S&h-`bq#xBlxCS?`A^JlR7kLXMvY0Fx}AN1`7XfWBJne{mX!E~fpBZc z;Uqf`TP3rOR}-cDMOs_MHePMSFet<{&<%jQ%E$JP8?T(VN;zfgcfSiO+U%*6sbM^_ zTt0ki7>q9=28@?$Zf-tj7%UA2(i&2|)|WitS3X1QH{5jB_)Y1!5C=(+WIN)54k>FZ zZq{2r(B@##X#rXNeCcUalLe%0Ts4j=k`6|+iPKV0A>i-A3QP}yM&~yYL!~%fiKdjd zBd!%PdF!1_ie}E>%!{JKwqghwG?DAO;d}u-`>>UZ;M{L<^(PUC&$%r+i)6bkO38j1 z(GZ8`s37LbudH6t;HEA4^37{o@E0om*=6$^Oq6Vd>X}+CiG3N2Xazwdy-2O1vMmIZ za@5XzHNa3(b8Y{c2(`P$AG&N;u{%_>JQwVXJssC}&8Ew$=jgKW=8p?SxTa$D9$gMId|`!!rZz4wk9rts zy%?7ZJqq!Rdvzu&VxVLYut&0y3ehY=g&&Xc+wdHjZX5)GR_&nIz{y5~Nh;cgmzFb{ z6ZR8U5m}z37REKzJ}1a^_VeC6A_MlM4#MsO90bvB&0gPfL?Q0_KK85GZm-J$L??Zf zSYUpy!iE~G9LMu53p171Kev4H-?A4sT0>bLw_C0gIqoVaNWfyTdOPfa)m@wL>5>qa zo|-EmGKkCPL8@~yh0Cj#(MuQ5L@_|HU%E4?j=_2PRwRpn3RjssebEIF=dN|PHWyov zRdcnLnp%(eNSo1}0R$tuD$z^1*BHO|_UmCTI!H*evpdMg98M6y2>)6L0|(A8%#%WDd2})w|NOakQEe?!M8|*DUdwdeOBY%`a1%3nPe(QAzIcfg28Rzl z9>4XbmzCRKsNm7g4&vPDNup5etN0|v17k%xah$lAk&01j6mwP!sVEK;QBNoaydh3u zCEmC*$m*CADEgr!v!RK!^sR`<59c z{jI5jg@aP$&+m3LM3d$_ZedfY!25Y(aGENgn8b(=`K98PH!n=y?A`M~f|wCMe1?u4 zWML|FN0VmxWz0DYnA9AsV0m0KEiC>*GcJ_p?PUjtAtOuG4qyb+p;Y>*f|0>GPAD95 zcGnrKneHJnbQ8bi337B)D+wTFQr6|@^)*l1n^jQ^*$-fw_;MNDLZOr?y9;9a`C-#I zT4INEZNues*9WCEv$EUDLHH&Q3$ASXn=)|q4uMQ@g)I{vaje?1U4a-eEJw^HUIx`P zlcErnYor|CN)5&%0Il~zo9j3T&TlW(>SLW8U<;k7gwu+*$t}yR41o>oMEfAb8 zqR#d?AeTgJx&@}j$)Zo$+g9EgMfX{+_Ac}7qol9)(ZjIs_L0oL?IYw^a@HX+&*iyI zVPzk0r~BsoFJR*s0uOeS6gqGQOrr9lj<_*rn<^80t!rK^gxhc5uIg|?fs+J%K)~I% zrlD`AQ2+^3VN1`kx3X-@*A8tbS0vj)?e}i$KPQ&arYcTj)N?46AHbyUZ}t&C-22e@ z9Yf5CH@DL#!M$O=0a*Yr)yb@co2p2gkP|1= zZ42%X+W@UfG-=Op>Xa|7$u=@2#0$Y+kqJ(paxsafOr11YfGAvlQ0mkR6X-}1>5_|? zD4lv@4I9<8&?sVPMc)-S2*rum?D=xKEJ@>D2xQH7fh9|^{}nROe$uyeS!uo0*h@Cm z7us=Khz+JKDU^J8;EhohIz-`wti<%+SMIYi`60iUw^OWhHrf(n^vPz&r6YdWC$9wR zVxKNX9!jtzzG;$h9<4!^_no&2IuZyvsoZfV(T7+! zqRi-o=sPB}>KFSM9)@5G>;*+p_4G3)uNc=CEZda_tX6cJU+^_T{t;z2oe^N_edI>} zlcOHb4Tcl8RQPMd&h|*=^gJF{6pc3v@-{YARNxyGkajC2P)h)|pNDl5+Xb$fF7t4#m!46lc`8@#^y6i5(7`wc*MD$K_A8 z1_c*9qS?9G7y=E^0dU6JEdNntP;D3L(JSMnpKua8vFz`}S-E{vuXs+BB0_XWY3IXV zlqJ7r|JrA-cA|lFDmV&QxG|a1;71&`jp`Um$H^8u3oa+rx24VuCnSV^%*ZYdhBc-F zt!pmFVCRCC*XlnWd)EHD1yV&off8M=iBHewzshxEccfrDj;r%|sOsVAIR`fsazr0m zej#5=_-xrAfnn+dt>{0XZT+G*FWD@Pq3ub|*xOTs_?Bb@W+PG>KF46pY# ze+;h@D2Vy>&il*v<)u$b+vI$?ICVbl@X5nFkIUXf|73MSK=AOdM+L+LSDN2l{=IVc z{LIgnzm^s%4w{-wgdkY#RCJhDk@)55bNE&sZR8EQ6apDl4nywD1&l;gjp$;_*MLY-gVvgm#Jf{K1=Hm<6PG+`o1Aj?va|A>JcF1PQzLwYwNw=8%U z2P?JGpTEVa0)+;>Wbk1uq0jS@{H4|loVL#Pn0LA- zmlef##G`-dfGMKhl;iYu_ zMbo)p6J8l@;{pd^NU36!f-3zj0RFT5p>B55N|RX@P9lQ6G54y|jhEcOcGjQ!5k7dH zJq0IZhm-h*c;r>a##?pnyU?LE6lFZxQGr!H;KfLY$bL-Yv@c{z z4QV>RH3_wB$Yrf0H6ri4; zcc+%`i^^ZUR`ha93N`$UcZ4T3Umf>?>tr!AKdiHa$mce3UYCz``JrvvQ$=;hF39`j zq#CCyu!6_7TZnU)HGD5`1oLapT(0TKIxoN2wGwrPK*vmIXXC70L;YsSqhpi6!4~-Z zGUN^K>*?k<9HgHj(j{vP7@KFuZ0@MZ7Z}Gpm?HGHSX{2&x^reIX#97t)H}+0MK-!w z+JnPAhdher_DQdQy!%7q z^H*tq!_t2S3IBf(tls}3ScvZgOYk4C1o%d5NzDv&bg5N&~icmP`7l zmKI^WfyFjT%o*Z&VukNKTDLP=f_nr|Kw%{Z4kXX-rh@`2e2k?!*I^4+dXkzTzYLco z@b*Slu4WHeyE4{EpRX#O=0Uk)+(l()3_n@cs57-f2F3=F|7KKzH zB<-nXcI>AeB$p5!hajPT-tH$&qTC!KlRm@_M(^E4gsrG0pUE6@F-#*o^6q_C`Nw!i zfqvqd`Qg_{$4Dt2zXD+pxwV-(N*%hLa{8`Lons1r_DVu6z5!WYH?a}U2^$C=)mPXH zFP2TnJQ3BLpQGPg4CkzU9=bO%BDnE+)mMpw0GJ4k_S%L45Tip<8MsqO(G2OmK~KjSZj*JMcODyh13;$T~2R6?EQeUB%Pi|z{g_W53+Mh!1X5l>yx zYW+hhbAapn*aNi)80a@vdmz2}srY5nXC`pY?6}b8XuXD}MbuTlR!A{m=w3_LxM+CJ zI3$qZ3(6heEF~{JT)6$Rt~BX-{C@5$fsaJ$lz^$orIJD3iM?aCPfkB{;QV1i2z>}? zc^DfFxD@nJrfO$<)^( zrqA|-qVFAyjS#2%m~!@98q^SX%;Y9c{02yZ2{nnYYd7Bxhzo%PaWaPUR6iy_C$Rh# zyRlKdF0I9UKG(|7(Q!Oj7~!WrBVM7Y1nm@Ii(Bazoi>cW#l)VodM|ZKi93%D5Z}+eT4`6P%=SftOZ>oJ% z_DTDffr*KMPs_~*_Yvo#)B<7IwGb&|^L#Uc&N+Xx9~mh`W+ z#7D?XR>T1C?U}Yeb|T^pyC_0K0lyzWMwK%pBTkog_!_UIZ&)6Xv1Q$L`i&g=TWw+J zvn}uer1GTD;!}5%*=j$1y9ZvjPT+0i2pKTMD=Yto8E-cLL<@saW z+hk5rY_kmQs`Mf&3tk+EFPekz?lriO|Bfnhwt-Ude+|^Kzk%A{A)l{9#QT5ZKgjow zt5NySt8w6a$fu-4l>chOZ^fOz+g!YO*5dS?#`>#f`+xpg%lO-EJNDPer_JG^gQ6D? zKKV)W>a@}}YPY6Zt3*~kqG> zpIDMQ#nOkpnRrXrwN)9Fn3G|qQo7)4-YistVVz?wtr?Fp+A<1|G@sWU7L7AaoZQeW zX>9m9-j~|Y0d035Y$|~J^d2iK^R~-TCHh9gry>UPr2VO^6S%?!dyrCjpn;bk$Ohu} z1~w?|TVQOb%xWlN_`K6#k%6CZWMDxs!t1d$XizFIh!B;_CNEy3b7=U-pJAbCQdEXc zl#V8)PN}0dqwGNar}l9>d|`FT2D`ax%Dif@gKJb}KIF%BR~?u z_P}M}bRa1fX^yX<4m|=cG`z9ho7tcCQiuED$fsSto&WPd2l3o>a;OUuTUx`9M8AX# z8VYq6j%!Txv3~9rWQ}rJ3u!#981+1PpLR5qero(V2NZ?${z2QlBc z8VUNwRT_G+19}#F);h(v?VG%GwT9^aA-pWPjez714XIBeTJ=n=1U-7<#O6VKkp8sE za;go_maU$VPwjivK;|_FH4wMtUrdy39$#?%KuPfS3B5U4*8KA2@;S%rR^FOysj$_S z#x-1%WRvTh-@(w?9RO(fj_f>+6dam>>r3{wvot1I z6xJz0v1|=vcI@&|U2o}f#GE!n%iVUQID}%WIKI8DS?IGvNJKN-?fW^pRvP2M{CBRv z!Tn79W99|=+KRMqIT=`Gz?LjxXSUG#f*3hOX;S80f&eAl%RPc9q~|mA z+1p1C*XN(cl=J%;8WX!*gRl*P1bEu_08JLk=DkMv)AqYto^we5*;~hS0~+FB8`{DI z(@gwtMGJkq(*-+)oKAR&T@_52m47#*Jt=DIdPb#aUd2Y0E%#;>9$G!Ff7dU`DiMXSuS9ctOKXkqX=8vQPe`uWCkuTAs68vie#Y}4 zrJ9Qu(K7m_ zn$1_k9DJ%fhkAO_E~W&}Rlt9hCWcj(aKgR*3#7i*+P{L7$Um5u(w~ulzd-6g*U?XY zT}O9zI{o!=EaWe*|K1aP_Sc@^-wEkSK1jvyg2vIwHEDzJNm$4hfL#^f17&!77E~?p zAIIVeSE-jX4gECbRAviJ z4IxwqILh=L*P&pVvdqJm=F=^wcD5I#=gAAuB3kLlR4=gHUBFhd1Y;Bk0X6}#^&Y)~ zXzX}dB5t@n%SF^<#wIP=;`Y#cQ_UzLX15ss-Kgc&yQR%F_+QI3@sZ}-Lg}S8g%AUc zj&ZvV-4b9^6;{nbP^zEX3Xo~Xld*UqC}3x&*iNurY0ECD5K+RV($RBw(SzjiH<}Dz zW^hUMY4%$0aQMs@5~QgeyB_FW;;VNP?nCR-r~9BKalsECfWR4*p0<#}da_jRh@-M8M z!2haWvQeezMh}`|j(}e$XP}a_ZYFWG(-_sAx|3wdMC;9&FR4=tZJt3&>}VSNP7$~p zw=p=kr(ZENy7d$F@|-xE`faBI%`{<>95g?yI<Va;FcpC{Gj zxquZ;2lX!`tlB_ZHKbY;=A`_NsWBdAi9(60ES_TR7l_ zL?+xb`Pgaop$@k`wn_#nltN;`GU7&{-jepKyE}{6i|aPL7fe^zjtZ!EZLGus6K}Mc z_(;qtd9a<06Ke>@ZMA*D?MxcH!AUjjQE`7#m?#Ey6Ipn-P-dTmH(vWBDVL_+F4+cG zR(GCUsdVe}-{;;^DazF6PrV3}ToyUOy>MkH-wS|Sm8=Z;{SNJ^KtVK7c}D=zmLs~Z zLTJ~XBTp9aB>TX{+v!0Ci631(ggb*`LU$9(3xQ>e#?O0nnHw+3+v9dGf)?m$?>jYG zs5LjzaS}zwq~phr->9?bh}YODWPQ#%;+_9|qjCAoU0wWxwj)4U^(^T@;_jyl)S~y+ zRW-W+M>;1poiUUGkGm42Vv!VNCw3~#n1rQF#VV;3W4fVwNSr0bFB4=opD4zt(Ey=2 zL*tSnl@7VTCKuh?hI?tY;(IYTdz0s1=$)=z&{Em_pmem7;h~Zd1rPZcV0-E(VUEx_ zvQ>r+)F<|>TDmW~OO~Y0pzw7$L2ur$%UkFnfQJ?ua*P>8_NvAP*)Zf+rC!jqQG;7) zKdRaK#oAnO>kDPt;O0(d7IpI{ii&2{RiPaxy)upi;JNpw)&&C0r2MU>O8yEqcaDCKJ%4?PkN*_I{|Ri~|Cf;dKuvI$8ulhR$j65}>f+Qgimc{V z4Gs?GoH-Ld%5R5tODw&m`?CiYhx+GFgy;{O@EMU_=kq5N&WJ*H$aNV?yhR34LXGB4R(m)G&m4I)I=(PrmBQ=;pm$J~SE&Hq(HYnArJKj*nXGBu$p)a1MjnzY=uYTY=@dQ@xDY%pdh+Y-NvnePcu|HGVvAtpf{m2C*F{ zj{nApLPBRdG`aDyxb)3s55rz;; zrH4n3ODWLktYD;WfZ1@R=DIkBs{N#-)ONVWrpz535{Im1>nSbJca}q;a_wZ+-PJc{ z-Zgy;q&P>UD8tG-8PduB{6CE*4*J&GRKL8`4s3W(YXzFFbV0(bk@JRjSpmZ83$+U8fTSEdqqNBV>KR<9QxP zt#sB(NFiBWM(yFXF#7#`q1>^+*XQGr++*_Q5~ zJwHibc8Z*&@{ZqK!f&c{WTa~|DucE^c#|@>Qb;O$)a!jqlDF_;#-t&n*W`7^%&X;e zaKjJkbKy0K65bLbROflQ>owP@utAc4#luBK_*)jTMxmVL1wTW_U{bsn4F5FdqjAf5y!3#F#DrrRohxzNV z&m{eeyx}Xcz+=H3QstJem5fRCD!q`mK1d|GuiUQ&*<6wSP=>E9>l7W)imzMzXnGCE zT`3GXSGBQwnCV&BQ5}*>h1y;m_hjXSW%(HDS?ZgnOR|h9d{%;yr1NtJc>!5rAsZd7 zXKGo6aHC445R=#zfREkDUjO6V5+m2ViLoPMBt)86qAl0MtB-f~ls*kwZw{lkc~Z_pOBnaB2E zMPa}*;WT-sl*~5*)V9D2k@q$9D3x1GHKxcGQv7Dvt1J#Z-`ohs^hMErzVe1kB(JEO!6Ov zS>z5Ur;T!(o3C4b?PADIEzk@U`hkpHTp`ap%-W5(#6yl_Z=gD>)u?YJr3h%BGbTU>=$2u zd9U(^tw&eo9}buTeVczvPm&63jfN0jS~YcqFFhsb)cusQix|NqH=X8YITml%ZR&dw z3Na~ z26(AXST~1XsZHv^LU}@b=?Ql!e3c@UD4GQA459Xg=Oolwe)I@`oPiT9u(lS|Mpg)q z!wRmz(LyN=(V-qn4;H_;3a$B}g;JvkWU>oj2^m-2b0BvG0W?*msN&H^S9kuBh z*^}YfGo#LF5<4cvPaC2k4RVjG++L-$-Bl zz5Z%60o^BZKqj1{E^uiMh+8#8o^Se>ZAGQG+I>-R=MML1wi42HBGr~JJn@@Xt&X!X za}TaFN`h^Lq;%5t?}c9T`rK)u_#6ooITQ}gx=dN#J0;Yt=%pSg^-4Byp&Tc3Iqq65 z^x5_?9P-)-@vt}UX|dzLG%nvQCCXuq;nmZmnH>QUfxk40VY7XrHW{bt^H zlziuej_BTwPom)g_HEV~4g8;nYh<#Km^;tOv&PV7Yg$!ETZJ*#5C2IhC0xQR@l=$A zF3)iy=*Ps54mA#L-E3FfBq+tXGt`h5Tuc2qGHtqQRPDho5acL*r@G;x4tX)wwJ9Bk zdS4nMWNhtjH+`ZnW5wWtWa6G7IHD_JMFgXxE&kyf68)Wj`Wn~X&%ed~Cv&ceZ_fSW zrK*n!i7!N--{n6Fb3)gi&WYn#Tu~nU{(FHr!i_k{{m1!TtVMZQmW%^ue~{@eQRGefYbnkT?Tin{iK-cvR2x7$dC?ZsTktm+@kkYeJQod zdk6ITA&n-lN8r$BX+H#8Z%?EQ;xEV=L7Pf;3;%YVqtyWI2Wnn14Eu7^gB8{S#_M3^ zVcSM@UOXph|2nsAK>lE-qD(CLbe&6d3{9Z+fCZybwa(}QC+22eshHogQNaNKuK5-i zMBZIN--RyTWgCViG7gl!2iKU?d>lSUI@;j0mX;E@w#|n|w7h;rR&8SCA{*-VuX7Qm ztlzG4BY#}y-eZdg&qLc`m;T*xqRHLz5xp)`EWfW5m) z__iqoG=DMN6O*d0D%u*cY1zd{^)vCQ_Z`R^#K!})gQ|pCCPV@?^%c8=G0?xh(D&k= zvhytKBWtnUGl`))9(B*Le8&rs8;>3gc+rw%G^E;XFz@4i4LXn9xj{_#s`{5W>oUvu za_UDi@k3{oW#g%PYPdFy(WO6BbKj|rE8vbO z*L9fGwr62i;|juR{m-a5+QLwa*M0>xc~q3OgHCQ2=@8rQ-7L`s(VpF}Wz8+j$=G zYXvY#;AW)xSrj}#hL2W5%9$glGN$8!_7pw%)JV-aJBbiSQnN7>Ic1kUa^9keh!_E( z3LH$fb8kam2ekL_a#oP~Wkr_s+=lHIqy*{e_RLU(Eoy4w0bSVwDN{Pt07PbF6oTwO z`aKu?syF7p%Mn&4yAhx31q0nj(0${Bi$ zp>tb5!MHnPNi72{r4mzi12Kc`NG~@JwKK|FE*`Hmc{CppLKN><-9U=gI4KY5gbIZ_ zSwui~D=4!|+@h0@RVQzbG9dXI}#M)em!Kfpf#_q8~!ib;>Kn#k29m|cDE+7=BMW;E-ladZ&s^eendaNK3S!1ECw}&L3=z=UCH&du zs_~KWX-Itn;|OuWw>W%O;4n-US`($qfA6~>%_EDU`?oa6MT8Z?me2De-@H~T`WBMjKKt#AdUyK{-USDEZ9b22J(LrEV zrZXQtST=xNq?$K~$J*#P)NKiPY?ed6tfmESr=rlDH8~=%Wo#(CnLw)s9%DPAc?qtx zoqL)5oCZs_fSzx>j>=D`>?fE7*ZIVUyVJc3Y4+@Pe!@&`&B$2A>gxB?acQ_UVH z@!l5~>p2F^iMN|WeAly>A+W;Hpvq!Oqgr5sd{xL9a#aJq-^DomHazcCy=EO}A}i#i zQOw&Ntn+K>Dp$L_Y-@NzdLqd>Ci8 zwcDWqg4Zv#;gqfA`%!|d>hm*SgDQ2= zT|fPM*VeQB8EiP|QvdX9(kGnE)C9e>#sAD1?uOM~EeWj@NCG>Bse-*Bb3=|qA92`Hasx)BZw_bIIy|H>o;6MtSkMx1x++yT&`wPCF_#6z0K zb!nd=c$+e{;zugJ%3cg}r;Tw%O^J$t+nR_r#c18Y#*eFb#2xLuHrcu(pLn4cqEnl$ zXl$aOM5WRC<>n%yOP&mjr@F>PcR$lDt+DJ=hZfIXaH|e`y*mFsH{Sw1V4?>TSmfmV z<8P%(UAzD?Rd8+j)}?wpiP5ohK;jC?@U^&`j&>*p79Oz2!6$w@x5Xc%+*zT2bsDm) zbbsF*SInGK$f6$QJC1g{b141moATb*%l3#49v2~MdBc8pJxbLsCVU~g35zftPr>6W z#OP}`&yfo#XREF4yLG^GxBJiY7p^H5|-KhZ>i1U)6HVe~l{k~tq`*=LMB4;&U!O3k9X4T(khO5i2E zaBoaH+iSE3^GlA*J>gvBDvWlxh`k@ulR8!i(08wv%VL!q&4k~Q%|TWKO}B8yt=6>G zkHtZ^#_^JR%?3q-2|Wi7*;|EWU0MzAnXXYvEYaD_XS_x*_Qc@bPv^b8s~3k%l9fp% zQ&>N{;=m!cgzPFMQwjolGR$%UzP?<^>g>FF5S(eIHT48`=^ip0WAUl9-IE!_^I{@S_pqG zcmJEQ=|8M@f@YpSUHs3Qo(fw0@Q5k|0*C+z{4G<<{eINu^s&aIq(EnZkAKV;YsP~! z=B8T8##FibWs~=fGy*+=C&NnVPN*^6wfio`!AAZYp5oBp)?x$j;qBr0S@l%Wz{#kL zK9D-wE7(2O6t>MP2c%AFsUtI%OzxX3k1f?upV%{Q6VP{fE+Y*tx>LG$C|(vJhK(7` z8R|v7`sxe}!ObZ!6QHk~;kPt=l~^)aIetwb4Ol?)7@L`MaAd5UU|=eYcBxg(%wc0` z0a$p;59#DodguXMP4{?!X^2N1U@u~P@n}s)8T;0&z>>D)eNljGk#B9?0!?#n*tD-1 zKI^0#&0M}nolIgV$}$Yu=u}ueGc+)#*}-?o-sni0c>Z1wf!v11Lz$KK+c9GxNZv99 zn<<7l+2(Bv)@7OU5x$}hF{(&t{jjfn9IyylBC;EYD~%Tp)HRIEn=lYJUzA39gm5PbL;$x6#)y`>OMppr>x3u145|ZK5obwG15yGQ z{@V9Sqa?D}ztT-I%^PxNeaiWM&XK2FSVjiTj)xTMe!xm=YsPe>36P_&}Eg+rd1cjl%^RG*`X451;wJEWl3)| z6b>z$;g00z*D@NQMR0egLuIEMPKn~>C=07y!H)?Mq&&{Di`3#P|$-d4lQC`J|sRqd*JO;12uJc_HCH^Dr# zaBdled>`3ly^x{(ER#|)`)Mk2Je4HNFSn?G2Rr*{eLzyM#o8ugmY>akpVrNrD zRO)Q#1^&*%@{^{?-pjx{tpmIQUgo9SB}GHc$$Xt63AiC&aOyWo*aOQSG{JmApg-v) zliv~OpY+mx7FyRRa9?D3Sg^SLqX>OJC06_Z=pUIwwf{K2l?NQ&ou^`8%cwDIm6}{2 zy@D5kpiKw?H3ygs!Dz!zXng3rZ?D@y?YYU%bBsy^vkk|}5{K1n^_y8;yUz*PS{eBE z`ZlP{==x!Vp>k>ST|>QxI+}B(Rc@Pe{a>H)yI&n#UmqzZYj$_+u)0Oo$gpWqeuHJ1=|0MqYlvr=eg#9M|uIAT<3aZdI zL-MQQ?=Wy$Z;*{-mT0!OG8vJKXHo2p*)LNE{ecMYpexE}=Brt3hZtBcQmynQ znn53C%Gm(rart3s6d4qP4%wTtJ~?H833wgx0AusodTZZbH$x~wot7oq#|f8mxU z_qnC+Ke?styuxV&N1jI_p~O%V5mw6MLm}ON2)@}5PMF7eHP;5@L<-z1H`NAoP3T@K<36iu^lfU zwymtJhCPJ&ssmaU04u<|kL|tibXYdQ)A!w~LWzL28c!(s+#zwXpP6#Y+wFleHx#Wk z9&;6v{k#ec%@)(6t2s(7$}$=HA4*QnKD0}-Dp~5kHh0x%$!D#<86bFArzbn0kLKgJ zY?VBlJf}&rKMjrL=GD-L6|b-csgi(Z{ReBGxFyC$&Z?DuhTh)in6B?${tvs?e<()( z-!{+8)A^L7_RQ$<_bF_&xDsc5)$fYne=+QS zB^2FV8~s(L=&CKm1&N5==9ZUr7U1f_@Hmg?tZ)bNXnk;s4B(cUT$Kf|MjT^C&*s{y zL94?;(Uo;aOh9p&kXIYK8&B;a&k19(B8f$?+JdvrHiEIZmjDW9et_iAFKYLVzLsba z08-N15MM3PoWL2WQfF3>X*+C0P*8|y5u=o~H*zbi$VgUO+c@D&-uj1@v)z+LbytE- zE?C&)#HrJZIhG?CIyFmzNm?#)a_Y;^z5C9Gwmg-9-cp-_ zRV>W*?hjk=+QqoSM42IA|%S^%BV55VQVcX7a!`B0GMycgtn) zJWew&%!5N$D4}7nhv)=eF=X-e(W#1T8yo(ejm2GuG)#G1C`v7 zsneiv*-flS&TgZ>?v;tpm=|;U=j5eBxhu$*r>wnMBp&L6bNjwrsvPyv4`%Qf1kszMs?I|5H z6>3uK=oq(Ri=C_Tn1iej4h#zv>0zv80cO5 zVyRZZn@2|ABV_$M7G+Rq4%gQEK3JZ!bsOLFxl#+hAa}U5*0Kz)9amFY1823Td&d!u zLNEFUYP*t-YXz3L^{34aA}W!9v61vk-B(z$5QJRW>w*aMK*Q7&T8CT84z4kPuRW^r zpAFQ~);$;cmX|TzXy|ck42939fwcWQ3OJwds z%z9uo>PkRPl`>gRP;;u$*Qi^jVO=0T`|+hepjsRxRRZrU%2iOFXUFNUv+BlIWWy`o3VE4mr zmZB4>orjL0{pMGsF8iewe4~(NKSN!gUBGKtzlq1Y~}N{4(3_asnZ@MKKov~){k^F6psiyz7ildDC}w ziRGG6=zS}umb{N*5b>Q0n+Z2Zs8EkZ&h zZ+sinCpK4e8q_IxhgYtm{WTF#5Bt{=J=Yp-M43Fjr2{cM!#jtoTf@U({Z7eZPJ&Z! zfQFfh5KfA<0e3l#|EZ$Ej}q`uq?aj9n+BNcHNlX$f%}fJzjaA3^T69g(R9kKB&#`aD2EDbXd-gx{deSePESPdvPbi2jBMC zjhX-inIdsdWqz6y#p2ip6*-mZ&fI(b?QV~wVZUZ&5^>cc+ z-os*OU%>JeA3lV}a+Rt~=;)7fu6_QVrB}7FszNgzngj3zy=+d5fl&eHdWp!?00n5y zKD1Y~9*_h`G4}RZP;ggZMZN(fcv8PM&DqL$AsnfEOYYpZ^))~{LZ@)m3FX%}(E7-w zQ+&8MInvG2|KcjBVYhqQKY8Qg{P}`A-%cT*fLqj&XB~L|(rf0@O|2qLRX<Xym38=)VlC>*Nc6(>tD-}_hVSU5FFV5K4P5x1QnBMjr&m1{U2*GJ}p3hts(UN zXLEY}C1K}{<u`pZK^gm>G%3ir-vk)r9X7eys#21*EhH7iPCh2qNnqobj@wgO1g-ekL0Oy$NXd! z+^?_Ry+|9t9um_U4k$ovuGPP-s<>qIwUh_SQbR=&-L}f$bAP((&~YhCK?yCES(f2E z@1jOfDNCQ~Bb-qibeYt-L9y}E{z@~%-z&Wz6Cc9w9f>e6ZE!!3Y8W{=;d#ghaIQ-J zq(oRNvuyccx~SBK!VMqt7ZQmT&L?Tp{&W6}5Km3Lm}HKR$krxb0h_DM6`rTO$@KSP>@p zs&72-^eTfluOKgoIF&cbMKO-&5Mci?AnA>W)n$dvy3zhtlp^AZ#0hWtq-L~3%B1e zAnNo1FN&o-!t@-ajLKED+NsTdKl$(&{^ZQpHu+k^oHVcc8>A|-Ua{bdguO;%&M0)Y zwG;xb979-7_V^vOIVy1#HmB)7dF{r>v)VVNSHmdbot>m|s{*%M2=3l8@wv%eo5(Cd z{=Ck8SE|Z6lEN%a(cpOE^N{+O5Re&TLSn;RtzWt-*uaTu6!@sJP%>>dCD)sv?lacf zWqc!1k)2D0@D}TmRZ^4_)X!RnNojmh=#D&nbFp*nd z|Jp14OsOZ~gJZ&lLM4kt60=~_crus)#Ldn3EH^vN3}bOAg|jCl=vJ^Nc0vLLV!*J* z183`jJwp{SIv#Q$mG*7jR1SdCqT82r6m71HyE7Qo)NtOV-Ebzvp(jZ89Kp&wA=o!N zOvR?)tuo!fbtWPgUhL3!x%j*orYL*rW4Qeg+0dSKj9wBc>tQ(9yGdkfq2rlAIbn~{ z6B3k^?n1Z9aE(4m;coND6E~h6e3LFr51hwuH+HSxZM~qzkBDva&u+C}GE5sEx}Kl{ zZ+Vt>d(>3&#!k@n6x1Gn*TZy?Z^Ezg2m@C-mh+7UZAB7JsBC zp7`5>^6e+|nE#W({Re-N{q>oG1A^Po!5_c z%p4O0Cz?MNPMpllMDYb-AXNxs<1Wff66$D8L!FUP1pGQ?Xyx#%yB+TsixK=`_zoS_ z>u4-y-!ZoOaW~3#XnwnT<*f(_4-Vt``1&nhMDQzHMg}TMSDL)4>y4TbLb64b(P0^8 zs#;3pah%u)61S^?FVPbjRUmQ`cHn_`QPQ z2LfJMb3G45LAOrM-%q4z(;QlBlTA_JxU4h@UMBstdR_sf1xzOor%WtL zk3E3S%G}YnJS@RGy1i3c^%9_3tU%e&B9@HzGQTbhHC)#gg|F>22D1E5-O-1OxGR@F z2R*OI=4G^c_x18mlH=lKnVHsP+M#OuyjNs-v{~y7^OO1^s$PB1HE$=I`ZeV^Mx0}k z3s{<`>1=EjrTxLYignQ}KqzGIK7H`%K}+SWOn`xU-)2+c+5#U8cU``nC)r>U%#!2# zOkuBqJ1M4hp=W4v_b<#=uaRV_Yd6bEP2u{@yu_F6;n*4ltaA^U2_h zz#_1`cQZ=H-*31u%U22>p{@LwR6vpLgZ5SZ6yJD;J=eLAaINQK{8>G$`Os6b-L%0l zB_*Y?h}CX_fq@qC)Z)-;?9TKUENtnvMYww1H4}wt%evbF4{YiK3NfN5uUcu$I$4AiV7$?loPtp~ad1a0l$RMwlqAD^hm7rZu%I^R( z&D^aoj1->9I~;dPpC;~Z9BjSZu_A~xfY{=LeK`SgnV8X|MUFPOG#Nu>@+!?jepb^t zNsv7gb6P1egyi|bP{NLX0@BlmeJ%|rij^E)8VbRm87>$Zl5^6F)RcwPCh`xHj(A8b zAq~_|N^1w9C796xwj=r0gxrLa$$|wkq$#k&?r9R`eriI>JGNE-1N#({+Qsnou!7BE zZ!`GoUb;K5dH3yXzKTbZIAhlxV0DIjjPgXnTB<4hqZI929Hpz52QLCrn1LQM6X~jq zCj;Fj0OJr5d0p*jy;OG;wsL~KEUA?pAz?E26*0MKhM%jVT&AvZrm3m0%D0GjdYT0Y%&#q!YE@3Zf$h-H7B{rxw`zh4n^czo}8@rkx8-=99> zDv%4RM7d^-s*E1_!(Q6HV813$4G;12RU4Z$a|rI=Zz5$O*fhcthm#VyzxzC}{+=A$ z@}{nY=!KiWn|HXDCP%l$XELrnaAa)hUKTjGzTJyI=)JXUu`bDjv!mF9LxyAn`Tj%? z3mHM-8UEezO|>q=itv9C4CMQK1A}~+g_ZTN%U35B5hYrI>(X7R56+v#Na7U`CxAN> zqj0q}3=5AG8h(2WHQMI4WNDy+7_;fbxVBcY?q7HlVGz1pdUXBH*+!gVS3{+J?@}QJ zZ7S23fB~ljBL|EC2Tbs7V zjyo9_n7Z3Y`so;IF;TmC^ZhKj{zKSNn&7Bf+do@&J&H>zZa6GZ8lN~UGP%+EWdy@7 zaBb@`|I!Ry=Z!HIuxHomp5GCkvXg&MU8?`M)-!SMyrrF`d1lPh;kGi56C1~mx%d0! zO6mr8v#h(s6tC@^Qk?#5u#t9KiY>DjoaYt6v?7TM@@;C%gv8ue85yhHg)f|WlebHM zoL6+Ry0gNrGg02ni&wgkL0yDhzAKwZl`Xoli?ho7Wk=6U29tM?v*U!?almx2(wD=X zoG!egGORW$f);c|iC<|D>@A&^Usp)9+9YZ&q*Wc{rDsOL zYJQD$k5Y-e+}clKwjo`0sU0h_xw^{O9XWizU%yWwZq}kgDWX_TO6vS_39=;&{&R?? z73FAcozG`P6!>F8QEEp-L4p4SkUshaCTPjH0F99J(i zhW)YzSrVqJot$q;;;WkLMXiNtw&Do>-7?kdYs%i=Nq32{#l)D_^ z9uXb`-cNT0DPtg|dc+*V6vC)^3{K%e`TN0__!5vQ(9P=bTm-R1WjQ&}QzK%@0z0t; z8`5kg{#>aZt;k=A{QlkBCGol~WR0iqFp@PtlDkrLIN@jTQUTyrAV~LOiebjV_zx!< zm))E)3pX1F-d05Hj6SDr+c(C(ha}GA#nqDrep=<+_;q)L+D{C(Atd@I4-{#|?yy#i zq6;@P6L1o?346mvVKntu&9b|`d=fv8J9lZbkrOUz)SdqrwFw*bFJ-)L?ei|!L2e_u zrk+!QG3t`L4zVpt*=+Yo{T0G|%77se+&r_ZxB=Y}xTR{PY@hGsn2PB(qGINc^SXTj z_s_Cr8y`p+MJfXmic#T>A5cye9lU7^!afyipxKKFCMVRhOn zfm+1Bz>!BcDk41M8b+JhDa)~D#sv-x{94*!P4|HHU8)U?>jNJbnE+703mwykd{cUy| z{!b0`ZAgK%+VXhP?Vpc)9{Jr@7q6DzIwXAX%kTGV$*`BspGtc4rOsa)H(Kz#mJlsq zqb`Cbs?ez0xZgo9cnN`oMDBOc+ukqLVI+oACi`0V9!wgx)X|>?mFlzlm*f!D8cs_V z%fOpg?OR9}#3omomO3lwW{B$^lU&BuDNzf~Q~I5pt|+V{a5N1sv-Uu(ravxUOGhn3 z4_+M7eG|j>*Yffmd(M9Yu_~FcP7w!dMR$KLE429(sX6OKcLkh^0EN#d2gB ztcrXSN~I->lz=OS$E)!Bp&j+L24uih zf%4XI7bngtjIj7rJ@pmid;1>Ygq*U0I=z_q36`utt(Y`e;H?21I0u9>IJya|+ED$F zrZr>;)&6M0j|!QAAoNjdk4&&r&`TRwSSG6E(VE@mi-M26qtLvW5W0z~F0f)80XSbo zNgvHi$-B#xBLRAN%8_^j`!PkhYm*@PC>vQ;)aT)q(7b(H8I4+8e@wpQH{lIL5ubnK z@lnAruf@#12@zIw%qhq)Z{EN?F5MXHxHr8csB(5*!8%0K4HRQu#gE#JRpj7uur^di zs;pZ%`~8mVgEoH$t>%?lmK}U?i?sPv9IQiWsll66x1Dm@TMAPp@TpP%p_o;m zR=8K}D~zzf+i>k|y6c@hq8PfdmU#m;aVdJtHpQ%_%~^Al~tRZs|+?P%L%t?z={c}jw{KYO=JtNAVm+{&oo7JqL<*%RX>oM;1Y z3_U|eJ50eQg#FZ3{n@r@DT!?|eOVrzkwlRIS$pAT#LOjF+k!0wAc&UIdTk@G9IDAOn#UN7JFJ?8N*sJNOKvjqmSso9OS6+lDB?39Yo9l62A|*v|q|fl? zQv5-JNB@E?Gg3ln@k>LG!@YSnkrImJ9Oj$3OM+)oj(9?;Wj5ok5I_ELl`jSXjv&@9 z+z^Q%m4&h%3>L9^nnajl9XeiM?;;A5%V7ovf-#1ZMVVw5fJ-$1_$62?1HQZF6|hGM z(TkMYpYiTGZ32g;Dq`m6cw$oGPENyPwRgxTbc%*$Uu`%&*annQ@1KTUY=Udo4cKE~ zSHa#(j^Xcmm_Aw=X}g~Xy*aD)C#d}&MkM`TfEr!^Vq2>RKjq~f6ad>Fy&!)FwcirB z{|#zv=Y1h|m&?CvUq3CR;s-2GiwlbjCcyTet{m@dzy9(+1m?2Vn*FAhh;#00f*K)K zpofPMk46vF4>8(DG1QalT}C4~5_0Qc(H_x-cCKp`I=p2Rw0{0ss+ zV3lHIr((JM@CuSSTvZ`c<_M`kC)SiLIGjQ6LV9wsgD`hvlsOYKGuSdWb_I$j6W(C& zE4Jiu4Yk*_#(h@ORfnd`nU~|rdTVvUvA%2!Nf5~O6+EOiSuPZ25=Thz8QgOtXU0|3 zrg7&y+G|_%jgIRju3^K`A_`$RKlaXMz4mc*#ns&=Kmrt_BPb5yRA|PKmKRE<WRdWIyF@tc>wBnnG%9zvv@eY$-|zB=!}EF%;!a)u%%1Y0|4VB6N&m7+0s|!Ww8R zG6bFNgq6jpJK-6MgoBIpcUwtD3X~C}u@hgGcHkXfs3)7n$<}7c1AHf&9Iw?;CTSf5 zczN03yxGtB@l1^hQu{@2rsJs%=xM-RZh&MTb$w{z+smXS_J~An`-v}^QCSgrd^ymr zdU=HfuUO9O!6E`pN)RL?jp*nxGdAmy^r|!zU{*#GwA4U;5i5YL8Hs1am&rl`R&AxN=Be6V$<8Ej}yaRkSl zyg$3@<-gjV>$NmGaG{8yXj&*{LdsL~Ydv1M8oc5I?sSAVeO9L9|ku0vcRPO4QuxvX%XY0B&T;yJnOfv|_x^tFBuMI+`t&Frf)V@PU zjP|%3YmS_M=Fsv>lIx~W;_HR)&V8D^KL1SqGrhkoqn`^pLV}T2``hPd2b4Z{`Tq%J zm7k#Oz-NEVXMbpuPW)}1{cmz9zt~1zFM9U)*`sf7pWhG~pSgKRId}Tr_gP0~rnA5H zyZFL5H#6a}+7%%|hxG}`tbhZ~8*9z5SKIF=*0mr0;1ob5uu$9TA;!i8-@OR_ShZ*U zcs_J>bU8m@iK6C>f&xpnqs4qeKcw8D^Pd|UTewG8%??DxRQ)i&UAZ#4&#pNj0Ch$| zT*O{PxE2og<%f`A&s9$^mYR-^o5<$n)KFqvepRvakiVBRJ1$Fy&iIX8gKxjF+jP2P zqDPQg6!MwqI~DL+Iu&TcZdqY($_m&uHPT(>yv1XjYue-J_^s`w(DWK-$PFO7*~K9p z^X(yGPT0439#4dE8$PA2m=R%t&675msWi3`!f~t>Xp=G@jR!Tdd0&FLo=yWYNa1C`2o95nY*9+ zikw}Glrp{(vfd3`ocDO&01i()3UDSkj*5eUijbO1Dk$|+qAB_V)P36(hMpb z6n0W-if|?`@Fj1~UkwWmty8`QXl6wt19utSi3USOtb;13scqAqO)keSQGz_QiO8Xh zM(SDTO=d=+$ZtFl$nrBQ(%xzEc^Z{b>;rjU?1^r4drZ;67Y^o0uNJ=?f9`R-v6U-~ zjFO<22UfBLJo!`4zGt;=7v$s?qb=z+I-$#j)PY2;xxosX8uzjKq5yCl2A|!Z4|&dh z{v9CggDLi<-~IdFP}HYdUYVv3w!=a0$Y8aLVRCw#0E1!^oWK|MiT zKpsKc(<9j>ueK)LrBlKCPRigFhA}{%Jwc;YtrQ!ycEtRY)U21dz0!10F~TAbc8-LR z8U9kqp4r%7QdrTqFi(US)Eg%5gfr1nEBSkM$**o!HBab(isHpFmjKDW>`fv7# w@2D64M6Cb&jq+i*#`e8{NKp9GOp%$K%+Fs%6&xJ+xctScOTcGp)!<+L7dU@mR{#J2 literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹摇酒.aseprite.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹摇酒.aseprite.meta new file mode 100644 index 000000000..5e963f2ec --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹摇酒.aseprite.meta @@ -0,0 +1,1372 @@ +fileFormatVersion: 2 +guid: 5d1f629da0beb984db9475053b931014 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008905340391398 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_0" + originalName: + pivot: {x: 0.3333333, y: -1.1791044} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 153 + width: 48 + height: 67 + spriteID: 9186126b77a9c644db645bc1c8dfcaa2 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 153} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_1" + originalName: + pivot: {x: 0.35714284, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 115 + y: 154 + width: 42 + height: 66 + spriteID: b8a3b3511b7d5d747af4c63eff309b5a + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 115, y: 154} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_2" + originalName: + pivot: {x: 0.37499997, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 165 + y: 224 + width: 40 + height: 66 + spriteID: 46d6b196249c0a849be86ccd4515baa2 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 165, y: 224} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_3" + originalName: + pivot: {x: 0.35714284, y: -1.1791044} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 61 + y: 298 + width: 42 + height: 67 + spriteID: 19d1f5baeb9cf0d4b84635d98e662631 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 61, y: 298} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_4" + originalName: + pivot: {x: 0.35714284, y: -1.2153846} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 165 + y: 4 + width: 42 + height: 65 + spriteID: 2bb945fa330765f40b6611ee1f02b219 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 165, y: 4} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_5" + originalName: + pivot: {x: 0.37837833, y: -1.234375} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 312 + y: 4 + width: 37 + height: 64 + spriteID: 7573c3b4e9896d145b4c772a81b475bb + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 312, y: 4} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_6" + originalName: + pivot: {x: 0.4545454, y: -1.234375} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 312 + y: 150 + width: 33 + height: 64 + spriteID: 0baed29482d104a4ba0a24631f494ea5 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 312, y: 150} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_7" + originalName: + pivot: {x: 0.38461536, y: -1.234375} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 215 + y: 300 + width: 39 + height: 64 + spriteID: fa95c828c364ad9439afc010003fde95 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 215, y: 300} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_8" + originalName: + pivot: {x: 0.36585364, y: -1.2741935} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 165 + y: 446 + width: 41 + height: 62 + spriteID: 373f42a2196ba894e90d4e280affc7f1 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 165, y: 446} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_9" + originalName: + pivot: {x: 0.37499997, y: -1.2580645} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 215 + y: 372 + width: 40 + height: 62 + spriteID: 3e924a148c1a5e24ab4cf74e1a9622b2 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 215, y: 372} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_10" + originalName: + pivot: {x: 0.37499997, y: -1.2741935} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 215 + y: 442 + width: 40 + height: 62 + spriteID: 1bb125834cf918b4e8bfa56a63257ce6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 215, y: 442} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_12" + originalName: + pivot: {x: 0.37499997, y: -1.2419355} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 263 + y: 76 + width: 40 + height: 62 + spriteID: c0ca635557f7a284e9d6484c1deb9825 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 263, y: 76} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_13" + originalName: + pivot: {x: 0.37499997, y: -1.2741935} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 263 + y: 146 + width: 40 + height: 62 + spriteID: 6f502786024fa8944abccdd9ea6e5733 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 263, y: 146} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_14" + originalName: + pivot: {x: 0.37499997, y: -1.2153846} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 215 + y: 78 + width: 40 + height: 65 + spriteID: 58d21ad384e213d49a5024fc59d010c5 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 215, y: 78} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_15" + originalName: + pivot: {x: 0.34210524, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 215 + y: 226 + width: 38 + height: 66 + spriteID: 903ed07dd35f52245af615b52df5b625 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 215, y: 226} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_16" + originalName: + pivot: {x: 0.37499997, y: -1.1818181} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 165 + y: 298 + width: 40 + height: 66 + spriteID: fbf4f833d986da74cb4a686262f1c52e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 165, y: 298} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_17" + originalName: + pivot: {x: 0.34210524, y: -1.234375} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 263 + y: 360 + width: 38 + height: 64 + spriteID: 8c8769a06eccc2d408943d25dce6e4c6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 263, y: 360} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_18" + originalName: + pivot: {x: 0.34210524, y: -1.234375} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 263 + y: 432 + width: 38 + height: 64 + spriteID: 91377edb678dfd342aeab40c36900494 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 263, y: 432} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_19" + originalName: + pivot: {x: 0.3902439, y: -1.1818181} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 165 + y: 77 + width: 41 + height: 66 + spriteID: 0505da33f3212774b95ab69fb2fac5dd + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 165, y: 77} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_20" + originalName: + pivot: {x: 0.37499997, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 165 + y: 372 + width: 40 + height: 66 + spriteID: a1af1eb5bf49c954cb74ea677704fdeb + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 165, y: 372} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_21" + originalName: + pivot: {x: 0.34210524, y: -1.1791044} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 215 + y: 151 + width: 38 + height: 67 + spriteID: 0611d9475ae972d44b9b4329edce2b9e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 215, y: 151} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_22" + originalName: + pivot: {x: 0.4186046, y: -1.1791044} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 61 + y: 223 + width: 43 + height: 67 + spriteID: 2fb681fcfbb43824085e25cd7155bd4b + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 61, y: 223} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_23" + originalName: + pivot: {x: 0.40476188, y: -1.1641791} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 61 + y: 373 + width: 42 + height: 67 + spriteID: 9d72ccace7a99bf4caece15742525838 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 61, y: 373} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_24" + originalName: + pivot: {x: 0.4897959, y: -1.1641791} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 49 + height: 67 + spriteID: a73813087f5308c4bb8047d3eb5ee4df + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_25" + originalName: + pivot: {x: 0.45652175, y: -1.1791044} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 303 + width: 46 + height: 67 + spriteID: 46a3bdd1ede452148a9ce5d486629150 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 303} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_26" + originalName: + pivot: {x: 0.44444442, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 61 + y: 77 + width: 45 + height: 66 + spriteID: 28e7e2db36993f14aaf7bb53476b3965 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 61, y: 77} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_27" + originalName: + pivot: {x: 0.45652175, y: -1.2153846} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 61 + y: 4 + width: 46 + height: 65 + spriteID: 3d572364b1ace454a9f08607bed6ef15 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 61, y: 4} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_28" + originalName: + pivot: {x: 0.4897959, y: -1.1818181} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 79 + width: 49 + height: 66 + spriteID: 52aea7c7140a56640b43018841c65ff6 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 79} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_29" + originalName: + pivot: {x: 0.40476188, y: -1.1641791} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 115 + y: 4 + width: 42 + height: 67 + spriteID: 531f078d8b4656b4da96646aaa2bc6d3 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 115, y: 4} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_30" + originalName: + pivot: {x: 0.45652175, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 378 + width: 46 + height: 66 + spriteID: f18a7c973abd57342997ee2c70a9b5e7 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 378} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_31" + originalName: + pivot: {x: 0.3902439, y: -1.234375} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 263 + y: 4 + width: 41 + height: 64 + spriteID: f36d5d85620028143aa4eaf642137345 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 263, y: 4} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_32" + originalName: + pivot: {x: 0.45652175, y: -1.234375} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 61 + y: 151 + width: 46 + height: 64 + spriteID: 381a1b2e73643a94ab33187142944551 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 61, y: 151} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_33" + originalName: + pivot: {x: 0.40476188, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 115 + y: 228 + width: 42 + height: 66 + spriteID: 707f859fa2fe8084d8461b751cdf3366 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 115, y: 228} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_34" + originalName: + pivot: {x: 0.34146342, y: -1.2153846} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 165 + y: 151 + width: 41 + height: 65 + spriteID: c3f30ff37dde65247996592335547e97 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 165, y: 151} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_35" + originalName: + pivot: {x: 0.41176468, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 312 + y: 76 + width: 34 + height: 66 + spriteID: 07f3673e0973eb84ca473bd114d7a8b3 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 312, y: 76} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_36" + originalName: + pivot: {x: 0.37837833, y: -1.1818181} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 263 + y: 286 + width: 37 + height: 66 + spriteID: 3fe6520ae3f1f524dbdab9ce8a0f7945 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 263, y: 286} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_37" + originalName: + pivot: {x: 0.35714284, y: -1.1818181} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 115 + y: 302 + width: 42 + height: 66 + spriteID: 76348cbdf6cd4434a8813c9db96ba77e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 115, y: 302} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_38" + originalName: + pivot: {x: 0.3333333, y: -1.1791044} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 228 + width: 48 + height: 67 + spriteID: 9d0f92f42e51c8742b9d538071ddc607 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 228} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_39" + originalName: + pivot: {x: 0.35714284, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 115 + y: 376 + width: 42 + height: 66 + spriteID: 2602fb8a9cc7cea49bcc0b5b8ae9484b + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 115, y: 376} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_40" + originalName: + pivot: {x: 0.37499997, y: -1.1969696} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 215 + y: 4 + width: 40 + height: 66 + spriteID: 4eae3c3fad6eb1447b50d062353f622f + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 215, y: 4} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_41" + originalName: + pivot: {x: 0.35714284, y: -1.1791044} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 115 + y: 79 + width: 42 + height: 67 + spriteID: 3831cbbd867c9e048b257463f52f35c8 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 115, y: 79} + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_11" + originalName: + pivot: {x: 0.37499997, y: -1.2580645} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 263 + y: 216 + width: 40 + height: 62 + spriteID: 04be75031163fe6428572d37d2f52759 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 263, y: 216} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: 725695257 + name: "\u8C03\u9152\u59B9\u6447\u9152" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_0" + frameIndex: 0 + cellRect: + x: 19 + y: 79 + width: 48 + height: 67 + spriteId: 9186126b77a9c644db645bc1c8dfcaa2 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_1" + frameIndex: 1 + cellRect: + x: 20 + y: 79 + width: 42 + height: 66 + spriteId: b8a3b3511b7d5d747af4c63eff309b5a + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_2" + frameIndex: 2 + cellRect: + x: 20 + y: 79 + width: 40 + height: 66 + spriteId: 46d6b196249c0a849be86ccd4515baa2 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_3" + frameIndex: 3 + cellRect: + x: 20 + y: 79 + width: 42 + height: 67 + spriteId: 19d1f5baeb9cf0d4b84635d98e662631 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_4" + frameIndex: 4 + cellRect: + x: 20 + y: 79 + width: 42 + height: 65 + spriteId: 2bb945fa330765f40b6611ee1f02b219 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_5" + frameIndex: 5 + cellRect: + x: 21 + y: 79 + width: 37 + height: 64 + spriteId: 7573c3b4e9896d145b4c772a81b475bb + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_6" + frameIndex: 6 + cellRect: + x: 20 + y: 79 + width: 33 + height: 64 + spriteId: 0baed29482d104a4ba0a24631f494ea5 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_7" + frameIndex: 7 + cellRect: + x: 20 + y: 79 + width: 39 + height: 64 + spriteId: fa95c828c364ad9439afc010003fde95 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_8" + frameIndex: 8 + cellRect: + x: 20 + y: 79 + width: 41 + height: 62 + spriteId: 373f42a2196ba894e90d4e280affc7f1 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_9" + frameIndex: 9 + cellRect: + x: 20 + y: 78 + width: 40 + height: 62 + spriteId: 3e924a148c1a5e24ab4cf74e1a9622b2 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_10" + frameIndex: 10 + cellRect: + x: 20 + y: 79 + width: 40 + height: 62 + spriteId: 1bb125834cf918b4e8bfa56a63257ce6 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_12" + frameIndex: 12 + cellRect: + x: 20 + y: 77 + width: 40 + height: 62 + spriteId: c0ca635557f7a284e9d6484c1deb9825 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_13" + frameIndex: 13 + cellRect: + x: 20 + y: 79 + width: 40 + height: 62 + spriteId: 6f502786024fa8944abccdd9ea6e5733 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_14" + frameIndex: 14 + cellRect: + x: 20 + y: 79 + width: 40 + height: 65 + spriteId: 58d21ad384e213d49a5024fc59d010c5 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_15" + frameIndex: 15 + cellRect: + x: 22 + y: 79 + width: 38 + height: 66 + spriteId: 903ed07dd35f52245af615b52df5b625 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_16" + frameIndex: 16 + cellRect: + x: 20 + y: 78 + width: 40 + height: 66 + spriteId: fbf4f833d986da74cb4a686262f1c52e + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_17" + frameIndex: 17 + cellRect: + x: 22 + y: 79 + width: 38 + height: 64 + spriteId: 8c8769a06eccc2d408943d25dce6e4c6 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_18" + frameIndex: 18 + cellRect: + x: 22 + y: 79 + width: 38 + height: 64 + spriteId: 91377edb678dfd342aeab40c36900494 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_19" + frameIndex: 19 + cellRect: + x: 19 + y: 78 + width: 41 + height: 66 + spriteId: 0505da33f3212774b95ab69fb2fac5dd + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_20" + frameIndex: 20 + cellRect: + x: 20 + y: 79 + width: 40 + height: 66 + spriteId: a1af1eb5bf49c954cb74ea677704fdeb + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_21" + frameIndex: 21 + cellRect: + x: 22 + y: 79 + width: 38 + height: 67 + spriteId: 0611d9475ae972d44b9b4329edce2b9e + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_22" + frameIndex: 22 + cellRect: + x: 17 + y: 79 + width: 43 + height: 67 + spriteId: 2fb681fcfbb43824085e25cd7155bd4b + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_23" + frameIndex: 23 + cellRect: + x: 18 + y: 78 + width: 42 + height: 67 + spriteId: 9d72ccace7a99bf4caece15742525838 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_24" + frameIndex: 24 + cellRect: + x: 11 + y: 78 + width: 49 + height: 67 + spriteId: a73813087f5308c4bb8047d3eb5ee4df + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_25" + frameIndex: 25 + cellRect: + x: 14 + y: 79 + width: 46 + height: 67 + spriteId: 46a3bdd1ede452148a9ce5d486629150 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_26" + frameIndex: 26 + cellRect: + x: 15 + y: 79 + width: 45 + height: 66 + spriteId: 28e7e2db36993f14aaf7bb53476b3965 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_27" + frameIndex: 27 + cellRect: + x: 14 + y: 79 + width: 46 + height: 65 + spriteId: 3d572364b1ace454a9f08607bed6ef15 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_28" + frameIndex: 28 + cellRect: + x: 11 + y: 78 + width: 49 + height: 66 + spriteId: 52aea7c7140a56640b43018841c65ff6 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_29" + frameIndex: 29 + cellRect: + x: 18 + y: 78 + width: 42 + height: 67 + spriteId: 531f078d8b4656b4da96646aaa2bc6d3 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_30" + frameIndex: 30 + cellRect: + x: 14 + y: 79 + width: 46 + height: 66 + spriteId: f18a7c973abd57342997ee2c70a9b5e7 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_31" + frameIndex: 31 + cellRect: + x: 19 + y: 79 + width: 41 + height: 64 + spriteId: f36d5d85620028143aa4eaf642137345 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_32" + frameIndex: 32 + cellRect: + x: 14 + y: 79 + width: 46 + height: 64 + spriteId: 381a1b2e73643a94ab33187142944551 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_33" + frameIndex: 33 + cellRect: + x: 18 + y: 79 + width: 42 + height: 66 + spriteId: 707f859fa2fe8084d8461b751cdf3366 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_34" + frameIndex: 34 + cellRect: + x: 21 + y: 79 + width: 41 + height: 65 + spriteId: c3f30ff37dde65247996592335547e97 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_35" + frameIndex: 35 + cellRect: + x: 21 + y: 79 + width: 34 + height: 66 + spriteId: 07f3673e0973eb84ca473bd114d7a8b3 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_36" + frameIndex: 36 + cellRect: + x: 21 + y: 78 + width: 37 + height: 66 + spriteId: 3fe6520ae3f1f524dbdab9ce8a0f7945 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_37" + frameIndex: 37 + cellRect: + x: 20 + y: 78 + width: 42 + height: 66 + spriteId: 76348cbdf6cd4434a8813c9db96ba77e + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_38" + frameIndex: 38 + cellRect: + x: 19 + y: 79 + width: 48 + height: 67 + spriteId: 9d0f92f42e51c8742b9d538071ddc607 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_39" + frameIndex: 39 + cellRect: + x: 20 + y: 79 + width: 42 + height: 66 + spriteId: 2602fb8a9cc7cea49bcc0b5b8ae9484b + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_40" + frameIndex: 40 + cellRect: + x: 20 + y: 79 + width: 40 + height: 66 + spriteId: 4eae3c3fad6eb1447b50d062353f622f + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_41" + frameIndex: 41 + cellRect: + x: 20 + y: 79 + width: 42 + height: 67 + spriteId: 3831cbbd867c9e048b257463f52f35c8 + - name: "\u8C03\u9152\u59B9\u6447\u9152_Frame_11" + frameIndex: 11 + cellRect: + x: 20 + y: 78 + width: 40 + height: 62 + spriteId: 04be75031163fe6428572d37d2f52759 + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 70, y: 152} diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹放酒动作.aseprite b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/调酒妹/调酒妹放酒动作.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..efed03dfd5ee96dad591648bb0cc8ba0898eb7b0 GIT binary patch literal 16212 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
t`8yKCH(@rlEFsQ31bJGN3W9#5QnX8Jjlp zNW$f_ONVZW9e2vG=+~tT$+}?z26tJ;pnVtr0pBIFoR*R*qE_?D>7HT(cBweo!_K2X z%plRy(G$0KFl^wpudGa6QDV)T+KaCf?mZE9Ia1N+T(}i!q_$c?Hd`Jy!msFJR#6Si zvkWr)c#Fi=8NW{GmAA#eHkY+(sPFagS1MRF=d6319~Pg){r1u8G%I=|CGoka1$`r* zclb4>cKmF;c8{XOaCe!3pE};q<+YMr&*s9jl>N1F-tH=94E{%kGjy1*x(o$>ytS8U zaZ$p!OFG0+v#fl5A|h*QYf#N&Y$Il>u3}n~z%*@OQsm*_ciSU{qE6c{v%BjOhq@YW zj4(%|*fiavA7qYC{&H`QFh%gXKzJa5}E6jx~2RVrLx z;Lhrbv6&oa9+~?5b-#{->W1OeZ3ly>d0hBHSwwb*jr~`GxvZQH&PrWHysdXo-m}B- zYhP5^|K+}>-&EQ2#b)7MiY)Ariq+81^j%lo-mjF`ecnFU zTTn9zfSXeeSskdTaQ?PFth=HZ6BEzj@iC(VpWHv?kn4eOsbqRz&2 z{>XefqpjpG2n&FH_ zCGl=sr>VORLCQmy3n@0byscB4T;C2=2Npf)Shtx;+4rRy$8b7!E|~QPwa&@ zl3(<8^Y5+y?6@wg{W8+2oK=VrT<7(q!@onqipXd3Sblm8JT{b7}bv*r1{PU*-l~9t=zINl|dgXR-)YI(U2J$nr+^`4}Vo@&eg=BSbwFN zdFgYw(yZZhf)`zfgwNP{Kk0Yh;*(0U^l(Kpw>Cla0nT(GJ;X}B8 zAvg{EHzD72%$28fwx_0cMry1C*~c%1X7hwbTw)-JihaTKkSFJYjwxqsS)OWQSlwiI zaf4ycemn_smQgg5@t?5x*WvuH!}(u_^S=(~|0fRTfAWy$f55|#h)YqltlSX-=NQi1 zʙ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 VFg{OnqY|Gd7Q3jK<$sqXa&-IrtRVmZ literal 0 HcmV?d00001 diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.aseprite.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.aseprite.meta new file mode 100644 index 000000000..a61e860d0 --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.aseprite.meta @@ -0,0 +1,318 @@ +fileFormatVersion: 2 +guid: 0cea27261fffbf741bf731d5075bfb88 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: Idle + second: {fileID: 7400000, guid: 9ccc09e0d078db84fae6193f99f76544, type: 2} + - first: + type: UnityEngine:AnimationClip + assembly: UnityEngine.AnimationModule + name: "\u9152\u5427\u533B\u751F_Clip" + second: {fileID: 7400000, guid: cfa16bf6e79ac1d47a72c336e21975c2, type: 2} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + swizzle: 50462976 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 21.5 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + cookieMode: 0 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + previousAsepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + asepriteImporterSettings: + fileImportMode: 1 + importHiddenLayers: 0 + layerImportMode: 1 + defaultPivotSpace: 0 + defaultPivotAlignment: 7 + customPivotPosition: {x: 0.5, y: 0.5} + spritePadding: 0 + generateModelPrefab: 1 + generateAnimationClips: 1 + addSortingGroup: 1 + addShadowCasters: 0 + importFileNodeState: 1 + platformSettingsDirtyTick: 639008885238933687 + textureAssetName: + singleSpriteImportData: + - name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 0, y: 0} + animatedSpriteImportData: + - name: "\u9152\u5427\u533B\u751F_Frame_0" + originalName: + pivot: {x: 0.48039216, y: -0.03125} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 51 + height: 128 + spriteID: e1c3d7f1126128d4b9f953707f996617 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 4, y: 4} + - name: "\u9152\u5427\u533B\u751F_Frame_1" + originalName: + pivot: {x: 0.48039216, y: -0.03125} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 63 + y: 4 + width: 51 + height: 128 + spriteID: fedf33e5c6e8a4a43a3ae27d1db7806d + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 63, y: 4} + - name: "\u9152\u5427\u533B\u751F_Frame_2" + originalName: + pivot: {x: 0.47959185, y: -0.031007752} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 181 + y: 4 + width: 49 + height: 129 + spriteID: cc998ee006d7b3343a3fffc1daf23076 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 181, y: 4} + - name: "\u9152\u5427\u533B\u751F_Frame_3" + originalName: + pivot: {x: 0.48039216, y: -0.03125} + alignment: 9 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 122 + y: 4 + width: 51 + height: 128 + spriteID: 350ab90e6b545af439b0f0a9f7f8be57 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + uvTransform: {x: 122, y: 4} + spriteSheetImportData: [] + asepriteLayers: + - layerIndex: 0 + guid: -1368503303 + name: "\u9152\u5427\u533B\u751F" + layerFlags: 0 + layerType: 0 + blendMode: 0 + cells: + - name: "\u9152\u5427\u533B\u751F_Frame_0" + frameIndex: 0 + cellRect: + x: 5 + y: 4 + width: 51 + height: 128 + spriteId: e1c3d7f1126128d4b9f953707f996617 + - name: "\u9152\u5427\u533B\u751F_Frame_1" + frameIndex: 1 + cellRect: + x: 5 + y: 4 + width: 51 + height: 128 + spriteId: fedf33e5c6e8a4a43a3ae27d1db7806d + - name: "\u9152\u5427\u533B\u751F_Frame_2" + frameIndex: 2 + cellRect: + x: 6 + y: 4 + width: 49 + height: 129 + spriteId: cc998ee006d7b3343a3fffc1daf23076 + - name: "\u9152\u5427\u533B\u751F_Frame_3" + frameIndex: 3 + cellRect: + x: 5 + y: 4 + width: 51 + height: 128 + spriteId: 350ab90e6b545af439b0f0a9f7f8be57 + linkedCells: [] + parentIndex: -1 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Android + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + ignorePlatformSupport: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + secondarySpriteTextures: [] + spritePackingTag: + canvasSize: {x: 59, y: 135} diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.controller b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.controller new file mode 100644 index 000000000..8df8bdbde --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u9152\u5427\u533B\u751F" + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 3897545315180269216} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1107 &3897545315180269216 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 7615255923581734750} + m_Position: {x: 280, y: 120, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 7615255923581734750} +--- !u!1102 &7615255923581734750 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 9ccc09e0d078db84fae6193f99f76544, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.controller.meta b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.controller.meta new file mode 100644 index 000000000..20cc183ba --- /dev/null +++ b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧医生.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dc2e1a393256c414d88652162e05b699 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧火山.aseprite b/Assets/RawResources/Art/酒吧素材/酒吧内角色动画/酒吧火山.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..b2d3efe4568f4e6f8a98c2a28215f5ea70dc72f8 GIT binary patch literal 10993 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