Задать вопрос
@Gera01
Unity, С# и больше ничего.

Почему они внутри дракона?

Здравствуйте! Я начал делать ботов для игры, но они когда приследуют игрока становятся не рядом с ним, а залазят внутрь его. Как исправить? Скрипт:
public Transform player;
    public int dist;
    public Transform enemy;
    public float RotateSpeed;
    public float SpeedMove;
    public GameObject EnAnimObj;
    private bool trig = false;


    void Update()
    {
       if (trig == false)
        {
            
            Vector3 rotation = player.position-enemy.position;
            enemy.rotation = Quaternion.Slerp(enemy.rotation, Quaternion.LookRotation(rotation), RotateSpeed * Time.deltaTime);
            enemy.transform.position += enemy.forward * SpeedMove * Time.deltaTime;
            enemy.transform.localPosition = new Vector3(transform.position.x, 0f, transform.position.z);
            enemy.transform.localRotation = new Quaternion(0f, transform.rotation.y ,0f, transform.rotation.w); 
        }
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Player")
        {
            GetComponent<Animator> ().SetTrigger ("Trigger");
            trig = true;
        }
        
    }


    void OnTriggerExit(Collider other)
    {
        if (other.tag == "Player")
        {
            GetComponent<Animator>().SetTrigger("Trigger");
            trig = false;
        }

    }

   

}
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Решения вопроса 1
Griboks
@Griboks Куратор тега C#
Необходимо добавить проверку на минимальную дистанцию.
void Update()
    {
       if (trig == false)
        {
            
            Vector3 rotation = player.position-enemy.position;
            enemy.rotation = Quaternion.Slerp(enemy.rotation, Quaternion.LookRotation(rotation), RotateSpeed * Time.deltaTime);
            if(rotation.sqrMagnitude > 1)
                        enemy.transform.position += enemy.forward * SpeedMove * Time.deltaTime;
            enemy.transform.localPosition = new Vector3(transform.position.x, 0f, transform.position.z);
            enemy.transform.localRotation = new Quaternion(0f, transform.rotation.y ,0f, transform.rotation.w); 
        }
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы