网格功能

This commit is contained in:
2025-11-20 18:07:15 +08:00
parent 7912de9384
commit 76809a829e
24 changed files with 1685 additions and 537 deletions
-535
View File
@@ -1,535 +0,0 @@
<linker>
<assembly fullname="AllIn1SpriteShaderAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="AllIn1SpriteShader.AllIn1Shader" preserve="all" />
</assembly>
<assembly fullname="Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="AibisDream.ActiveScenePart" preserve="all" />
<type fullname="AibisDream.ActorAnima" preserve="all" />
<type fullname="AibisDream.ActorManager" preserve="all" />
<type fullname="AibisDream.ActorSlot" preserve="all" />
<type fullname="AibisDream.AnimaMobileObject" preserve="all" />
<type fullname="AibisDream.BatchSpawner" preserve="all" />
<type fullname="AibisDream.BoolButton" preserve="all" />
<type fullname="AibisDream.Bubble" preserve="all" />
<type fullname="AibisDream.BubbleGroup" preserve="all" />
<type fullname="AibisDream.BubbleOption" preserve="all" />
<type fullname="AibisDream.BubbleOptionSlot" preserve="all" />
<type fullname="AibisDream.BubbleSlot" preserve="all" />
<type fullname="AibisDream.BubbleSlotGroup" preserve="all" />
<type fullname="AibisDream.BubbleStyle" preserve="all" />
<type fullname="AibisDream.CenterBubble" preserve="all" />
<type fullname="AibisDream.CenterOptions" preserve="all" />
<type fullname="AibisDream.ChapterController" preserve="all" />
<type fullname="AibisDream.ChapterItem" preserve="all" />
<type fullname="AibisDream.CircularProgress" preserve="all" />
<type fullname="AibisDream.ClinicSystem" preserve="all" />
<type fullname="AibisDream.ColorTintButton" preserve="all" />
<type fullname="AibisDream.CordPull" preserve="all" />
<type fullname="AibisDream.CursorManager" preserve="all" />
<type fullname="AibisDream.CutLine" preserve="all" />
<type fullname="AibisDream.CuttingManager" preserve="all" />
<type fullname="AibisDream.DefaultOptions" preserve="all" />
<type fullname="AibisDream.DemoTimer" preserve="all" />
<type fullname="AibisDream.DialogController" preserve="all" />
<type fullname="AibisDream.DialogUIManager" preserve="all" />
<type fullname="AibisDream.EmoManager" preserve="all" />
<type fullname="AibisDream.EngineSystem" preserve="all" />
<type fullname="AibisDream.EnvironmentManager" preserve="all" />
<type fullname="AibisDream.ExpressionCable" preserve="all" />
<type fullname="AibisDream.ExpressionCableSystem" preserve="all" />
<type fullname="AibisDream.ExpressionManager" preserve="all" />
<type fullname="AibisDream.ExpressionPlug" preserve="all" />
<type fullname="AibisDream.ExpressionPowerSource" preserve="all" />
<type fullname="AibisDream.ExpressionSocket" preserve="all" />
<type fullname="AibisDream.ExpressionSubSystem" preserve="all" />
<type fullname="AibisDream.EyeSystem" preserve="all" />
<type fullname="AibisDream.FixSystem.BodyModule" preserve="all" />
<type fullname="AibisDream.FixSystem.BodyModuleSystem" preserve="all" />
<type fullname="AibisDream.FixSystem.Cable" preserve="all" />
<type fullname="AibisDream.FixSystem.CableReel" preserve="all" />
<type fullname="AibisDream.FixSystem.CableSystem" preserve="all" />
<type fullname="AibisDream.FixSystem.CheckData" preserve="all" />
<type fullname="AibisDream.FixSystem.CheckRule" preserve="all" />
<type fullname="AibisDream.FixSystem.FixLightSystem" preserve="all" />
<type fullname="AibisDream.FixSystem.FixSystemCenter" preserve="all" />
<type fullname="AibisDream.FixSystem.PipelineProduct" preserve="all" />
<type fullname="AibisDream.FixSystem.Plug" preserve="all" />
<type fullname="AibisDream.FixSystem.ScreenSystem" preserve="all" />
<type fullname="AibisDream.FixSystem.WhackMoleData" preserve="all" />
<type fullname="AibisDream.Framework.CameraKit" preserve="all" />
<type fullname="AibisDream.Framework.EventSystemEx" preserve="all" />
<type fullname="AibisDream.Framework.EventTriggerEx" preserve="all" />
<type fullname="AibisDream.Framework.MonoCenter" preserve="all" />
<type fullname="AibisDream.Framework.SpriteGroupKit" preserve="all" />
<type fullname="AibisDream.Framework.UICamera" preserve="all" />
<type fullname="AibisDream.GameManager" preserve="all" />
<type fullname="AibisDream.Gear" preserve="all" />
<type fullname="AibisDream.GearSystem" preserve="all" />
<type fullname="AibisDream.Kit.ActionKitMonoBehaviourEvents" preserve="all" />
<type fullname="AibisDream.Kit.AudioManager" preserve="all" />
<type fullname="AibisDream.Kit.MonoUpdateActionExecutor" preserve="all" />
<type fullname="AibisDream.Kit.VerText" preserve="all" />
<type fullname="AibisDream.LanguageItem" preserve="all" />
<type fullname="AibisDream.LineAdvanceInput" preserve="all" />
<type fullname="AibisDream.LineRunner" preserve="all" />
<type fullname="AibisDream.LocalisedLineProvider" preserve="all" />
<type fullname="AibisDream.LocalizedText" preserve="all" />
<type fullname="AibisDream.MouseFollowAndZoom" preserve="all" />
<type fullname="AibisDream.MoveablePartGroup" preserve="all" />
<type fullname="AibisDream.OpenSystem" preserve="all" />
<type fullname="AibisDream.OptionView" preserve="all" />
<type fullname="AibisDream.OutsideCenter" preserve="all" />
<type fullname="AibisDream.PrefabMobileObject" preserve="all" />
<type fullname="AibisDream.SceneLoader" preserve="all" />
<type fullname="AibisDream.SelectItem" preserve="all" />
<type fullname="AibisDream.SettingForm" preserve="all" />
<type fullname="AibisDream.Shaft" preserve="all" />
<type fullname="AibisDream.SliderItem" preserve="all" />
<type fullname="AibisDream.Spawner" preserve="all" />
<type fullname="AibisDream.SpawnScenePart" preserve="all" />
<type fullname="AibisDream.SpriteActor" preserve="all" />
<type fullname="AibisDream.SpriteFlashSystem" preserve="all" />
<type fullname="AibisDream.SpriteMobileObject" preserve="all" />
<type fullname="AibisDream.SpriteScenePart" preserve="all" />
<type fullname="AibisDream.StorageSystem" preserve="all" />
<type fullname="AibisDream.SubwayCenter" preserve="all" />
<type fullname="AibisDream.TalkSceneSO" preserve="all" />
<type fullname="AibisDream.TaskScreen" preserve="all" />
<type fullname="AibisDream.UI.ChapterPanel" preserve="all" />
<type fullname="AibisDream.UI.EndPanel" preserve="all" />
<type fullname="AibisDream.UI.MainPanel" preserve="all" />
<type fullname="AibisDream.UI.PlayToolPanel" preserve="all" />
<type fullname="AibisDream.UI.RecordItem" preserve="all" />
<type fullname="AibisDream.UI.RecordPanel" preserve="all" />
<type fullname="AibisDream.UI.SettingPanel" preserve="all" />
<type fullname="AibisDream.UI.StartPanel" preserve="all" />
<type fullname="AibisDream.UIManager" preserve="all" />
<type fullname="AibisDream.Vehicle" preserve="all" />
<type fullname="ChipModule" preserve="all" />
<type fullname="ClueBaordNew" preserve="all" />
<type fullname="ClueInteraction" preserve="all" />
<type fullname="ClueItem" preserve="all" />
<type fullname="ClueManager" preserve="all" />
<type fullname="DraggableUI" preserve="all" />
<type fullname="ExplosionEffect" preserve="all" />
<type fullname="EyeTarget" preserve="all" />
<type fullname="EyeTransitionManager" preserve="all" />
<type fullname="FavoritesManager" preserve="all" />
<type fullname="GearFollower" preserve="all" />
<type fullname="HeatMapController" preserve="all" />
<type fullname="LakeLineDrawer" preserve="all" />
<type fullname="LineInteraction" preserve="all" />
<type fullname="MemoryClueSlot" preserve="all" />
<type fullname="MemoryProcess" preserve="all" />
<type fullname="PhysicCable" preserve="all" />
<type fullname="PhysicLineSegment" preserve="all" />
<type fullname="PunchTapeSystem" preserve="all" />
<type fullname="RobotECGWave" preserve="all" />
<type fullname="ScreenEffectManager" preserve="all" />
<type fullname="ShockSystem" preserve="all" />
<type fullname="TimelineManager" preserve="all" />
<type fullname="UFModule" preserve="all" />
<type fullname="UFSystem" preserve="all" />
<type fullname="ViewCameraManager" preserve="all" />
<type fullname="AibisDream.BoolButtonData" preserve="nothing" serialized="true" />
<type fullname="AibisDream.UIFormOption" preserve="nothing" serialized="true" />
<type fullname="AibisDream.AddressArray" preserve="nothing" serialized="true" />
<type fullname="AibisDream.BubbleOptionSlotData" preserve="nothing" serialized="true" />
<type fullname="AibisDream.BubbleSlotData" preserve="nothing" serialized="true" />
<type fullname="AibisDream.BubbleSlotGroupData" preserve="nothing" serialized="true" />
<type fullname="AibisDream.FixSystem.BodyModuleData" preserve="nothing" serialized="true" />
<type fullname="AibisDream.FixSystem.CableConfig" preserve="nothing" serialized="true" />
<type fullname="AibisDream.Framework.SpriteGroupConfig" preserve="nothing" serialized="true" />
<type fullname="AibisDream.Framework.SpriteGroupData" preserve="nothing" serialized="true" />
<type fullname="AibisDream.MobileObjectData" preserve="nothing" serialized="true" />
<type fullname="AibisDream.SpawnerPartAsset" preserve="nothing" serialized="true" />
<type fullname="AibisDream.SpritePartAsset" preserve="nothing" serialized="true" />
<type fullname="EyeTransitionManager/ViewConfig" preserve="nothing" serialized="true" />
<type fullname="PunchTape" preserve="nothing" serialized="true" />
<type fullname="AibisDream.ActivePartAsset" preserve="nothing" serialized="true" />
<type fullname="AibisDream.ActorData" preserve="nothing" serialized="true" />
<type fullname="AibisDream.CableConfig" preserve="nothing" serialized="true" />
<type fullname="LakeLineDrawer/Obstacle" preserve="nothing" serialized="true" />
<type fullname="LakeLineDrawer/TargetPoint" preserve="nothing" serialized="true" />
<type fullname="AibisDream.EngineConfig" preserve="nothing" serialized="true" />
<type fullname="AibisDream.EngineGear" preserve="nothing" serialized="true" />
<type fullname="AibisDream.FixSystem.WhackMoleBatch" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Assembly-CSharp-firstpass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="MeadowGames.UINodeConnect4.Extension.StartPlusEndNodeIDsRule" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.Extra.ConstantUpdateLines" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.Extra.HandlerRenderer" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.GraphicRenderer.UICLineRenderer" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.GraphManager" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.InputManager_LegacyInputSystem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.Node" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.Port" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.PortControlPoint" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.SampleScene.ScrollViewGraph.CustomScrollRect" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.SampleScene.ScrollViewGraph.Zoom" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.AddNodeButtonItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.ContextMenuManager" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.DefaultConnectionWidthInputItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.DefaultCurveStyleDropdownItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.DuplicateNodeButtonItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.EmptyContextItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.RemoveElementsButtonItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.SelectedElementLabelItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.SetConnectionAnimationActiveToggleItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.SetConnectionAnimationPointsSliderItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.SetConnectionWidthInputItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.SetCurveStyleDropdownItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.SetElementsColorItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICContextMenu.SetNodesAlignmentItem" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.UICSystemManager" preserve="all" />
<type fullname="RainbowArt.CleanFlatUI.ButtonTransition" preserve="all" />
<type fullname="RainbowArt.CleanFlatUI.ModalWindow" preserve="all" />
<type fullname="RainbowArt.CleanFlatUI.ModalWindowProgressBar" preserve="all" />
<type fullname="RainbowArt.CleanFlatUI.Notification" preserve="all" />
<type fullname="RainbowArt.CleanFlatUI.ProgressBar" preserve="all" />
<type fullname="RainbowArt.CleanFlatUI.ProgressBarGridLinear" preserve="all" />
<type fullname="RainbowArt.CleanFlatUI.SliderTransition" preserve="all" />
<type fullname="MeadowGames.UINodeConnect4.Connection" preserve="nothing" serialized="true" />
<type fullname="MeadowGames.UINodeConnect4.DragSelection" preserve="nothing" serialized="true" />
<type fullname="MeadowGames.UINodeConnect4.GraphicRenderer.Line" preserve="nothing" serialized="true" />
<type fullname="MeadowGames.UINodeConnect4.GraphicRenderer.Line/LineCap" preserve="nothing" serialized="true" />
<type fullname="MeadowGames.UINodeConnect4.GraphicRenderer.LineAnimation" preserve="nothing" serialized="true" />
<type fullname="MeadowGames.UINodeConnect4.Pointer" preserve="nothing" serialized="true" />
<type fullname="RainbowArt.CleanFlatUI.ModalWindow/ModalWindowEvent" preserve="nothing" serialized="true" />
<type fullname="RainbowArt.CleanFlatUI.ModalWindowProgressBar/ModalWindowEvent" preserve="nothing" serialized="true" />
<type fullname="RainbowArt.CleanFlatUI.Notification/NotificationEvent" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Cinemachine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="Cinemachine.CinemachineBlenderSettings" preserve="all" />
<type fullname="Cinemachine.CinemachineBrain" preserve="all" />
<type fullname="Cinemachine.CinemachinePipeline" preserve="all" />
<type fullname="Cinemachine.CinemachineVirtualCamera" preserve="all" />
<type fullname="Cinemachine.NoiseSettings" preserve="all" />
<type fullname="Cinemachine.CinemachineBlendDefinition" preserve="nothing" serialized="true" />
<type fullname="Cinemachine.CinemachineBlenderSettings/CustomBlend" preserve="nothing" serialized="true" />
<type fullname="Cinemachine.CinemachineBrain/BrainEvent" preserve="nothing" serialized="true" />
<type fullname="Cinemachine.CinemachineBrain/VcamActivatedEvent" preserve="nothing" serialized="true" />
<type fullname="Cinemachine.CinemachineVirtualCameraBase/TransitionParams" preserve="nothing" serialized="true" />
<type fullname="Cinemachine.LensSettings" preserve="nothing" serialized="true" />
<type fullname="Cinemachine.NoiseSettings/NoiseParams" preserve="nothing" serialized="true" />
<type fullname="Cinemachine.NoiseSettings/TransformNoiseParams" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Febucci.TextAnimator.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="Febucci.UI.Actions.ActionDatabase" preserve="all" />
<type fullname="Febucci.UI.Actions.SpeedAction" preserve="all" />
<type fullname="Febucci.UI.Actions.WaitAnyInputAction" preserve="all" />
<type fullname="Febucci.UI.Actions.WaitForAction" preserve="all" />
<type fullname="Febucci.UI.Effects.AnimationsDatabase" preserve="all" />
<type fullname="Febucci.UI.Effects.BounceBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.DangleBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.DiagonalExpandAppearance" preserve="all" />
<type fullname="Febucci.UI.Effects.FadeAppearance" preserve="all" />
<type fullname="Febucci.UI.Effects.FadeBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.HorizontalExpandAppearance" preserve="all" />
<type fullname="Febucci.UI.Effects.OffsetAppearance" preserve="all" />
<type fullname="Febucci.UI.Effects.PendulumBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.RainbowBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.RandomDirectionAppearance" preserve="all" />
<type fullname="Febucci.UI.Effects.RotatingAppearance" preserve="all" />
<type fullname="Febucci.UI.Effects.RotationBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.ShakeBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.SizeAppearance" preserve="all" />
<type fullname="Febucci.UI.Effects.SizeBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.SlideBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.SwingBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.UniformCurveAnimation" preserve="all" />
<type fullname="Febucci.UI.Effects.VerticalExpandAppearance" preserve="all" />
<type fullname="Febucci.UI.Effects.WaveBehavior" preserve="all" />
<type fullname="Febucci.UI.Effects.WiggleBehavior" preserve="all" />
<type fullname="Febucci.UI.TypewriterByCharacter" preserve="all" />
<type fullname="Febucci.UI.Core.CharacterEvent" preserve="nothing" serialized="true" />
<type fullname="Febucci.UI.Core.MessageEvent" preserve="nothing" serialized="true" />
<type fullname="Febucci.UI.Effects.AnimationData" preserve="nothing" serialized="true" />
<type fullname="Febucci.UI.Effects.ColorCurve" preserve="nothing" serialized="true" />
<type fullname="Febucci.UI.Effects.EmissionCurve" preserve="nothing" serialized="true" />
<type fullname="Febucci.UI.Effects.FloatCurve" preserve="nothing" serialized="true" />
<type fullname="Febucci.UI.Effects.TimeMode" preserve="nothing" serialized="true" />
<type fullname="Febucci.UI.TimeData" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Febucci.TextAnimator.TMP.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="Febucci.UI.TextAnimator_TMP" preserve="all" />
</assembly>
<assembly fullname="FMODUnity, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="FMODUnity.FMODEventPlayable" preserve="all" />
<type fullname="FMODUnity.FMODEventTrack" preserve="all" />
<type fullname="FMODUnity.StudioListener" preserve="all" />
<type fullname="FMOD.GUID" preserve="nothing" serialized="true" />
<type fullname="FMODUnity.AutomatableSlots" preserve="nothing" serialized="true" />
<type fullname="FMODUnity.EventReference" preserve="nothing" serialized="true" />
<type fullname="FMODUnity.FMODEventMixerBehaviour" preserve="nothing" serialized="true" />
<type fullname="FMODUnity.FMODEventPlayableBehavior" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="ScreenFx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="ScreenFx.CameraTrack" preserve="all" />
<type fullname="ScreenFx.MoveAsset" preserve="all" />
<type fullname="ScreenFx.NoiseAsset" preserve="all" />
<type fullname="ScreenFx.ScreenAsset" preserve="all" />
<type fullname="ScreenFx.ScreenFx" preserve="all" />
<type fullname="ScreenFx.ScreenFxPool" preserve="all" />
<type fullname="ScreenFx.ScreenTrack" preserve="all" />
<type fullname="ScreenFx.VolumeAsset" preserve="all" />
<type fullname="ScreenFx.VolumeTrack" preserve="all" />
<type fullname="ScreenFx.CameraBehaviour" preserve="nothing" serialized="true" />
<type fullname="ScreenFx.NoiseBehaviour" preserve="nothing" serialized="true" />
<type fullname="ScreenFx.Optional`1[Cinemachine.NoiseSettings]" preserve="nothing" serialized="true" />
<type fullname="ScreenFx.Optional`1[UnityEngine.Sprite]" preserve="nothing" serialized="true" />
<type fullname="ScreenFx.ScreenBehaviour" preserve="nothing" serialized="true" />
<type fullname="ScreenFx.VolumeBehaviour" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Unity.2D.SpriteShape.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.U2D.SpriteShape" preserve="all" />
<type fullname="UnityEngine.U2D.SpriteShapeController" preserve="all" />
<type fullname="UnityEngine.U2D.AngleRange" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.U2D.CornerSprite" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.U2D.Spline" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.U2D.SplineControlPoint" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Unity.Addressables, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
<type fullname="UnityEngine.AddressableAssets.Addressables" preserve="all" />
</assembly>
<assembly fullname="Unity.Localization, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Localization.Components.LocalizeSpriteEvent" preserve="all" />
<type fullname="UnityEngine.Localization.Components.LocalizeStringEvent" preserve="all" />
<type fullname="UnityEngine.Localization.Locale" preserve="all" />
<type fullname="UnityEngine.Localization.Tables.AssetTable" preserve="all" />
<type fullname="UnityEngine.Localization.Tables.SharedTableData" preserve="all" />
<type fullname="UnityEngine.Localization.Tables.StringTable" preserve="all" />
<type fullname="UnityEngine.Localization.Events.UnityEventSprite" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Events.UnityEventString" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.LocalizedSprite" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.LocalizedString" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.SmartFormat.PersistentVariables.StringVariable" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.SmartFormat.PersistentVariables.VariableNameValuePair" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Tables.TableEntryReference" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Tables.TableReference" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.LocaleIdentifier" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Metadata.MetadataCollection" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Metadata.AssetTypeMetadata" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Metadata.Comment" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Tables.DistributedUIDGenerator" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Tables.SharedTableData/SharedTableEntry" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Metadata.SmartFormatTag" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Tables.TableEntryData" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Unity.RenderPipelines.Core.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Rendering.Volume" preserve="all" />
<type fullname="UnityEngine.Rendering.VolumeProfile" preserve="all" />
<type fullname="UnityEngine.Rendering.BoolParameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.ClampedFloatParameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.ColorParameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.FloatParameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.Vector2Parameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.ClampedIntParameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.NoInterpClampedFloatParameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.NoInterpClampedIntParameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.NoInterpColorParameter" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Rendering.Texture2DParameter" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Unity.RenderPipelines.Universal.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Rendering.Universal.ColorAdjustments" preserve="all" />
<type fullname="UnityEngine.Rendering.Universal.Light2D" preserve="all" />
<type fullname="UnityEngine.Rendering.Universal.UniversalAdditionalCameraData" preserve="all" />
<type fullname="UnityEngine.Rendering.Universal.Vignette" preserve="all" />
<type fullname="UnityEngine.Rendering.Universal.TemporalAA/Settings" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider" preserve="all" />
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.AtlasSpriteProvider" preserve="all" />
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider" preserve="all" />
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider" preserve="all" />
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.LegacyResourcesProvider" preserve="all" />
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.SceneProvider" preserve="all" />
</assembly>
<assembly fullname="Unity.TextMeshPro, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="TMPro.TextMeshPro" preserve="all" />
<type fullname="TMPro.TextMeshProUGUI" preserve="all" />
<type fullname="TMPro.TMP_Dropdown" preserve="all" />
<type fullname="TMPro.TMP_FontAsset" preserve="all" />
<type fullname="TMPro.TMP_InputField" preserve="all" />
<type fullname="TMPro.FaceInfo_Legacy" preserve="nothing" serialized="true" />
<type fullname="TMPro.FontAssetCreationSettings" preserve="nothing" serialized="true" />
<type fullname="TMPro.KerningTable" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_Character" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_Dropdown/DropdownEvent" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_Dropdown/OptionData" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_Dropdown/OptionDataList" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_FontFeatureTable" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_FontWeightPair" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_GlyphAdjustmentRecord" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_GlyphPairAdjustmentRecord" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_GlyphValueRecord" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_InputField/OnChangeEvent" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_InputField/SelectionEvent" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_InputField/SubmitEvent" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_InputField/TextSelectionEvent" preserve="nothing" serialized="true" />
<type fullname="TMPro.TMP_InputField/TouchScreenKeyboardEvent" preserve="nothing" serialized="true" />
<type fullname="TMPro.VertexGradient" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Unity.Timeline, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Timeline.ActivationPlayableAsset" preserve="all" />
<type fullname="UnityEngine.Timeline.ActivationTrack" preserve="all" />
<type fullname="UnityEngine.Timeline.AnimationPlayableAsset" preserve="all" />
<type fullname="UnityEngine.Timeline.AnimationTrack" preserve="all" />
<type fullname="UnityEngine.Timeline.GroupTrack" preserve="all" />
<type fullname="UnityEngine.Timeline.MarkerTrack" preserve="all" />
<type fullname="UnityEngine.Timeline.SignalAsset" preserve="all" />
<type fullname="UnityEngine.Timeline.SignalEmitter" preserve="all" />
<type fullname="UnityEngine.Timeline.SignalReceiver" preserve="all" />
<type fullname="UnityEngine.Timeline.SignalTrack" preserve="all" />
<type fullname="UnityEngine.Timeline.TimelineAsset" preserve="all" />
<type fullname="UnityEngine.Timeline.MarkerList" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Timeline.TimelineAsset/EditorSettings" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Timeline.TimelineClip" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Timeline.SignalReceiver/EventKeyValue" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="UnityEngine.AnimationModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.AnimationClip" preserve="all" />
<type fullname="UnityEngine.Animator" preserve="all" />
<type fullname="UnityEngine.RuntimeAnimatorController" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Camera" preserve="all" />
<type fullname="UnityEngine.ComputeShader" preserve="all" />
<type fullname="UnityEngine.GameObject" preserve="all" />
<type fullname="UnityEngine.LightmapSettings" preserve="all" />
<type fullname="UnityEngine.LightProbes" preserve="all" />
<type fullname="UnityEngine.LineRenderer" preserve="all" />
<type fullname="UnityEngine.Material" preserve="all" />
<type fullname="UnityEngine.Mesh" preserve="all" />
<type fullname="UnityEngine.MeshFilter" preserve="all" />
<type fullname="UnityEngine.MeshRenderer" preserve="all" />
<type fullname="UnityEngine.MonoBehaviour" preserve="all" />
<type fullname="UnityEngine.Object" preserve="all" />
<type fullname="UnityEngine.RectTransform" preserve="all" />
<type fullname="UnityEngine.RenderSettings" preserve="all" />
<type fullname="UnityEngine.RenderTexture" preserve="all" />
<type fullname="UnityEngine.Shader" preserve="all" />
<type fullname="UnityEngine.Sprite" preserve="all" />
<type fullname="UnityEngine.SpriteRenderer" preserve="all" />
<type fullname="UnityEngine.Texture2D" preserve="all" />
<type fullname="UnityEngine.Transform" preserve="all" />
<type fullname="UnityEngine.U2D.SpriteAtlas" preserve="all" />
<type fullname="UnityEngine.Events.ArgumentCache" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Events.PersistentCallGroup" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Events.PersistentListenerMode" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Events.UnityEvent" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Events.UnityEvent`2[System.String,System.String]" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.RectOffset" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Events.UnityEvent`1[System.Int32]" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Events.UnityEvent`2[System.Single,System.Single]" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="UnityEngine.DirectorModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Playables.PlayableDirector" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.ParticleSystemModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.ParticleSystem" preserve="all" />
<type fullname="UnityEngine.ParticleSystemRenderer" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.Physics2DModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.BoxCollider2D" preserve="all" />
<type fullname="UnityEngine.CircleCollider2D" preserve="all" />
<type fullname="UnityEngine.PolygonCollider2D" preserve="all" />
<type fullname="UnityEngine.Rigidbody2D" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.PhysicsModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.BoxCollider" preserve="all" />
<type fullname="UnityEngine.Rigidbody" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.SpriteMaskModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.SpriteMask" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.SpriteShapeModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.U2D.SpriteShapeRenderer" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.TextRenderingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Font" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.EventSystems.EventSystem" preserve="all" />
<type fullname="UnityEngine.EventSystems.Physics2DRaycaster" preserve="all" />
<type fullname="UnityEngine.EventSystems.StandaloneInputModule" preserve="all" />
<type fullname="UnityEngine.UI.Button" preserve="all" />
<type fullname="UnityEngine.UI.CanvasScaler" preserve="all" />
<type fullname="UnityEngine.UI.ContentSizeFitter" preserve="all" />
<type fullname="UnityEngine.UI.GraphicRaycaster" preserve="all" />
<type fullname="UnityEngine.UI.GridLayoutGroup" preserve="all" />
<type fullname="UnityEngine.UI.HorizontalLayoutGroup" preserve="all" />
<type fullname="UnityEngine.UI.Image" preserve="all" />
<type fullname="UnityEngine.UI.LayoutElement" preserve="all" />
<type fullname="UnityEngine.UI.Mask" preserve="all" />
<type fullname="UnityEngine.UI.Outline" preserve="all" />
<type fullname="UnityEngine.UI.RawImage" preserve="all" />
<type fullname="UnityEngine.UI.RectMask2D" preserve="all" />
<type fullname="UnityEngine.UI.Scrollbar" preserve="all" />
<type fullname="UnityEngine.UI.ScrollRect" preserve="all" />
<type fullname="UnityEngine.UI.Slider" preserve="all" />
<type fullname="UnityEngine.UI.Text" preserve="all" />
<type fullname="UnityEngine.UI.Toggle" preserve="all" />
<type fullname="UnityEngine.UI.VerticalLayoutGroup" preserve="all" />
<type fullname="UnityEngine.UI.AnimationTriggers" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.Button/ButtonClickedEvent" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.ColorBlock" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.FontData" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.MaskableGraphic/CullStateChangedEvent" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.Navigation" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.ScrollRect/ScrollRectEvent" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.Scrollbar/ScrollEvent" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.Slider/SliderEvent" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.SpriteState" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.UI.Toggle/ToggleEvent" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.EventSystems.EventTrigger/Entry" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.EventSystems.EventTrigger/TriggerEvent" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="UnityEngine.UIModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Canvas" preserve="all" />
<type fullname="UnityEngine.CanvasGroup" preserve="all" />
<type fullname="UnityEngine.CanvasRenderer" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.VFXModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.VFX.VFXRenderer" preserve="all" />
<type fullname="UnityEngine.VFX.VisualEffect" preserve="all" />
<type fullname="UnityEngine.VFX.VisualEffectAsset" preserve="all" />
</assembly>
<assembly fullname="VolFx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="VolFx.AdjustmentsVol" preserve="all" />
<type fullname="VolFx.AsciiVol" preserve="all" />
<type fullname="VolFx.BloomVol" preserve="all" />
<type fullname="VolFx.BlurVol" preserve="all" />
<type fullname="VolFx.ChromaticVol" preserve="all" />
<type fullname="VolFx.DistortVol" preserve="all" />
<type fullname="VolFx.DitherVol" preserve="all" />
<type fullname="VolFx.GlitchVol" preserve="all" />
<type fullname="VolFx.OutlineVol" preserve="all" />
<type fullname="VolFx.PixelationVol" preserve="all" />
<type fullname="VolFx.VhsVol" preserve="all" />
<type fullname="VolFx.CurveParameter" preserve="nothing" serialized="true" />
<type fullname="VolFx.CurveValue" preserve="nothing" serialized="true" />
<type fullname="VolFx.DitherVol/NoiseModeParameter" preserve="nothing" serialized="true" />
<type fullname="VolFx.GradientParameter" preserve="nothing" serialized="true" />
<type fullname="VolFx.GradientValue" preserve="nothing" serialized="true" />
<type fullname="VolFx.OutlineVol/ModeParameter" preserve="nothing" serialized="true" />
<type fullname="VolFx.OutlineVol/RemapParameter" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="YarnSpinner.Unity, Version=2.4.2.0, Culture=neutral, PublicKeyToken=null">
<type fullname="Yarn.Unity.DialogueRunner" preserve="all" />
<type fullname="Yarn.Unity.Localization" preserve="all" />
<type fullname="Yarn.Unity.YarnProject" preserve="all" />
<type fullname="Yarn.Unity.DialogueRunner/StringUnityEvent" preserve="nothing" serialized="true" />
<type fullname="Yarn.Unity.UnityLocalization.LineMetadata" preserve="nothing" serialized="true" />
<type fullname="Yarn.Unity.LineMetadata" preserve="nothing" serialized="true" />
<type fullname="Yarn.Unity.LineMetadata/StringDictionary" preserve="nothing" serialized="true" />
<type fullname="Yarn.Unity.Localization/AssetDictionary" preserve="nothing" serialized="true" />
<type fullname="Yarn.Unity.Localization/StringDictionary" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="UnityEngine.TextCoreFontEngineModule">
<type fullname="UnityEngine.TextCore.FaceInfo" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.TextCore.Glyph" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.TextCore.GlyphMetrics" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.TextCore.GlyphRect" preserve="nothing" serialized="true" />
</assembly>
</linker>
@@ -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();
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7eb275cadab046c44a9f46f3f475145e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+345
View File
@@ -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}
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: d54d55d9be1bc4d4b9eadd960d993a80
TextScriptImporter:
guid: d4b95f599ab563c45a074014a67459fb
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f38a6a6bc9a88284496050743d6247e9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,214 @@
using UnityEngine;
namespace AibisDream
{
/// <summary>
/// BlockPuzzle网格组件
/// 实现IBlockPuzzleGrid接口,管理整个游戏网格的状态和操作
/// </summary>
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);
}
}
/// <summary>
/// 初始化网格
/// </summary>
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();
}
/// <summary>
/// 使用Inspector中的参数初始化网格
/// </summary>
public void Initialize()
{
Initialize(width, height, cellSize, transform.position);
}
/// <summary>
/// 重新初始化网格(使用新的参数)
/// </summary>
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;
}
/// <summary>
/// 检查网格是否已初始化
/// </summary>
public bool IsInitialized()
{
return _isInitialized;
}
private void OnValidate()
{
// 确保参数有效
width = Mathf.Max(1, width);
height = Mathf.Max(1, height);
cellSize = Mathf.Max(0.1f, cellSize);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 990de8ef2a6774544b9bc9b64af0a8a5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,148 @@
using UnityEngine;
namespace AibisDream
{
/// <summary>
/// BlockPuzzle网格系统使用示例
/// 演示如何使用网格系统和可视化组件
/// </summary>
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();
}
}
/// <summary>
/// 测试:在随机位置放置一个格子
/// </summary>
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);
}
}
}
/// <summary>
/// 测试:在鼠标位置放置格子
/// </summary>
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);
}
}
}
}
/// <summary>
/// 测试:清空网格
/// </summary>
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();
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cfe4f41ce15355345b390aa2701f3f46
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,16 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace AibisDream
{
/// <summary>
/// BlockPuzzle游戏系统
/// 整合所有子系统的核心控制器
/// </summary>
public class BlockPuzzleSystem : MonoBehaviour
{
// 接口引用将在实现类中注入
// 这里先定义基础框架接口结构
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c452a931d2651e5449cf3779882cad19
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,337 @@
using System.Collections.Generic;
using UnityEngine;
namespace AibisDream
{
/// <summary>
/// 网格可视化组件
/// 负责在Unity场景中可视化显示网格和单元格状态
/// </summary>
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();
}
/// <summary>
/// 初始化网格
/// </summary>
public void InitializeGrid()
{
// 优先使用外部网格组件
if (gridComponent != null)
{
// 如果组件还没有初始化,先初始化它
if (!gridComponent.IsInitialized())
{
gridComponent.Initialize();
}
_grid = gridComponent;
}
else
{
// 如果没有外部网格,创建内部网格组件
if (_internalGrid == null)
{
_internalGrid = gameObject.GetComponent<BlockPuzzleGrid>();
if (_internalGrid == null)
{
_internalGrid = gameObject.AddComponent<BlockPuzzleGrid>();
}
}
_internalGrid.Initialize(gridWidth, gridHeight, cellSize, transform.position);
_grid = _internalGrid;
}
CreateVisualization();
}
/// <summary>
/// 设置网格引用
/// </summary>
public void SetGrid(IBlockPuzzleGrid grid)
{
_grid = grid;
ClearVisualization();
CreateVisualization();
}
/// <summary>
/// 创建可视化
/// </summary>
private void CreateVisualization()
{
if (_grid == null) return;
if (showGridLines)
{
DrawGridLines();
}
if (showCellSprites)
{
CreateCellSprites();
}
}
/// <summary>
/// 绘制网格线
/// </summary>
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
);
}
}
/// <summary>
/// 创建一条线
/// </summary>
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>();
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;
}
/// <summary>
/// 创建单元格精灵
/// </summary>
private void CreateCellSprites()
{
// 清除旧的单元格
ClearCellSprites();
// 为每个单元格创建可视化对象
for (int x = 0; x < _grid.Width; x++)
{
for (int y = 0; y < _grid.Height; y++)
{
CreateCellSprite(x, y);
}
}
}
/// <summary>
/// 创建单个单元格精灵
/// </summary>
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<SpriteRenderer>();
// 如果没有指定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;
}
/// <summary>
/// 创建默认的白色Sprite
/// </summary>
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);
}
/// <summary>
/// 更新单元格可视化状态
/// </summary>
public void UpdateCellVisual(int x, int y)
{
if (!_cellObjects.TryGetValue((x, y), out GameObject cellObj))
{
return;
}
SpriteRenderer spriteRenderer = cellObj.GetComponent<SpriteRenderer>();
if (spriteRenderer == null) return;
GridCellState state = _grid.GetCellState(x, y);
spriteRenderer.color = state == GridCellState.Occupied ? occupiedCellColor : emptyCellColor;
}
/// <summary>
/// 更新所有单元格可视化
/// </summary>
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);
}
}
}
/// <summary>
/// 清除单元格精灵
/// </summary>
private void ClearCellSprites()
{
foreach (var kvp in _cellObjects)
{
if (Application.isPlaying)
{
Destroy(kvp.Value);
}
else
{
DestroyImmediate(kvp.Value);
}
}
_cellObjects.Clear();
}
/// <summary>
/// 清除所有可视化
/// </summary>
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);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d364afd8a560b4447b86f55c52c73d7a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,139 @@
using System;
namespace AibisDream
{
/// <summary>
/// 游戏状态
/// </summary>
public enum GameState
{
NotStarted, // 未开始
Playing, // 游戏中
Paused, // 暂停
GameOver // 游戏结束
}
/// <summary>
/// 游戏逻辑接口
/// 负责管理游戏的整体流程和状态
/// </summary>
public interface IBlockPuzzleGameLogic
{
/// <summary>
/// 当前游戏状态
/// </summary>
GameState CurrentState { get; }
/// <summary>
/// 当前分数(已放置的格子数量)
/// </summary>
int Score { get; }
/// <summary>
/// 当前选中的形状
/// </summary>
IBlockShape CurrentShape { get; }
/// <summary>
/// 网格系统
/// </summary>
IBlockPuzzleGrid Grid { get; }
/// <summary>
/// 放置验证器
/// </summary>
IPlacementValidator Validator { get; }
/// <summary>
/// 游戏开始事件
/// </summary>
event Action OnGameStart;
/// <summary>
/// 游戏结束事件
/// </summary>
event Action OnGameOver;
/// <summary>
/// 形状放置成功事件
/// </summary>
event Action<IBlockShape, int, int> OnShapePlaced;
/// <summary>
/// 形状放置失败事件
/// </summary>
event Action<IBlockShape, PlacementResult> OnShapePlaceFailed;
/// <summary>
/// 分数变化事件
/// </summary>
event Action<int> OnScoreChanged;
/// <summary>
/// 初始化游戏
/// </summary>
/// <param name="gridWidth">网格宽度</param>
/// <param name="gridHeight">网格高度</param>
void InitializeGame(int gridWidth, int gridHeight);
/// <summary>
/// 开始游戏
/// </summary>
void StartGame();
/// <summary>
/// 暂停游戏
/// </summary>
void PauseGame();
/// <summary>
/// 继续游戏
/// </summary>
void ResumeGame();
/// <summary>
/// 结束游戏
/// </summary>
void EndGame();
/// <summary>
/// 重置游戏
/// </summary>
void ResetGame();
/// <summary>
/// 选择形状
/// </summary>
/// <param name="shape">要选择的形状</param>
void SelectShape(IBlockShape shape);
/// <summary>
/// 尝试放置当前选中的形状到指定位置
/// </summary>
/// <param name="gridX">网格X坐标</param>
/// <param name="gridY">网格Y坐标</param>
/// <returns>是否放置成功</returns>
bool TryPlaceShape(int gridX, int gridY);
/// <summary>
/// 旋转当前选中的形状
/// </summary>
/// <param name="angle">旋转角度</param>
void RotateCurrentShape(RotationAngle angle);
/// <summary>
/// 检查是否还有可放置的形状
/// </summary>
/// <param name="availableShapes">可用的形状列表</param>
/// <returns>是否还有可放置的形状</returns>
bool HasPlaceableShapes(IBlockShape[] availableShapes);
/// <summary>
/// 获取下一个可用的形状
/// </summary>
/// <param name="shapePool">形状池</param>
/// <returns>下一个形状,如果没有则返回null</returns>
IBlockShape GetNextShape(IBlockShape[] shapePool);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4603b37a885792d4b85d6d5d392d4862
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,122 @@
using UnityEngine;
namespace AibisDream
{
/// <summary>
/// 网格单元格状态
/// </summary>
public enum GridCellState
{
Empty = 0, // 空
Occupied = 1 // 已占用
}
/// <summary>
/// 游戏网格系统接口(整个网格)
/// 负责管理整个游戏网格的状态和操作,包括:
/// - 网格的整体尺寸和配置
/// - 所有单元格的状态管理
/// - 坐标转换(世界坐标 ↔ 网格坐标)
/// - 网格级别的操作(清空、统计等)
///
/// 注意:单个单元格(Cell)通过坐标访问,没有独立接口
/// </summary>
public interface IBlockPuzzleGrid
{
/// <summary>
/// 网格宽度
/// </summary>
int Width { get; }
/// <summary>
/// 网格高度
/// </summary>
int Height { get; }
/// <summary>
/// 网格单元格大小(世界单位)
/// </summary>
float CellSize { get; }
/// <summary>
/// 网格原点位置(世界坐标)
/// </summary>
Vector3 Origin { get; }
/// <summary>
/// 初始化网格
/// </summary>
/// <param name="width">宽度</param>
/// <param name="height">高度</param>
/// <param name="cellSize">单元格大小</param>
/// <param name="origin">原点位置</param>
void Initialize(int width, int height, float cellSize, Vector3 origin);
/// <summary>
/// 获取指定位置的单元格状态
/// </summary>
/// <param name="x">网格X坐标</param>
/// <param name="y">网格Y坐标</param>
/// <returns>单元格状态</returns>
GridCellState GetCellState(int x, int y);
/// <summary>
/// 设置指定位置的单元格状态
/// </summary>
/// <param name="x">网格X坐标</param>
/// <param name="y">网格Y坐标</param>
/// <param name="state">单元格状态</param>
void SetCellState(int x, int y, GridCellState state);
/// <summary>
/// 检查指定位置是否在网格范围内
/// </summary>
/// <param name="x">网格X坐标</param>
/// <param name="y">网格Y坐标</param>
/// <returns>是否在范围内</returns>
bool IsValidPosition(int x, int y);
/// <summary>
/// 检查指定位置是否为空
/// </summary>
/// <param name="x">网格X坐标</param>
/// <param name="y">网格Y坐标</param>
/// <returns>是否为空</returns>
bool IsCellEmpty(int x, int y);
/// <summary>
/// 世界坐标转换为网格坐标
/// </summary>
/// <param name="worldPos">世界坐标</param>
/// <param name="gridX">输出的网格X坐标</param>
/// <param name="gridY">输出的网格Y坐标</param>
/// <returns>是否转换成功</returns>
bool WorldToGrid(Vector3 worldPos, out int gridX, out int gridY);
/// <summary>
/// 网格坐标转换为世界坐标
/// </summary>
/// <param name="gridX">网格X坐标</param>
/// <param name="gridY">网格Y坐标</param>
/// <returns>世界坐标</returns>
Vector3 GridToWorld(int gridX, int gridY);
/// <summary>
/// 清空整个网格
/// </summary>
void Clear();
/// <summary>
/// 获取已占用的单元格数量
/// </summary>
/// <returns>已占用的单元格数量</returns>
int GetOccupiedCount();
/// <summary>
/// 获取总单元格数量
/// </summary>
/// <returns>总单元格数量</returns>
int GetTotalCellCount();
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 44bbdf523b438ef4aa34868e92b91aed
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,106 @@
using UnityEngine;
namespace AibisDream
{
/// <summary>
/// 形状旋转角度
/// </summary>
public enum RotationAngle
{
Rotate0 = 0, // 0度
Rotate90 = 90, // 90度
Rotate180 = 180, // 180度
Rotate270 = 270 // 270度
}
/// <summary>
/// 形状块接口
/// 负责管理形状的数据和操作
/// </summary>
public interface IBlockShape
{
/// <summary>
/// 形状的唯一ID
/// </summary>
int ShapeId { get; }
/// <summary>
/// 形状名称
/// </summary>
string ShapeName { get; }
/// <summary>
/// 当前旋转角度
/// </summary>
RotationAngle CurrentRotation { get; }
/// <summary>
/// 获取当前形状的宽度(考虑旋转)
/// </summary>
int Width { get; }
/// <summary>
/// 获取当前形状的高度(考虑旋转)
/// </summary>
int Height { get; }
/// <summary>
/// 获取形状占用的格子数量
/// </summary>
int BlockCount { get; }
/// <summary>
/// 获取原始形状模式(未旋转)
/// </summary>
/// <returns>二维数组,1表示有格子,0表示空</returns>
int[,] GetOriginalPattern();
/// <summary>
/// 获取当前形状模式(考虑旋转)
/// </summary>
/// <returns>二维数组,1表示有格子,0表示空</returns>
int[,] GetCurrentPattern();
/// <summary>
/// 旋转形状
/// </summary>
/// <param name="angle">旋转角度</param>
void Rotate(RotationAngle angle);
/// <summary>
/// 顺时针旋转90度
/// </summary>
void RotateClockwise();
/// <summary>
/// 逆时针旋转90度
/// </summary>
void RotateCounterClockwise();
/// <summary>
/// 重置旋转角度为0
/// </summary>
void ResetRotation();
/// <summary>
/// 检查指定位置是否有格子
/// </summary>
/// <param name="x">形状内的X坐标(相对坐标)</param>
/// <param name="y">形状内的Y坐标(相对坐标)</param>
/// <returns>是否有格子</returns>
bool HasBlockAt(int x, int y);
/// <summary>
/// 获取形状的所有格子位置(相对坐标)
/// </summary>
/// <returns>格子位置列表</returns>
Vector2Int[] GetBlockPositions();
/// <summary>
/// 创建形状的副本
/// </summary>
/// <returns>形状副本</returns>
IBlockShape Clone();
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b3b17304622be4e46b270e3d475b1300
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,57 @@
namespace AibisDream
{
/// <summary>
/// 形状工厂接口
/// 负责创建和管理形状对象
/// </summary>
public interface IBlockShapeFactory
{
/// <summary>
/// 创建指定ID的形状
/// </summary>
/// <param name="shapeId">形状ID</param>
/// <returns>形状对象,如果ID不存在则返回null</returns>
IBlockShape CreateShape(int shapeId);
/// <summary>
/// 创建指定名称的形状
/// </summary>
/// <param name="shapeName">形状名称</param>
/// <returns>形状对象,如果名称不存在则返回null</returns>
IBlockShape CreateShape(string shapeName);
/// <summary>
/// 创建随机形状
/// </summary>
/// <returns>随机形状对象</returns>
IBlockShape CreateRandomShape();
/// <summary>
/// 获取所有可用的形状ID列表
/// </summary>
/// <returns>形状ID数组</returns>
int[] GetAllShapeIds();
/// <summary>
/// 获取所有可用的形状名称列表
/// </summary>
/// <returns>形状名称数组</returns>
string[] GetAllShapeNames();
/// <summary>
/// 注册新形状
/// </summary>
/// <param name="shapeId">形状ID</param>
/// <param name="shapeName">形状名称</param>
/// <param name="pattern">形状模式(二维数组)</param>
void RegisterShape(int shapeId, string shapeName, int[,] pattern);
/// <summary>
/// 检查形状ID是否存在
/// </summary>
/// <param name="shapeId">形状ID</param>
/// <returns>是否存在</returns>
bool HasShape(int shapeId);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 735c986ae1357ab489f5a5951ffb4bde
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,51 @@
namespace AibisDream
{
/// <summary>
/// 放置验证结果
/// </summary>
public enum PlacementResult
{
Success, // 可以放置
OutOfBounds, // 超出边界
Overlap, // 与已有块重叠
InvalidPosition // 无效位置
}
/// <summary>
/// 放置检测接口
/// 负责验证形状是否可以放置在指定位置
/// </summary>
public interface IPlacementValidator
{
/// <summary>
/// 检查形状是否可以放置在指定位置
/// </summary>
/// <param name="grid">网格系统</param>
/// <param name="shape">要放置的形状</param>
/// <param name="gridX">网格X坐标(形状左上角位置)</param>
/// <param name="gridY">网格Y坐标(形状左上角位置)</param>
/// <returns>放置验证结果</returns>
PlacementResult CanPlace(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY);
/// <summary>
/// 检查形状是否可以放置在指定位置(详细版本)
/// </summary>
/// <param name="grid">网格系统</param>
/// <param name="shape">要放置的形状</param>
/// <param name="gridX">网格X坐标(形状左上角位置)</param>
/// <param name="gridY">网格Y坐标(形状左上角位置)</param>
/// <param name="failureReason">失败原因(如果返回false</param>
/// <returns>是否可以放置</returns>
bool CanPlaceDetailed(IBlockPuzzleGrid grid, IBlockShape shape, int gridX, int gridY, out PlacementResult failureReason);
/// <summary>
/// 获取形状在指定位置的所有占用格子坐标
/// </summary>
/// <param name="shape">形状</param>
/// <param name="gridX">网格X坐标(形状左上角位置)</param>
/// <param name="gridY">网格Y坐标(形状左上角位置)</param>
/// <returns>占用格子的网格坐标数组</returns>
(int x, int y)[] GetOccupiedCells(IBlockShape shape, int gridX, int gridY);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e4ebc4e9f404ead41ac713a7a31fe330
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: