Quellcode durchsuchen

铆钉功能相关

wulifu vor 1 Jahr
Ursprung
Commit
8f556c9e3a

+ 3 - 1
ActionTowerDefense/Assets/Resources/Prefab/Enemy_Arrow.prefab

@@ -1013,6 +1013,9 @@ MonoBehaviour:
   searchTrigger: {fileID: 3566347593191160092}
   targetTypes: 010000000300000002000000
   canHitFly: 1
+  linked: 0
+  joint: {fileID: 0}
+  rope: {fileID: 0}
   foot: {fileID: 8639832132450015562}
   extraRiseGravity: -28.8
   extraFallGravity: -14.4
@@ -1038,7 +1041,6 @@ MonoBehaviour:
   soulPrefab: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
   soulStartSpeed: 100
   dropSoulAngle: 90
-  joint: {fileID: 0}
 --- !u!54 &8639832132491289349
 Rigidbody:
   m_ObjectHideFlags: 0

+ 68 - 1
ActionTowerDefense/Assets/Resources/Prefab/Player.prefab

@@ -361,6 +361,66 @@ Transform:
   m_Father: {fileID: 5205406772191310031}
   m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1270928763770490430
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 9098102129482079265}
+  - component: {fileID: 6835827572740498734}
+  - component: {fileID: 8878694457807976444}
+  m_Layer: 0
+  m_Name: EventTrigger
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &9098102129482079265
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1270928763770490430}
+  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: 5205406772191310031}
+  m_RootOrder: 11
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &6835827572740498734
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1270928763770490430}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 0.576, y: 1.8, z: 1}
+  m_Center: {x: 0, y: 0.9, z: 0}
+--- !u!114 &8878694457807976444
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1270928763770490430}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 36129e804db4831409e920c2f3b6abfc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  owner: {fileID: 0}
+  triggedRivet: {fileID: 0}
 --- !u!1 &1367816017394770223
 GameObject:
   m_ObjectHideFlags: 0
@@ -461,6 +521,7 @@ Transform:
   - {fileID: 8692792125260174174}
   - {fileID: 5212359350877648398}
   - {fileID: 6678189523681876430}
+  - {fileID: 9098102129482079265}
   m_Father: {fileID: 2788556811231999033}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -647,6 +708,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   enemyRopePrefab: {fileID: 616841038056457886, guid: db20d049c85578a4db3cef14a52b0f7b, type: 3}
   playerRopePrefab: {fileID: 0}
+  linkedEnemy: []
 --- !u!1 &3571941038519084344
 GameObject:
   m_ObjectHideFlags: 0
@@ -752,6 +814,7 @@ MonoBehaviour:
   canHitFly: 1
   linked: 0
   joint: {fileID: 0}
+  rope: {fileID: 0}
   foot: {fileID: 3571941039716665623}
   extraRiseGravity: -28.8
   extraFallGravity: -14.4
@@ -776,6 +839,7 @@ MonoBehaviour:
   demonicId: 
   uiMp: {fileID: 8465211090008398057}
   playerRope: {fileID: 0}
+  eventTrigger: {fileID: 8878694457807976444}
   jumpSpeed: 20
   airJumpSpeed: 17
   rushSpeed: 54
@@ -793,6 +857,8 @@ MonoBehaviour:
   totalSummonTime: 1
   cacheAttackTime: 0
   totalCacheAttackTime: 0.1
+  cachePullRopeTime: 0
+  totalCachePullRopeTime: 0.1
   cacheSummonTime: 0
   totalCacheSummonTime: 0.1
   cacheSummonId: 0
@@ -803,7 +869,8 @@ MonoBehaviour:
   airJumped: 0
   attackState: 0
   attackMoveSpeed: 5
-  lastLinkedEnemy: {fileID: 0}
+  rushDir: {x: 0, y: 0, z: 0}
+  sprintLinkTrigger: {fileID: 2536450432252384432}
   isClickBtnJump: 0
   isClickBtnRush: 0
   isKeepBtnRush: 0

+ 195 - 0
ActionTowerDefense/Assets/Scenes/SampleScene.unity

@@ -220,6 +220,118 @@ MeshFilter:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 43346112}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &317380082
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 317380084}
+  - component: {fileID: 317380083}
+  - component: {fileID: 317380086}
+  - component: {fileID: 317380085}
+  m_Layer: 0
+  m_Name: Rivet
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &317380083
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 317380082}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 481b12dc18964dc4f879c5df3686f5fa, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  mecanim: {fileID: 0}
+  meshRenderer: {fileID: 0}
+  ani: {fileID: 0}
+  aniCollider: {fileID: 0}
+  rb: {fileID: 317380085}
+  bodyTrans: {fileID: 0}
+  beSearchTrigger: {fileID: 0}
+  uiHp: {fileID: 0}
+  state: 0
+  attackTime: 0
+  totalAttack1Time: 0.5
+  totalAttack2Time: 0.5
+  isDie: 0
+  totalHp: 100
+  hp: 0
+  attack1Infos: []
+  attack2Infos: []
+  attackTriggers: []
+  attackType: 0
+  bulletPrefab: {fileID: 0}
+  shootPos: []
+  dieKeepTime: 0
+  totalDieKeepTime: 2
+  attackTarget: {fileID: 0}
+  shootTrack: 0
+  invincibleTime: 0
+  totalInvincibleTime: 2
+  targetCharacter: {fileID: 0}
+  searchTrigger: {fileID: 0}
+  targetTypes: 
+  canHitFly: 0
+  linked: 0
+  joint: {fileID: 0}
+  rope: {fileID: 0}
+  ropes: {fileID: 0}
+  ropePrefab: {fileID: 616841038056457886, guid: db20d049c85578a4db3cef14a52b0f7b, type: 3}
+--- !u!4 &317380084
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 317380082}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 50, y: -0.5, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 514997753}
+  m_Father: {fileID: 0}
+  m_RootOrder: 9
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!54 &317380085
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 317380082}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 0
+  m_IsKinematic: 1
+  m_Interpolate: 0
+  m_Constraints: 0
+  m_CollisionDetection: 0
+--- !u!65 &317380086
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 317380082}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
 --- !u!1 &494178953
 GameObject:
   m_ObjectHideFlags: 0
@@ -288,6 +400,89 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &514997752
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 514997753}
+  - component: {fileID: 514997756}
+  - component: {fileID: 514997755}
+  m_Layer: 0
+  m_Name: Cube
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &514997753
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 514997752}
+  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: 317380084}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &514997755
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 514997752}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, 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: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &514997756
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 514997752}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!1 &519420028
 GameObject:
   m_ObjectHideFlags: 0

+ 7 - 1
ActionTowerDefense/Assets/Scripts/Character.cs

@@ -19,6 +19,7 @@ public enum CharacterState
     Sprint = 10,
     Die = 11,
     Weak = 12,
+    PullRope = 13,
 }
 
 public enum AttackType
@@ -68,7 +69,8 @@ public class Character : MonoBehaviour
     public List<TargetType> targetTypes;
     public bool canHitFly;
     public bool linked;
-    public SpringJoint joint;
+    public RopeJoint joint;
+    public CharacterRope rope;
 
     public virtual void Init()
     {
@@ -99,6 +101,10 @@ public class Character : MonoBehaviour
             Destroy(joint);
             joint = null;
         }
+        if (rope)
+        {
+            rope = null;
+        }
     }
 
     public virtual void FixedUpdate()

+ 7 - 2
ActionTowerDefense/Assets/Scripts/CharacterRope.cs

@@ -3,6 +3,7 @@ using System.Collections;
 using System.Collections.Generic;
 using Unity.VisualScripting;
 using UnityEngine;
+using UnityEngine.TextCore.Text;
 
 public class CharacterRope : MonoBehaviour
 {
@@ -35,10 +36,14 @@ public class CharacterRope : MonoBehaviour
         character1.linked = true;
         if (addJoint)
         {
-            character1.joint = character1.AddComponent<SpringJoint>();
-            character1.joint.spring = 1000;
+            if (!character1.joint)
+            {
+                character1.joint = character1.AddComponent<RopeJoint>();
+            }
+            character1.joint.rb = character1.rb;
             character1.joint.connectedBody = character2.rb;
             character1.joint.maxDistance = (character1.transform.position - character2.transform.position).magnitude;
+            character1.rope = this;
         }
     }
 

+ 5 - 0
ActionTowerDefense/Assets/Scripts/Enemy.cs

@@ -369,6 +369,11 @@ public class Enemy : MoveCharacter
                 isDie = true;
                 dieKeepTime = totalDieKeepTime;
                 DropSouls();
+                if (linked)
+                {
+                    PlayerController.instance.sprintLinkTrigger.linkedEnemy.Remove(this);
+                    PlayerController.instance.playerRope.gameObject.SetActive(false);
+                }
                 break;
             case CharacterState.Weak:
                 aniCollider.Play("Weak", 0, 0);

+ 31 - 0
ActionTowerDefense/Assets/Scripts/EventTrigger.cs

@@ -0,0 +1,31 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.U2D;
+
+public class EventTrigger : MonoBehaviour
+{
+    public Character owner;
+    public Rivet triggedRivet;
+
+    private void Awake()
+    {
+        owner = GetComponentInParent<Character>();
+    }
+
+    private void OnTriggerEnter(Collider other)
+    {
+        if (other.GetComponent<Rivet>())
+        {
+            triggedRivet = other.GetComponent<Rivet>();
+        }
+    }
+
+    private void OnTriggerExit(Collider other)
+    {
+        if (other.GetComponent<Rivet>())
+        {
+            triggedRivet = null;
+        }
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/EventTrigger.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 36129e804db4831409e920c2f3b6abfc
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 20 - 5
ActionTowerDefense/Assets/Scripts/PlayerController.cs

@@ -39,6 +39,8 @@ public class PlayerController : MoveCharacter
     public List<int> demonicId;
     public UIHP uiMp;
     public PlayerRope playerRope;
+    public EventTrigger eventTrigger;
+    public SprintLinkTrigger sprintLinkTrigger;
 
     public float jumpSpeed = 10;
     public float airJumpSpeed = 10;
@@ -65,6 +67,9 @@ public class PlayerController : MoveCharacter
     public float cacheAttackTime; //无法攻击时按下攻击键不会攻击,手感不好,缓存几帧,在这几帧内落地会立即攻击;
     public float totalCacheAttackTime = 0.1f;
     [HideInInspector]
+    public float cachePullRopeTime; 
+    public float totalCachePullRopeTime = 0.1f;
+    [HideInInspector]
     public float cacheSummonTime; //无法召唤时按下召唤键不会召唤,手感不好,缓存几帧,在这几帧内落地会立即召唤;
     public float totalCacheSummonTime = 0.1f;
     [HideInInspector]
@@ -79,7 +84,6 @@ public class PlayerController : MoveCharacter
     public bool airJumped;
     public PlayerAttackState attackState;
     public float attackMoveSpeed = 5f;
-    public Enemy lastLinkedEnemy;
     public Vector3 rushDir;
 
     public bool btnJumpPress
@@ -316,13 +320,21 @@ public class PlayerController : MoveCharacter
         else
         {
             airJumped = false;
-            if (btnNorthPress || cacheAttackTime > 0)
+            //if (btnNorthPress || cacheAttackTime > 0)
+            //{
+            //    if (excludeState != CharacterState.Attack)
+            //    {
+            //        Attack1();
+            //        return true;
+            //    }
+            //}
+            if (eventTrigger.triggedRivet && (btnNorthPress || cachePullRopeTime > 0))
             {
-                if (excludeState != CharacterState.Attack)
+                if (sprintLinkTrigger.linkedEnemy.Count > 0)
                 {
-                    Attack1();
-                    return true;
+                    eventTrigger.triggedRivet.BindingRopes(sprintLinkTrigger.linkedEnemy);
                 }
+                //ChangeState(CharacterState.PullRope);
             }
             if (excludeState != CharacterState.Summon)
             {
@@ -793,6 +805,9 @@ public class PlayerController : MoveCharacter
                     ChangeState(CharacterState.Idle);
                     break;
                 }
+                break;
+            case CharacterState.PullRope:
+
                 break;
             default:
                 break;

+ 33 - 0
ActionTowerDefense/Assets/Scripts/Rivet.cs

@@ -0,0 +1,33 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.TextCore.Text;
+using static UnityEditor.Progress;
+
+public class Rivet : Character
+{
+    public CharacterRope ropes;
+    public GameObject ropePrefab;
+
+    public void ShortenRopes()
+    {
+
+    }
+
+    public void BindingRopes(List<Enemy> enemies)
+    {
+        for (int i = 0; i < enemies.Count; i++)
+        {
+            if (enemies[i].rope)
+            {
+                enemies[i].rope.gameObject.SetActive(false);
+                enemies[i].rope = null;
+            }
+            GameObject ropeObj = PoolManager.Instantiate(ropePrefab);
+            CharacterRope rope = ropeObj.GetComponent<CharacterRope>();
+            rope.BeLink(enemies[i], this);
+        }
+        PlayerController.instance.sprintLinkTrigger.linkedEnemyDic.Clear();
+        PlayerController.instance.sprintLinkTrigger.linkedEnemy.Clear();
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Rivet.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 481b12dc18964dc4f879c5df3686f5fa
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 37 - 0
ActionTowerDefense/Assets/Scripts/RopeJoint.cs

@@ -0,0 +1,37 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class RopeJoint : MonoBehaviour
+{
+    public Rigidbody rb;
+    public Rigidbody connectedBody;
+    public float maxDistance;
+
+    private void FixedUpdate()
+    {
+        if ((transform.position - connectedBody.transform.position).magnitude > maxDistance)
+        {
+            Vector3 dir = (connectedBody.transform.position - transform.position).normalized;
+            float mag = (connectedBody.transform.position - transform.position).magnitude;
+            float changeValue = mag - maxDistance;
+            if (connectedBody.isKinematic && rb.isKinematic)
+            {
+                return;
+            }
+            else if (connectedBody.isKinematic)
+            {
+                transform.position += changeValue * dir;
+            }
+            else if (rb.isKinematic)
+            {
+                connectedBody.transform.position -= changeValue * dir;
+            }
+            else
+            {
+                transform.position += changeValue * rb.mass / (rb.mass + connectedBody.mass) * dir;
+                connectedBody.transform.position -= changeValue * connectedBody.mass / (rb.mass + connectedBody.mass) * dir;
+            }
+        }
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/RopeJoint.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6d796e7123ff8b04483e4c784c707f03
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 14
ActionTowerDefense/Assets/Scripts/SprintLinkTrigger.cs

@@ -6,11 +6,13 @@ public class SprintLinkTrigger : MonoBehaviour
 {
     public GameObject enemyRopePrefab;
     public GameObject playerRopePrefab;
-    public Dictionary<Enemy, bool> linkedEnemy;
+    public Dictionary<Enemy, bool> linkedEnemyDic;
+    public List<Enemy> linkedEnemy;
 
     private void Awake()
     {
-        linkedEnemy = new Dictionary<Enemy, bool>();
+        linkedEnemyDic = new Dictionary<Enemy, bool>();
+        linkedEnemy = new List<Enemy>();
     }
 
     private void OnTriggerEnter(Collider other)
@@ -21,20 +23,13 @@ public class SprintLinkTrigger : MonoBehaviour
             return;
         }
         Enemy enemy = other.GetComponentInParent<Enemy>();
-        if (!enemy || linkedEnemy.ContainsKey(enemy))
+        if (!enemy || linkedEnemyDic.ContainsKey(enemy))
         {
             return;
         }
-        if (PlayerController.instance.lastLinkedEnemy)
+        if (linkedEnemy.Count > 0)
         {
-            if (PlayerController.instance.lastLinkedEnemy.isDie || !PlayerController.instance.lastLinkedEnemy.gameObject.activeInHierarchy)
-            {
-                LinkEnemy(enemy, EnemyCreater.instance.GetMinDisOtherEnemy(enemy));
-            }
-            else
-            {
-                LinkEnemy(enemy, PlayerController.instance.lastLinkedEnemy);
-            }
+            LinkEnemy(enemy, linkedEnemy[linkedEnemy.Count - 1]);
         }
         LinkPlayer(enemy);
     }
@@ -48,8 +43,8 @@ public class SprintLinkTrigger : MonoBehaviour
 
     public void LinkPlayer(Enemy enemy)
     {
-        PlayerController.instance.lastLinkedEnemy = enemy;
-        linkedEnemy.Add(enemy, true);
+        linkedEnemyDic.Add(enemy, true);
+        linkedEnemy.Add(enemy);
         PlayerController.instance.playerRope.BeLink(enemy);
     }
 }