Расчет и проверка расстояния до игрока для каждого обновления () не идеален. Он будет работать, но он будет делать больше, чем нужно, когда игрока даже нет рядом. Это неэффективно.
Что вы можете сделать, если ваш игрок - Rigidbody, так это добавить SphereCollider к турели, установить isTrigger = true, установить радиус как радиус обнаружения и обработать OnTriggerEnter ( ) и OnTriggerExit () для воспроизведения или остановки анимации.
Вы также можете добавить в скрипт два объекта publi c Animation, перетащить анимацию в редактор, затем вы можете использовать анимацию. ) и .Stop () et c. для управления анимацией.
Что-то вроде этого. Не тестировалось полностью, но вы можете понять идею.
public float detectionRadius = 75;
public Animation activateAnimation;
public Animation deactivateAnimation;
void Start()
{
SphereCollider detectionSphere = gameObject.AddComponent<SphereCollider>();
detectionSphere.isTrigger = true;
detectionSphere.radius = detectionRadius;
detectionSphere.center = Vector3.zero;
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "PlayerTank")
{
activateAnimation.Play();
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "PlayerTank")
{
deactivateAnimation.Play();
}
}
Ваша анимация не должна быть l oop в противном случае вам придется добавить еще c logi, чтобы проверить, есть ли animation.isPlaying, и создать свою собственную анимацию .Stop () et c.