using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class groundEnemy : MonoBehaviour
{
[SerializeField] Transform player;
[SerializeField] Transform distancePoint;
[SerializeField] float aggrowRange;
[SerializeField] float speed;
[SerializeField] float patrolSpeed;
Rigidbody2D rb2d;
public bool flip;
private float stopChasing;
void Start()
{
rb2d = GetComponent();
Physics2D.IgnoreLayerCollision(11, 11, true);
}
// Update is called once per frame
void FixedUpdate()
{
float distance = Vector2.Distance(distancePoint.transform.position, player.transform.position);
Vector2 direction = player.transform.position - distancePoint.transform.position;
if (distance <= aggrowRange)
{
ChasePlayer();
}
else
{
StopChasingPlayer();
if (IsFacingRight ())
{
rb2d.velocity = new Vector2(patrolSpeed, 0f);
}
else
{
rb2d.velocity = new Vector2(-patrolSpeed, 0f);
}
}
void ChasePlayer()
{Vector3 scale = transform.localScale;
if (transform.position.x < player.position.x )
{
rb2d.velocity = new Vector2(speed, 0);
scale.x = Mathf.Abs(scale.x) * -1 * (flip ? -1 : 1);
}
else
{
rb2d.velocity = new Vector2(-speed, 0);
scale.x = Mathf.Abs(scale.x) * (flip ? -1 : 1);
}
scale = transform.localScale;
}
void StopChasingPlayer()
{
rb2d.velocity = new Vector2(0, 0);
}
}
private bool IsFacingRight()
{
return transform.localScale.x > Mathf.Epsilon;
}
private void OnTriggerExit2D(Collider2D collision)
{
transform.localScale = new Vector2(-(Mathf.Sign(rb2d.velocity.x)), transform.localScale.y);
}
}
↧