@UnityNewPlayer

Как повернуть врага в сторону игрока в Unity2D?

Делаю игру на Unity2D с видом сверху, где нужно уничтожить базу врага. Мне должны мешать различные роботы (враги), но я застопорился на создании ИИ. Я сделал патрулирование, но не смог реализовать преследование. Я хочу что бы враг поворачивался к игроку и шел вперед и не знаю как сделать. Пытался через LookAt, но поворот слишком резкий. Если через Qutarnion.Lerp, то враг постоянно поворачивается на 0ое значение по Z или поворачивается, но по всем координатам, хотя нужно только по Z. Так как мне повернуть врага к игроку? Вот код, не судите строго ибо только начинаю.
public class EnemyAI : MonoBehaviour {

	public float speed;
	public float mSpeed;
	private float waitTime;
	public float StartWaitTime;

	float angle;
	public float value;
	public float mvalue;

	public Transform player;

	void Start()
	{
		waitTime = StartWaitTime;
	}


  	void Update() {

		if (waitTime <= 0)
		{
			value = Random.Range(0, 10);   
			mvalue = Random.Range(1, 4);   
			waitTime = StartWaitTime;   
 			RandomAngle();   
		}
 		else
		{
 			waitTime -= Time.deltaTime; //таймер
		}
  		if(Vector2.Distance(transform.position, player.transform.position) < 10f)
		{
			Quaternion Rot2 = Quaternion.Euler(0, 0, player.position.z);

			transform.rotation = Quaternion.Lerp(transform.rotation, Rot2, Time.deltaTime * speed); 
		}
 		else if (mvalue == 2)
		{
			transform.Translate(Vector2.left * mSpeed * Time.deltaTime);
		}
		else
		{
			Quaternion Rot = Quaternion.Euler(0, 0, angle);

			transform.rotation = Quaternion.Lerp(transform.rotation, Rot, Time.deltaTime * speed);
		}
	}

	void RandomAngle()
	{
		if (value == 1)
		{
			angle = 45;
		}
		if (value == 2)
		{
			angle = 90;
		}
		if (value == 3)
		{
			angle = -45;
		}
		if (value == 4)
		{
			angle = -90;
		}
		if (value == 5)
		{
			angle = 135;
		}
		if (value == 6)
		{
			angle = 180;
		}
		if (value == 7)
		{
			angle = -135;
		}
		if (value == 8)
		{
			angle = 0;
		}
	}
}
  • Вопрос задан
  • 3245 просмотров
Решения вопроса 1
@privet_andrei123
Привет ! Тебе нужно поворачивать по оси y (наверно ) попробуй использовать lookat(ваш игрок) также для выщитывания позиции игрока нужно использовать if(distans()позиция игрока , tansform.position)

Также можно посмотреть это (https://youtu.be/S7-unUDLI6A) да , да это реклама (нет)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@justmavi
Software Development Engineer at Softconstruct
Рекомендую посмотреть это, вдруг поможет. (не реклама, дорогая администрация )
Ответ написан
zZaKko
@zZaKko
Люблю стратегии и Unity.
Вот что нашел в гугле.
unity3d.ru/distribution/viewtopic.php?f=5&t=51710
https://www.cyberforum.ru/unity/thread1589288.html
В инете уже все готово, просто надо немного поискать:)
Ответ написан
@DuckUb
Можно использовать код который определяет с какой стороны находится игрок и изменять параметр scale

public Transform player; // переменная для хранения игрока
public Transform enemy; // переменная для хранения врага

void Update()
{
    Vector3 playerPos = player.position;
    Vector3 enemyPos = enemy.position;

    if (playerPos.x < enemyPos.x) // игрок находится слева от врага
    {
        enemyObject.transform.localScale = new Vector3(-1, 1, 1); // поворачиваем врага влево
    }
    else // игрок находится справа от врага
    {
        enemyObject.transform.localScale = new Vector3(1, 1, 1); // поворачиваем врага вправо
    }

}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы