首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Unity3D飞行AI机芯(直升机)

Unity3D飞行AI机芯(直升机)
EN

Stack Overflow用户
提问于 2019-04-15 12:57:42
回答 1查看 621关注 0票数 1

我想做一架直升机来玩游戏,但是我不知道怎么做飞行动作。我需要2种类型的运动(飞行和飞行)直升机将在地图的角落产卵,并飞到一些球员- FlyingTo后,直升机将到达一个球员,它将开始飞行和发射导弹。

我尝试过使用transform.Translate,transform.rotation,rigidbody.force和许多其他的东西来移动,但是没有找到任何有用的东西。

我的几个尝试:

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 14:35:12

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

代码语言:javascript
复制
Lerp(a, b, t);

当为t=0时,它返回at=1它返回b,否则它返回一个介于ab之间的值。

所以你可以使用

代码语言:javascript
复制
Quaternion.Slerp(a, b, t += Time.deltaTime * 10);

还有另一个类似的方法RotateTowards (或Vector3 / Mathf类中的MoveTowards )可以做同样的工作

代码语言:javascript
复制
Quaternion.RotateTowards(a, b, Time.deltaTime);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55682804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档