Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по Unity

Агент 38 38 Знаток (252), на голосовании 5 месяцев назад
я для противника прописал код на постоянное движение в сторону игрока, при этом он должен постоянно вращаться, а т.к мне лень заворачиваться с анимацией то решил прописать вращение через Quaternion.Euler, и все получилось, но нашел 1 баг исправил его и теперь не работает вращение, по какой причине не ясно, подскажите в чем может быть проблема
вот весь метод Update:
 private void Update() { 
//поиск цели
target_position = player.transform.position;

//перемещение
if(transform.position.y >49.5){
transform.position = Vector2.MoveTowards(transform.position, target_position, speed * Time.deltaTime);
}
transform.rotation = Quaternion.Euler(0,0,360);

//стрельба
if(transform.position.y > 49.5 && fire == true){
StartCoroutine(vistrel());
}

//смерть
if(Health <= 0){
Destroy(gameObject);
}
}
Голосование за лучший ответ
Professional Professional Мудрец (15912) 6 месяцев назад
Проблема в том, что вы устанавливаете вращение объекта в Update методе каждый кадр на фиксированное значение (Quaternion.Euler(0,0,360)), что приводит к тому, что объект постоянно вращается вокруг оси Z на 360 градусов, и при этом не зависит от направления к игроку.

Для того чтобы противник вращался в сторону игрока, вы должны установить угол поворота относительно разницы между позицией противника и игрока. Вот как можно это сделать:

```csharp
private void Update() {
//поиск цели
target_position = player.transform.position;

//перемещение
if(transform.position.y > 49.5f){
transform.position = Vector2.MoveTowards(transform.position, target_position, speed * Time.deltaTime);
}

//вычисление направления к игроку
Vector3 direction = target_position - transform.position;
direction.Normalize();

//вычисление угла поворота к игроку
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

//установка вращения
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));

//стрельба
if(transform.position.y > 49.5f && fire == true){
StartCoroutine(vistrel());
}

//смерть
if(Health <= 0){
Destroy(gameObject);
}
}
```

Этот код вычисляет направление к игроку и устанавливает угол поворота противника в сторону этого направления.
Ложный Грифель Мастер (1274) 6 месяцев назад
Что значит вращение не работает? ты устанавливаешь вращение в скрипте. Если нужно постоянно вращать куб, текущее вращение необходимо умножать на кватернион
Похожие вопросы