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(); } }
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(); } }