首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将受风影响的弹丸瞄准三维世界中的人工智能?

如何将受风影响的弹丸瞄准三维世界中的人工智能?
EN

Stack Overflow用户
提问于 2016-02-01 20:49:31
回答 1查看 258关注 0票数 0

我正试图制作一个坦克游戏,玩家必须摧毁由AI驾驶的敌方坦克。因为AI必须能够攻击玩家的坦克。两次射击都是受空气影响的抛物线。到目前为止,我已经能够计算出的功率和最小倾斜角度,以击中射击,而不受风影响的弹丸。

代码语言:javascript
复制
        var Dx = target.position.x - transform.position.x;
        var Dy = target.position.y - transform.position.y;            
        var P1 = Mathf.Sqrt(9.81f * (Dy + Mathf.Sqrt(Dx * Dx + Dy * Dy)));
        var InclinationAngle = Mathf.Atan((Dy + Mathf.Sqrt(Dx * Dx + Dy * Dy)) / Dx) * Mathf.Rad2Deg;        

        transform.localRotation = Quaternion.Euler(new Vector3(-InclinationAngle,0, 0));
        var fz = transform.forward.normalized * P1;  
        rig.AddForce(fz, ForceMode.Impulse);

问题是当弹丸受到风的影响。风可以朝四个方向之一,向前、向后、向右或向左。我试过几种方法,但我没有很好的机会。人工智能的目标如何考虑到起始位置、目标位置以及风向和强度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 14:39:33

我找到了一个解决办法:一旦计算出初始速度和最小倾角来进行旅行。

代码语言:javascript
复制
        var Dx = target.position.x - transform.position.x;
        var Dy = target.position.y - transform.position.y;
        var Vmin = Mathf.Sqrt(9.81f * (Dy + Mathf.Sqrt(Dx * Dx + Dy * Dy)));
        var InclinationAngle = Mathf.Atan((Dy + Mathf.Sqrt(Dx * Dx + Dy * Dy)) / Dx) * Mathf.Rad2Deg;

必须与风成反比,在弹丸的飞行时间除以2,因为我们只需要一半的时间,因为有两个力相等的地方。

代码语言:javascript
复制
        var t = Dx/(Vmin * Mathf.Cos(InclinationAngle*Mathf.Deg2Rad));
        var fyx = transform.forward.normalized * P1;
        var fxz = wind.force*-t/2;

        rig.AddForce((fyx+fxz), ForceMode.Impulse);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35140047

复制
相关文章

相似问题

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