MiniGames/Assets/ChaseRunEnemy.cs
2025-08-18 17:52:40 +05:00

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