From 1619bedd774124c26bef3d697b539cdd9c9d98c1 Mon Sep 17 00:00:00 2001 From: Roman <1325980292@qq.com> Date: Tue, 7 Dec 2021 21:39:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=EF=BC=9A=E6=90=AD=E5=BB=BA?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E7=9A=84=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.编写基督小怪逻辑 (1.继承自爱欲品类(巡逻、发现、追踪、击飞、被击飞、死亡、转身等功能) (2.重写Seek函数,因为爱欲品是一直Seek到玩家位置,而基督需要保留一定距离 ((1.Seek时判断基督小怪与玩家的距离,同时指定一个public变量代表攻击范围。若此距离小于攻击范围,触发攻击事件,否则移动位置靠近player (3.重写OnTouchThePlayer事件,使其与NormalEnemy一致 (4.新增攻击事件 ((1.修改状态为atk ((2.创建一个基督闪电攻击器,作为预制体保存在JiDu中 ((3.初始化攻击器 ((4.等待攻击器触发攻击完毕信号,触发恢复事件(无语句) (5.新增恢复事件 ((1.修改状态为Seek *:效果:依次降下指定数量的雷(触发器判定区),前一个结束后下一个才开始 2.编写攻击器逻辑,可以指定闪电道数、闪电位置间隔、两道闪电之间的间隔时间、每道闪电的持续时间、闪电的判定范围、攻击后硬直 *:整理脚本,添加注释、摘要、分层和属性特性 至此,基督小怪的逻辑开发完毕 至此,所有小怪的逻辑均开发完毕 通过导出测试 下班 --- Assets/Prefabs/基督闪电攻击器.prefab | 433 ++++++++++++++++++ Assets/Prefabs/基督闪电攻击器.prefab.meta | 7 + Assets/Scenes/test.unity | 317 ++++++++++++- Assets/Scripts/AiYuPin.cs | 5 +- Assets/Scripts/JiDu.cs | 127 +++++ Assets/Scripts/JiDu.cs.meta | 11 + .../Scripts/LightningAttackAdministrator.cs | 155 +++++++ .../LightningAttackAdministrator.cs.meta | 11 + Assets/Sprites/早期临时混乱/3关怪.png.meta | 38 +- 9 files changed, 1098 insertions(+), 6 deletions(-) create mode 100644 Assets/Prefabs/基督闪电攻击器.prefab create mode 100644 Assets/Prefabs/基督闪电攻击器.prefab.meta create mode 100644 Assets/Scripts/JiDu.cs create mode 100644 Assets/Scripts/JiDu.cs.meta create mode 100644 Assets/Scripts/LightningAttackAdministrator.cs create mode 100644 Assets/Scripts/LightningAttackAdministrator.cs.meta diff --git a/Assets/Prefabs/基督闪电攻击器.prefab b/Assets/Prefabs/基督闪电攻击器.prefab new file mode 100644 index 0000000..c647a47 --- /dev/null +++ b/Assets/Prefabs/基督闪电攻击器.prefab @@ -0,0 +1,433 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5890479827831270894 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5890479827831270895} + - component: {fileID: 5890479827831270888} + - component: {fileID: 5890479827831270889} + m_Layer: 0 + m_Name: Square (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &5890479827831270895 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479827831270894} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.37, y: 0, z: 4.1154423} + m_LocalScale: {x: 0.4875, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5890479828300330399} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &5890479827831270888 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479827831270894} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + 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: 7482667652216324306, guid: 48e93eef0688c4a259cb0eddcd8661f7, type: 3} + 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!61 &5890479827831270889 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479827831270894} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + 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.5, y: 0.5} + oldSize: {x: 1, y: 1} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!1 &5890479828037865974 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5890479828037865975} + - component: {fileID: 5890479828037865968} + - component: {fileID: 5890479828037865969} + m_Layer: 0 + m_Name: Square + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &5890479828037865975 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828037865974} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.97, y: 0, z: 4.1154423} + m_LocalScale: {x: 0.4875, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5890479828300330399} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &5890479828037865968 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828037865974} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + 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: 7482667652216324306, guid: 48e93eef0688c4a259cb0eddcd8661f7, type: 3} + 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!61 &5890479828037865969 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828037865974} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + 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.5, y: 0.5} + oldSize: {x: 1, y: 1} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!1 &5890479828300330397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5890479828300330399} + - component: {fileID: 5890479828300330398} + - component: {fileID: 5890479828300330392} + m_Layer: 0 + m_Name: "\u57FA\u7763\u95EA\u7535\u653B\u51FB\u5668" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5890479828300330399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828300330397} + 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_Children: + - {fileID: 5890479828037865975} + - {fileID: 5890479828619809182} + - {fileID: 5890479827831270895} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &5890479828300330398 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828300330397} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + 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: 3cb7c35a750699348a04840d1ae1be5e, type: 3} + 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!114 &5890479828300330392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828300330397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9b9747c571ad1fb47a3246703168172c, type: 3} + m_Name: + m_EditorClassIdentifier: + lightingTime: 0.1 + lightingIntervalTime: 0.3 + dir: -1 + lightings: [] + owner: {fileID: 0} + Stiff: 2 +--- !u!1 &5890479828619809181 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5890479828619809182} + - component: {fileID: 5890479828619809183} + - component: {fileID: 5890479828619809176} + m_Layer: 0 + m_Name: Square (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &5890479828619809182 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828619809181} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.7, y: 0, z: 4.1154423} + m_LocalScale: {x: 0.4875, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5890479828300330399} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &5890479828619809183 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828619809181} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + 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: 7482667652216324306, guid: 48e93eef0688c4a259cb0eddcd8661f7, type: 3} + 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!61 &5890479828619809176 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5890479828619809181} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + 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.5, y: 0.5} + oldSize: {x: 1, y: 1} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 diff --git a/Assets/Prefabs/基督闪电攻击器.prefab.meta b/Assets/Prefabs/基督闪电攻击器.prefab.meta new file mode 100644 index 0000000..0bd3d5a --- /dev/null +++ b/Assets/Prefabs/基督闪电攻击器.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7ed7629552eb2f146af80d04ebcb7691 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/test.unity b/Assets/Scenes/test.unity index f74f09b..8a0e644 100644 --- a/Assets/Scenes/test.unity +++ b/Assets/Scenes/test.unity @@ -940,7 +940,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!114 &574826835 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1123,7 +1123,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!61 &659041641 BoxCollider2D: m_ObjectHideFlags: 0 @@ -1442,6 +1442,319 @@ Transform: m_Father: {fileID: 326335323} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &906466579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 906466583} + - component: {fileID: 906466582} + - component: {fileID: 906466581} + - component: {fileID: 906466580} + - component: {fileID: 906466585} + - component: {fileID: 906466586} + - component: {fileID: 906466584} + m_Layer: 0 + m_Name: "\u57FA\u7763" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!61 &906466580 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906466579} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: -2.28, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 1.365, y: 1.565} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 3.72, y: 1.56} + m_EdgeRadius: 0 +--- !u!61 &906466581 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906466579} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + 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.5, y: 0.5} + oldSize: {x: 1.365, y: 1.565} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.85, y: 1.565} + m_EdgeRadius: 0 +--- !u!212 &906466582 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906466579} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + 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: de4ec80e5d0cca6488cb449907a26438, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 1 + 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!4 &906466583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906466579} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.95, y: 0.66, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &906466584 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906466579} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ab73d92b04780f04790d5a4ea79f3649, type: 3} + m_Name: + m_EditorClassIdentifier: + HP: 3 + ATK: 1 + speed: 1 + coin: 0 + canBeHit: 1 + HPLeft: 0 + state: 0 + hitToflyParameter: {x: 3, y: 3} + deadRotationRangeMax: 500 + deadRotationRangeMin: 500 + inPath: 1 + catchOffset: {x: 0, y: 0, z: 0} + breakFreeCount: 5 + breakFreeCountLeft: 0 + atkPositionOffset: 0.5 + atkRange: 3 + lightningAttack: {fileID: 5890479828300330397, guid: 7ed7629552eb2f146af80d04ebcb7691, type: 3} +--- !u!50 &906466585 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906466579} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!114 &906466586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906466579} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -333801856, guid: aa0b1eebb5db27a419fa4564bbe5c9c5, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + delay: 0 + duration: 3 + easeType: 1 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + loops: -1 + id: + loopType: 0 + orientType: 1 + lookAtTransform: {fileID: 0} + lookAtPosition: {x: 0, y: 0, z: 0} + lookAhead: 0.01 + autoPlay: 1 + autoKill: 1 + relative: 0 + isLocal: 0 + isClosedPath: 1 + pathResolution: 10 + pathMode: 3 + lockRotation: 0 + assignForwardAndUp: 0 + forwardDirection: {x: 0, y: 0, z: 1} + upDirection: {x: 0, y: 1, z: 0} + tweenRigidbody: 0 + wps: + - {x: 13.053112, y: 0.6342431, z: 0} + fullWps: [] + path: + wpLengths: + - 0 + - 4.1031933 + - 4.1031933 + wps: + - {x: 8.95, y: 0.66, z: 0} + - {x: 13.053112, y: 0.6342431, z: 0} + - {x: 8.95, y: 0.66, z: 0} + type: 0 + subdivisionsXSegment: 10 + subdivisions: 30 + controlPoints: [] + length: 8.206387 + isFinalized: 1 + timesTable: + - 0 + - 0.5 + - 1 + lengthsTable: [] + inspectorMode: 0 + pathType: 0 + handlesType: 0 + livePreview: 1 + handlesDrawMode: 0 + perspectiveHandleSize: 0.5 + showIndexes: 1 + showWpLength: 0 + pathColor: {r: 1, g: 1, b: 1, a: 0.5} + lastSrcPosition: {x: 8.95, y: 0.66, z: 0} + lastSrcRotation: {x: 0, y: 0, z: 0, w: 1} + wpsDropdown: 0 + dropToFloorOffset: 0 --- !u!1 &971340854 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/AiYuPin.cs b/Assets/Scripts/AiYuPin.cs index 1e0bae5..514c09e 100644 --- a/Assets/Scripts/AiYuPin.cs +++ b/Assets/Scripts/AiYuPin.cs @@ -74,11 +74,10 @@ public class AiYuPin : NormalEnemy /// 控制爱欲品追踪传入的Transform,每帧调用一次 /// /// 要追踪的目标的transform组件 - protected void Seek(Transform target){ - //!!!注意,需要修改。此时会给予爱欲品向上的速度,但Seek只需要左右的速度 + protected virtual void Seek(Transform target){ Vector3 moveDir = (target.transform.position - transform.position).normalized; //给刚体添加位移 - m_rigidbody.position += (Vector2)moveDir * speed * Time.deltaTime; + m_rigidbody.position += (Vector2)moveDir * speed * Time.deltaTime * Vector2.right; //将面部朝向与速度同步 transform.rotation = Quaternion. Euler diff --git a/Assets/Scripts/JiDu.cs b/Assets/Scripts/JiDu.cs new file mode 100644 index 0000000..0395c99 --- /dev/null +++ b/Assets/Scripts/JiDu.cs @@ -0,0 +1,127 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Sirenix.OdinInspector; + +/// +/// 基督小怪类,继承自爱欲品 +/// +public class JiDu : AiYuPin +{ + // _____ _ _ _ + // | __ \ | | | (_) + // | |__) | _| |__ | |_ ___ + // | ___/ | | | '_ \| | |/ __| + // | | | |_| | |_) | | | (__ + // |_| \__,_|_.__/|_|_|\___| + + /// + /// 攻击相对于自身的位置偏移量 + /// + [FoldoutGroup("基督")][Header("攻击相对于自身的位置偏移量")] + public float atkPositionOffset; + /// + /// 攻击范围 + /// + [FoldoutGroup("基督")][Header("攻击范围")] + public float atkRange; + /// + /// 攻击时实例化的攻击器 + /// + [FoldoutGroup("基督")][Header("闪电攻击器")] + public GameObject lightningAttack; + + // _____ _ _ + // | __ \ (_) | | + // | |__) | __ ___ ____ _| |_ ___ + // | ___/ '__| \ \ / / _` | __/ _ \ + // | | | | | |\ V / (_| | || __/ + // |_| |_| |_| \_/ \__,_|\__\___| + + /// + /// 自身到玩家的位置 + /// + [SerializeField][ReadOnly][FoldoutGroup("状态")][Header("自身到玩家的位置")] + private float distanceToPlayer; + + // _____ _ _ ____ _ + // / ____| | | | _ \ | | + // | | __ _| | | |_) | __ _ ___| | __ + // | | / _` | | | _ < / _` |/ __| |/ / + // | |___| (_| | | | |_) | (_| | (__| < + // \_____\__,_|_|_|____/ \__,_|\___|_|\_\ + + void Update(){ + //如果处于追踪状态,则每帧执行Seek + if(state == State.seek) Seek(target); + } + + // _ _ _ + // | \ | | | | + // | \| | ___ _ __ _ __ ___ __ _| | + // | . ` |/ _ \| '__| '_ ` _ \ / _` | | + // | |\ | (_) | | | | | | | | (_| | | + // |_| \_|\___/|_| |_| |_| |_|\__,_|_| + + /// + /// 如果处于Seek状态,则每帧执行一次 + /// + /// 追踪目标 + protected override void Seek(Transform target){ + //计算自己与玩家的距离 + distanceToPlayer = Mathf.Abs(target.position.x - transform.position.x); + //如果距离小于攻击范围,则发动攻击 + if(distanceToPlayer < atkRange)Atk(); + //否则执行爱欲品的Seek,移动追向目标 + else base.Seek(target); + } + + /// + /// 攻击的时候触发 + /// + private void Atk(){ + //修改自身状态至攻击 + state = State.atk; + //判定一下自身和玩家的位置,确定攻击方向 + int atkDir = ((target.position.x - transform.position.x > 0) ? 1:-1); + //生成一个攻击器预制体,并根据攻击方向给予X轴偏移 + LightningAttackAdministrator l = Instantiate( + lightningAttack, + new Vector3( + transform.position.x + atkPositionOffset * atkDir, + transform.position.y, + transform.position.z + ), + Quaternion.identity + ).GetComponent(); + //初始化一下攻击器,给予攻击器主人和方向😍 + l.owner = this; + l.dir = atkDir; + } + + // ______ _ + // | ____| | | + // | |____ _____ _ __ | |_ + // | __\ \ / / _ \ '_ \| __| + // | |___\ V / __/ | | | |_ + // |______\_/ \___|_| |_|\__| + + /// + /// 碰到玩家的时候触发。对于基督小怪来说,玩家碰到它会收到伤害,与继承到的爱欲品不同,但与爱欲品继承的相同,所以返回到父类的父类执行 + /// 我超,不能,base.base,老老实实抄一遍代码吧 + /// + /// 玩家 + protected override void OnTouchThePlayer(MyPlayer player){ + //告诉玩家,你被攻击了 + player.OnBeHit(ATK, + ((transform.position.x - + player.transform.position.x) + > 0) ? 1 : -1);//通过自身位置和玩家位置的比较来返回玩家本次的受击方向 + } + + /// + /// 当攻击器攻击结束,Call这个,把状态恢复至Seek + /// + public void OnAtkEnd(){state = State.seek;} + +} \ No newline at end of file diff --git a/Assets/Scripts/JiDu.cs.meta b/Assets/Scripts/JiDu.cs.meta new file mode 100644 index 0000000..6b70c1f --- /dev/null +++ b/Assets/Scripts/JiDu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab73d92b04780f04790d5a4ea79f3649 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LightningAttackAdministrator.cs b/Assets/Scripts/LightningAttackAdministrator.cs new file mode 100644 index 0000000..af9ecf9 --- /dev/null +++ b/Assets/Scripts/LightningAttackAdministrator.cs @@ -0,0 +1,155 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Sirenix.OdinInspector; + +/// +/// 管理基督小怪召出来的闪电攻击 +/// +public class LightningAttackAdministrator : MonoBehaviour +{ + // _____ _ _ _ + // | __ \ | | | (_) + // | |__) | _| |__ | |_ ___ + // | ___/ | | | '_ \| | |/ __| + // | | | |_| | |_) | | | (__ + // |_| \__,_|_.__/|_|_|\___| + + /// + /// 单道闪电的持续时间 + /// + [Header("单道闪电的持续时间")] + public float lightingTime; + /// + /// 两道闪电之间间隔的时间 + /// + [Header("两道闪电之间间隔的时间")] + public float lightingIntervalTime; + /// + /// 攻击方向,产生这个闪电的怪物攻击时指定 + /// + [Header("攻击方向,产生这个闪电的怪物攻击时指定")][ReadOnly] + public int dir; + /// + /// 这个攻击器的主人。请在发动攻击的时候指定。用来通知主人,本次攻击结束 + /// + public JiDu owner; + /// + /// 基督小怪攻击硬直 + /// + public float Stiff; + + // _____ _ _ + // | __ \ (_) | | + // | |__) | __ ___ ____ _| |_ ___ + // | ___/ '__| \ \ / / _` | __/ _ \ + // | | | | | |\ V / (_| | || __/ + // |_| |_| |_| \_/ \__,_|\__\___| + [SerializeField][ListDrawerSettings][ReadOnly] + private List lightings; + + // _____ _ _ ____ _ + // / ____| | | | _ \ | | + // | | __ _| | | |_) | __ _ ___| | __ + // | | / _` | | | _ < / _` |/ __| |/ / + // | |___| (_| | | | |_) | (_| | (__| < + // \_____\__,_|_|_|____/ \__,_|\___|_|\_\ + void Start(){ + Init(); + StartCoroutine("ATK"); + } + + // _ _ _ + // | \ | | | | + // | \| | ___ _ __ _ __ ___ __ _| | + // | . ` |/ _ \| '__| '_ ` _ \ / _` | | + // | |\ | (_) | | | | | | | | (_| | | + // |_| \_|\___/|_| |_| |_| |_|\__,_|_| + + /// + /// 初始化函数 + /// + private void Init(){ + //处理一下攻击器朝向问题 + if(dir == -1) transform.localScale = new Vector3( + transform.localScale.x * -1, + transform.localScale.y, + transform.localScale.z + ); + //初始化闪电列表,用来控制每一个小闪电 + lightings = new List(transform.childCount); + for (int i = 0; i < transform.childCount; i++){ + Transform temp = transform.GetChild(i); + lightings.Add( + temp.gameObject.AddComponent() + ); + //初始化小闪电的主人和状态 + lightings[i].state = Lighting.State.wait; + lightings[i].owner = this; + } + } + + /// + /// 攻击函数协程 + /// + private IEnumerator ATK(){ + //按顺序遍历每一个小闪电 + foreach(Lighting l in lightings){ + //如果处于等待状态 + if(l.state == Lighting.State.wait){ + //如果不是第一个闪电,则需要等待每个闪电的间隔的时间 + if(l != lightings[0])yield return new WaitForSeconds(lightingIntervalTime); + //等待结束后令闪电攻击 + l.gameObject.SetActive(true); + l.state = Lighting.State.atk; + //然后攻击持续每个小闪电的持续时间 + yield return new WaitForSeconds(lightingTime); + //等待结束后关闭这个小闪电 + l.gameObject.SetActive(false); + l.state = Lighting.State.over; + //循环至下一个小闪电 + } + } + //遍历结束后进入攻击硬直等待 + yield return new WaitForSeconds(Stiff); + //等待结束后通知主人攻击结束,并销毁攻击器 + owner.OnAtkEnd(); + Destroy(gameObject); + } + + + // _______ _ _____ _ + // |__ __| | |/ ____| | + // | | ___ ___ | | | | | __ _ ___ ___ + // | |/ _ \ / _ \| | | | |/ _` / __/ __| + // | | (_) | (_) | | |____| | (_| \__ \__ \ + // |_|\___/ \___/|_|\_____|_|\__,_|___/___/ + + /// + /// 单道小闪电类,主要控制一下碰撞体 + /// + private class Lighting : MonoBehaviour + { + /// + /// 闪电的状态种类 + /// + public enum State{wait,atk,over}; + /// + /// 闪电的当前状态 + /// + public State state; + /// + /// 这道闪电的主人,一个攻击器 + /// + public LightningAttackAdministrator owner; + + void OnTriggerEnter2D(Collider2D other){ + if (other.TryGetComponent(out MyPlayer player)){ + player.OnBeHit(owner.owner.ATK, + ((owner.transform.position.x - player.transform.position.x > 0) ? 1 : -1) + ); + } + } + } + +} diff --git a/Assets/Scripts/LightningAttackAdministrator.cs.meta b/Assets/Scripts/LightningAttackAdministrator.cs.meta new file mode 100644 index 0000000..452ef7d --- /dev/null +++ b/Assets/Scripts/LightningAttackAdministrator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b9747c571ad1fb47a3246703168172c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/早期临时混乱/3关怪.png.meta b/Assets/Sprites/早期临时混乱/3关怪.png.meta index d67a8ea..8814122 100644 --- a/Assets/Sprites/早期临时混乱/3关怪.png.meta +++ b/Assets/Sprites/早期临时混乱/3关怪.png.meta @@ -46,7 +46,7 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 + spritePixelsToUnits: 200 spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 @@ -75,6 +75,42 @@ TextureImporter: overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: []