LAPTOP-OM1V99U2\永远de小亡灵 1 год назад
Родитель
Сommit
8a5b7ca9c9

+ 79 - 5
ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Assassin.prefab

@@ -31,7 +31,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 2437299196472462364}
-  m_RootOrder: 2
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!114 &5104552355235513707
 MonoBehaviour:
@@ -163,6 +163,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 1658938184312316380}
+  - {fileID: 7158672502188833122}
   - {fileID: 2730232521377132808}
   - {fileID: 5061628209490452354}
   - {fileID: 8507731236713456294}
@@ -190,13 +191,15 @@ MonoBehaviour:
   rb: {fileID: 2437299196472462355}
   distance: 0
   dashEffect: {fileID: 2254593709981819441}
-  moveSpeed: 30
+  dashSpeed: 30
   offset: 2
   targetDir: {x: 0, y: 0, z: 0}
   dashTime: 0.8
   downTime: 0.8
   finishTime: 0.8
   body: {fileID: 5216717017252562314}
+  aim: {fileID: 6373916053725309541}
+  aimDistance: 20
 --- !u!54 &2437299196472462355
 Rigidbody:
   m_ObjectHideFlags: 0
@@ -240,7 +243,7 @@ MonoBehaviour:
   isNonAttack: 0
   hptp: 0
   isDie: 0
-  totalHp: 100
+  totalHp: 1000
   hp: 0
   attack1Infos:
   - damage: 400
@@ -402,7 +405,7 @@ Transform:
   - {fileID: 1971427318739414964}
   - {fileID: 7794457276998281569}
   m_Father: {fileID: 2437299196472462364}
-  m_RootOrder: 1
+  m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &5854255137085934375
 GameObject:
@@ -905,7 +908,7 @@ RectTransform:
   m_Children:
   - {fileID: 6098794361404217704}
   m_Father: {fileID: 2437299196472462364}
-  m_RootOrder: 3
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
@@ -1153,3 +1156,74 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1001 &4975682865987921505
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 2437299196472462364}
+    m_Modifications:
+    - target: {fileID: 2123904437201259524, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_Name
+      value: aim
+      objectReference: {fileID: 0}
+    - target: {fileID: 2123904437201259524, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+--- !u!1 &6373916053725309541 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 2123904437201259524, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+  m_PrefabInstance: {fileID: 4975682865987921505}
+  m_PrefabAsset: {fileID: 0}
+--- !u!4 &7158672502188833122 stripped
+Transform:
+  m_CorrespondingSourceObject: {fileID: 2762284929821138691, guid: b7051bb1545467c4b834bfe5db9c3029, type: 3}
+  m_PrefabInstance: {fileID: 4975682865987921505}
+  m_PrefabAsset: {fileID: 0}

+ 118 - 0
ActionTowerDefense/Assets/Resources/Prefab/FX/aim.prefab

@@ -0,0 +1,118 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2123904437201259524
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2762284929821138691}
+  m_Layer: 8
+  m_Name: aim
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2762284929821138691
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2123904437201259524}
+  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: 3129070871053172789}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2913057061146517210
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3129070871053172789}
+  - component: {fileID: 1726539318499222477}
+  m_Layer: 8
+  m_Name: Square
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3129070871053172789
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2913057061146517210}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 0.1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2762284929821138691}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1726539318499222477
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2913057061146517210}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 0
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  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: 311925a002f4447b3a28927169b83ea6, 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

+ 7 - 0
ActionTowerDefense/Assets/Resources/Prefab/FX/aim.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b7051bb1545467c4b834bfe5db9c3029
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 3 - 0
ActionTowerDefense/Assets/Resources/Prefab/Spirits_Assassin.prefab

@@ -271,6 +271,7 @@ MonoBehaviour:
   maxRotateSpeed: 0
   minRotateSpeed: 0
   floatTime: 20
+  floatState: 0
   outlineMats:
   - {fileID: 2100000, guid: eb0e26c1a9cf9a14799273e742b98d21, type: 2}
   id: 0
@@ -278,6 +279,8 @@ MonoBehaviour:
   searchState: 0
   attackDistance: 1.5
   canFly: 0
+  flyHeight: 0
+  flyUpSpeed: 10
   sortingOrder: 1000
   playerID: 0
   hasEffect: 0

+ 29 - 0
ActionTowerDefense/Assets/Resources/Spine/Spirits_Assassin/Spirits_Assassin_Controller.controller

@@ -1122,6 +1122,9 @@ AnimatorStateMachine:
   - serializedVersion: 1
     m_State: {fileID: 2420208522356263172}
     m_Position: {x: 320, y: 600, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 7762287511542934629}
+    m_Position: {x: 320, y: 660, z: 0}
   m_ChildStateMachines: []
   m_AnyStateTransitions: []
   m_EntryTransitions: []
@@ -1296,6 +1299,32 @@ AnimatorState:
   m_MirrorParameter: 
   m_CycleOffsetParameter: 
   m_TimeParameter: 
+--- !u!1102 &7762287511542934629
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: charge
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions: []
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: -954058362601353986}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1102 &8024309173197250462
 AnimatorState:
   serializedVersion: 6

+ 56 - 13
ActionTowerDefense/Assets/Scripts/Spirits/ESpirits_Assassin.cs

@@ -25,7 +25,7 @@ public class ESpirits_Assassin : MonoBehaviour
     [HideInInspector]
     public float distance;
     public DashEffect dashEffect;
-    public float moveSpeed;
+    public float dashSpeed;
     public float offset;
     [HideInInspector]
     public Vector3 targetDir;
@@ -33,11 +33,36 @@ public class ESpirits_Assassin : MonoBehaviour
     public float downTime;
     public float finishTime;
     public GameObject body;
+    public GameObject aim;
+    public float aimDistance;
+    public Character character;
     private void Update()
     {
 
         OnState();
     }
+    public void ReadyToDash(Vector3 pos0, Vector3 pos1)
+    {
+        Vector3 target = (pos0 - pos1).normalized;
+        float distance = time / readyCD * aimDistance;
+        //float distance = aimDistance;
+        aim.transform.position = pos1 + target * distance / 2;
+        aim.transform.localScale =
+            new Vector3(distance, 1, 1);
+
+        Vector3 targetDir = pos0 - pos1;
+        float k = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg;
+        if (targetDir.x < 0)
+        {
+            aim.transform.rotation = Quaternion.Euler(new Vector3(0, 0, k - 180));
+            body.transform.localScale = new Vector3(1, 1, 1);
+        }
+        else
+        {
+            aim.transform.rotation = Quaternion.Euler(new Vector3(0, 0, k));
+            body.transform.localScale = new Vector3(-1, 1, 1);
+        }
+    }
     public void OnState()
     {
         switch (state)
@@ -48,34 +73,45 @@ public class ESpirits_Assassin : MonoBehaviour
                 {
                     enemy.isSpiritsAttack = true;
                     time = 0;
-                    state = AssassinState.FindPlayer;
+                    
                     ChosePlayer();
                     enemy.searchState = SearchState.InSearchScope;
                     enemy.ChangeState(CharacterState.Run);
+                    
+                    character = enemy.targetCharacter;
+                    state = AssassinState.FindPlayer;
                 }
                 break;
             case AssassinState.FindPlayer:
-                ChosePlayer();
-                if (distance < hateDistance)
+                if (Vector3.Distance(transform.position, character.transform.position)
+                    < hateDistance)
                 {
                     
                     enemy.ChangeState(CharacterState.Rush);
                     rb.velocity = Vector3.zero;
-                    enemy.ani.Play("hitted", 0, 0);
+                    enemy.ani.Play("charge", 0, 0);
+                    aim.SetActive(true);
+                    aimDistance = dashTime * dashSpeed;
                     state = AssassinState.ReadyToDash;
                 }
                 break;
             case AssassinState.ReadyToDash:
                 time += Time.deltaTime;
+                ReadyToDash(character.transform.position+Vector3.up,
+                    transform.position+Vector3.up);
                 if (time >= readyCD)
                 {
-                    state = AssassinState.Dash;
+                    
                     dashEffect.isDash = true;
                     dashEffect.isDashAttack = true;
                     targetDir =
-                        (enemy.targetCharacter.transform.position - transform.position).normalized;
+                        (character.transform.position - transform.position).normalized;
                     enemy.ani.Play("attack_summon", 0, 0);
+                    aim.SetActive(false);
+                    aim.transform.localScale = Vector3.one;
                     time = 0;
+                    
+                    state = AssassinState.Dash;
                 }
                 break;
             case AssassinState.Dash:
@@ -94,7 +130,7 @@ public class ESpirits_Assassin : MonoBehaviour
                     else
                     {
                         rb.constraints = RigidbodyConstraints.FreezeAll;
-                        enemy.ani.Play("hitted", 0, 0);
+                        enemy.ani.Play("charge", 0, 0);
                         state = AssassinState.ReadyToDown;
                     }
 
@@ -115,14 +151,21 @@ public class ESpirits_Assassin : MonoBehaviour
                 }
                 break;
             case AssassinState.Down:
-                Dash();
+               
+                if (transform.position.y < 1)
+                {
+                    enemy.ani.Play("fall_end", 0, 0);
+
+                }
+                else
+                {
+                    Dash();
+                }
                 if (enemy.foot.TrigGround)
                 {
                     body.transform.rotation = Quaternion.Euler(Vector3.zero);
-                    
-                    
-                    enemy.ani.Play("idle", 0, 0);
                     state = AssassinState.Finish;
+
                 }
                 break;
             case AssassinState.Finish:
@@ -181,6 +224,6 @@ public class ESpirits_Assassin : MonoBehaviour
         }
         
         
-        rb.velocity = targetDir * moveSpeed;
+        rb.velocity = targetDir * dashSpeed;
     }
 }