77 lines
1.7 KiB
C#
77 lines
1.7 KiB
C#
using UnityEngine;
|
|
|
|
public class ChaseRunEnemy : MonoBehaviour
|
|
{
|
|
public Animator m_animator;
|
|
public Rigidbody rb;
|
|
public float moveSpeed;
|
|
public float stopDistance = 1.5f;
|
|
|
|
private Transform player;
|
|
private float stopDistanceSqr;
|
|
private bool isStopped = false;
|
|
|
|
private void Awake()
|
|
{
|
|
rb = GetComponent<Rigidbody>();
|
|
|
|
GameObject playerObj = GameObject.FindGameObjectWithTag("Player");
|
|
if (playerObj != null)
|
|
{
|
|
player = playerObj.transform;
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("[ChaseRunEnemy] Player not found in scene.");
|
|
}
|
|
|
|
stopDistanceSqr = stopDistance * stopDistance; // Cache squared distance
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
ChasePlayerController.OnMoveSpeedChanged += UpdateMoveSpeed;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
ChasePlayerController.OnMoveSpeedChanged -= UpdateMoveSpeed;
|
|
}
|
|
|
|
private void UpdateMoveSpeed(float speed)
|
|
{
|
|
moveSpeed = speed;
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
if (player == null) return;
|
|
|
|
Vector3 toPlayer = player.position - transform.position;
|
|
float distanceSqr = toPlayer.sqrMagnitude;
|
|
|
|
if (distanceSqr <= stopDistanceSqr)
|
|
{
|
|
if (!isStopped)
|
|
{
|
|
m_animator.SetBool("isStop", true);
|
|
isStopped = true;
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (isStopped)
|
|
{
|
|
m_animator.SetBool("isStop", false);
|
|
isStopped = false;
|
|
}
|
|
|
|
MoveForward();
|
|
}
|
|
|
|
private void MoveForward()
|
|
{
|
|
rb.MovePosition(rb.position + Vector3.back * moveSpeed * Time.fixedDeltaTime);
|
|
}
|
|
}
|