Unity3D飞行AI运动(直升机)

时间:2019-04-15 04:57:42

标签: c# unity3d transform

我想为游戏制作直升机AI, 但是我不知道该怎么做飞行运动。 我需要两种运动方式(飞来飞去) 直升机将在地图一角生成并飞向某些玩家-FlyingTo 直升机到达玩家后,它将开始飞行 并发射导弹。

我尝试使用transform.Translate,transform.rotation,stiffbody.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 :(得分:0)

您需要首先了解Lerp / Slerp方法。

NSLog(@"%ld",(NSInteger)[FIRServerValue timestamp]/1000); //105827998577

Lerp(a, b, t); 返回t=0时,a返回t=1,否则返回ba之间的值。

因此您可以使用

b

还有另一种类似的方法RotateTowards(或Vector3 / Mathf类中的MoveTowards)可以完成相同的工作

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