Exemple #1
0
    void FixedUpdate()
    {
        if (enemyHealth.dead || player == null)
        {
            return;
        }

        distanceToTarget = transform.position.x - player.transform.position.x;

        if (Mathf.Abs(distanceToTarget) > minDistanceToTarget)
        {
            rigBody.velocity = new Vector2(transform.localScale.x * moveSpeed, rigBody.velocity.y);
            if (distanceToTarget < 0 != transform.localScale.x > 0)
            {
                enemyHealth.Flip();
            }
        }

        RaycastHit2D hit = Physics2D.Linecast(transform.position, new Vector2(transform.position.x + Mathf.Sign(rigBody.velocity.x), transform.position.y), LayerMask.GetMask("Player"));

        if (hit.collider != null && lastHitTime <= Time.time - repeatDamagePeriod)
        {
            Attack();
        }
    }
Exemple #2
0
    private void FixedUpdate()
    {
        if (enemyHealth.dead || player == null)
        {
            return;
        }

        currentPath = destination.Value.position;
        ladderPath  = null;
        FindPath(ladders);

        maxVelosity = isAggressive ? maxRunVelosity : maxWalkVelosity;

        rigBody.AddForce(Vector2.right * moveForce * Mathf.Sign(
                             ladderPath != null ? ladderPath.transform.position.x - transform.position.x :
                             destination.Value.position.x - transform.position.x));

        if (Mathf.Abs(rigBody.velocity.x) > maxVelosity)
        {
            rigBody.velocity = new Vector2(Mathf.Sign(rigBody.velocity.x) * maxVelosity, rigBody.velocity.y);
        }

        anim.SetFloat("VelosityX", Mathf.Abs(rigBody.velocity.x));
        anim.SetFloat("VelosityY", Mathf.Abs(rigBody.velocity.y));

        if (rigBody.velocity.x < 0 == transform.localScale.x > 0)
        {
            enemyHealth.Flip();
        }

        RaycastHit2D hit = Physics2D.Linecast(transform.position,
                                              new Vector2(transform.position.x + Mathf.Sign(rigBody.velocity.x) * detectionRange,
                                                          transform.position.y), LayerMask.GetMask("Player"));

        if (hit.collider != null)
        {
            isAggressive       = true;
            destination        = new LinkedListNode <Transform>(player.transform);
            lastAggressionTime = Time.time;
            rigBody.velocity   = Vector2.Lerp(rigBody.velocity, Vector2.zero, 0.99f);
            bossAttack.Attack();
        }
    }