Unity3D Flying AI движение (Вертолет) - PullRequest
1 голос
/ 15 апреля 2019

Я хочу сделать вертолет для игры, но я не могу понять, как я могу совершать полетные движения.Мне нужно 2 типа движения (Облет и Облет). Вертолет появится в углу карты и полетит к какому-нибудь игроку - FlyingTo, после того как Хели прибудет к игроку, начнет летать и выстрелить ракетой.

Iпытался использовать transform.Translate, transform.rotation, hardbody.force и многое другое для движения, но не нашел ничего работающего.

Несколько моих попыток:


Vector3 flyto = (nearest.transform.position + new Vector3(0, 100, 0));
Vector3 Kouzlo1 = new Vector3(base.transform.position.x, 0, base.transform.position.z);
Vector3 Kouzlo2 = new Vector3(nearest.transform.position.x, 0, nearest.transform.position.z);

/*Vector3 targetDir = flyto - transform.position;
float step = 10 * Time.deltaTime;
Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0f);
transform.rotation = Quaternion.LookRotation(newDir);*/


if (Vector3.Distance(Kouzlo1, Kouzlo2) < 100)
{
 var rotate = Quaternion.LookRotation(flyto - transform.position);
 transform.rotation = Quaternion.Slerp(transform.rotation, rotate, 
 Time.deltaTime * 10);
 transform.Translate(Vector3.forward * 10 * Time.deltaTime);

 /*transform.position = new Vector3(transform.position.x - 
 Vector3.Distance(Kouzlo1, Kouzlo2), nearest.transform.position.y + 100, 
 transform.position.z - Vector3.Distance(Kouzlo1, Kouzlo2));
 Vector3 vvv = transform.rotation * new Vector3(0f, 1f, 0f);

 transform.RotateAround(flyto, vvv, 180 * Time.deltaTime);*/



 //transform.RotateAround(flyto, Vector3.forward, 10 * Time.deltaTime);
}else {
 //transform.rotation = Quaternion.Slerp(transform.rotation, 
 Quaternion.LookRotation(flyto -transform.position), 10 * Time.deltaTime);

 //transform.position += transform.forward * 10 * Time.deltaTime;
 transform.LookAt(nearest.transform.position);

 rigidbody.AddForce(Vector3.forward * 10);
}


1 Ответ

0 голосов
/ 15 апреля 2019

Сначала вам нужно понять метод Lerp / Slerp.

Lerp(a, b, t);

Когда t=0 возвращает a, t=1, возвращается b, в противном случае возвращается значение от a до b.

Так что вы можете использовать

Quaternion.Slerp(a, b, t += Time.deltaTime * 10);

И есть еще один аналогичный метод, который RotateTowards (или MoveTowards в классе Vector3 / Mathf) может выполнять ту же работу

Quaternion.RotateTowards(a, b, Time.deltaTime);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...