Enemy with hopping attribute and will attach to the player if hit (L4D2 jocky)

Hi, I’m trying to create an enemy that will jump onto the player once in range and has a maximum of 4 unit attach to player like jocky from L4D2… or an arrow stick to a person wound. Once the enemy is attach onto the player, the player will take damage over time and reduce in movement speed per hit. I try with many ways but unable to achieve what my designer wanted. Currently I’m just using the jump animation and NavMeshAgent setting without any jumping script and it looks very awkward.

using UnityEngine;
using System.Collections;
using UnityEngine.AI;

public class Enemy_Attack : MonoBehaviour
{
    public CharacterStatsScript characterstatsscript;
    private NavMeshAgent myNavMeshAgent;
    private Enemy_Master enemyMaster;
    private Transform attackTarget;
    private Transform myTransform;

    private float attackRate = 5.0f;
    private float nextAttack;
    public float attackRange = 3.5f;
    public int attackDamage = 10;
    private float Timer = 5.0f;
    private bool isJump = false;

    void OnEnable()
    {
        SetInitialReferences ();
        enemyMaster.EventEnemyDie += DisableThis;
        enemyMaster.EventEnemySetNavTarget += SetAttackTarget;
    }

    void OnDisable()
    {
        enemyMaster.EventEnemyDie -= DisableThis;
        enemyMaster.EventEnemySetNavTarget -= SetAttackTarget;
    }


    void Update ()
    {
        //Debug.Log (Timer);
        if (Timer > 0)
        {
            Timer -= Time.deltaTime;
        }


        if (attackTarget != null && Timer <= 0.0f)
        {
            myNavMeshAgent.speed = 100;
            myNavMeshAgent.acceleration = 1500;
            Debug.Log ("Speed" + myNavMeshAgent.speed);
            Debug.Log ("Acceleration" + myNavMeshAgent.acceleration);
            TryToAttack ();
        }
         
    }

    void SetInitialReferences()
    {
        enemyMaster = GetComponent<Enemy_Master> ();
        myTransform = transform;

        if (GetComponent<NavMeshAgent> () != null)
        {
            myNavMeshAgent = GetComponent<NavMeshAgent> ();
        }
    }

    void SetAttackTarget(Transform targetTransform)
    {
        attackTarget = targetTransform;
    }

    void TryToAttack()
    {
                if (Vector3.Distance (myTransform.position, attackTarget.position) <= attackRange)
                {
         
                 

                    Vector3 lookAtVector = new Vector3 (attackTarget.position.x, myTransform.position.y, attackTarget.position.z);

                    myTransform.LookAt (lookAtVector);
                 
                    enemyMaster.CallEventEnemyJump ();
                 
                    enemyMaster.isOnRoute = false;

                }
            Timer = 5.0f;
            isJump = true;

         

    }

    public void OnEnemyAttack()
    {
        if (attackTarget != null)
        {
            if(Vector3.Distance(myTransform.position, attackTarget.position) <= attackRange &&
                attackTarget.GetComponent<CharacterStatsScript>() != null)
                {
                    Vector3 toOther = attackTarget.position - myTransform.position;
                Debug.Log (Vector3.Dot (toOther, myTransform.forward).ToString ());

                    if(Vector3.Dot(toOther, myTransform.forward) > 0.5f)
                    {
                    CharacterStatsScript.PlayerHealth -= 10;
                    CharacterStatsScript.movementSpeed *= 5;
                    Debug.Log (CharacterStatsScript.movementSpeed);
                    }
                }
        }
    }

    void DisableThis()
    {
        this.enabled = false;
    }
}
void OnTriggerEnter2D (Collider2D other){

transform.parent = YourObjectThatYouWantToAttach.trasform;

}