AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > Unity3D

Unity检测发射体VS.防护碰撞

51自学网 2014-05-24 http://www.51zixue.net

本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术,本文Unity碰撞检测问题。

问题:

Tomáš Zato

我在尝试检测,发射体是否要撞击防护体,以及碰撞在哪里发生。

这幅图可以显示出具体的情形,虽然A和B发射体距离中心防护体中心S的距离基本相同,但是一个会撞击到防护体,另一个却不会。

用简单的数学来解决它,需要用到圆的数学方程和发射体路径线的方程。只要用一支笔和一张纸,我就能计算出来。然而,我直接解析几何的经历非常糟糕。此外,发射体将离开防护体,返回阳极。怎样过滤它们呢?

第二种方法是比较友好的方法——测量发射体路径与防护体中心的最短距离,如果L比R小,就发生碰撞。看上去很容易实现,但是这不能让我知道碰撞在哪里发生。

我做的是二维游戏,使用C#和Unity游戏引擎,欢迎大家提出各种通用解决方法。

发射体的大小忽略不计。

回答:

Lajos Arpad

你的防护体可以被描述成:

(X - X1)^2+ (Y - Y1)^2= R^2

发射体的路径线可以描述为:

Y - Y3 = ((Y4 -Y3) / (X4 - X3)) * (X - X3)

从这里:

Y = ((Y4 - Y3) / (X4 - X3)) * (X - X3) + Y3

用上述拓展第一个方程,得到:

(X - X1)^2+ (((Y4 - Y3) / (X4 - X3)) * (X - X3) + Y3 -Y1)^2= R^2

这是一个 二次方程 ,如果解决则能给出交点的X值。阅读链接中的二次方程解决方案,它将用一个公式获得第一个脉冲来解决问题。当然,如果判别式为负,就没有交点,那么方程式就没有真正的答案。如果判别式是0,那么发射体就会触碰到防护体。如果判别式为正,那你就获得了答案,用方程式的结果退出X。

知道了X的值之后,就可以计算用下面的公式计算Y的值。

Y = ((Y4 - Y3) / (X4 - X3)) * (X - X3) + Y3

最后注意,只有在发射体的路径线不是垂直的才能够起作用,因为那样X4就等于X3,导致基本方程无用。当出现发射体穿过一条直线的情况下,线的公式为:

X = X1

然后使用公式:

Y = ((Y4 - Y3) / (X4 - X3)) * (X - X3) + Y3

来获得可能的解决方案。(再次声明,这是一个二次元方程)

所以这一执行应该检查发射体的路径线是否垂直,然后根据具体情况选择相应的解决方案。希望这能帮到你。

原文链接:Detecting possible projectile vs shield collision

 

文章选自StackOverFlow社区,鉴于其内容对于开发者有所帮助,现将文章翻译于此,供大家参考及学习。9Tech将每日持续更新,读者可点击StackOverflow(简称:SOF)精选问答汇总,查看全部译文内容。同时,我们也招募志同道合的技术朋友共同翻译,造福大家!


建议使用电驴(eMule)下载分享的资源。

说明
:本教程来源互联网或网友分享或出版商宣传分享,仅为学习研究或媒体推广,51zixue.net不保证资料的完整性。
 
上一篇:Unity 相关经典博客资源总结  下一篇:用Unity3D 开发游戏哪种语言最好?