码迷,mamicode.com
首页 > 其他好文 > 详细

三种常用碰撞类型的实现(Box,Sphere,CapsuleCollider)及接触点获取

时间:2018-07-28 13:50:39      阅读:1167      评论:0      收藏:0      [点我收藏+]

标签:技术   htm   常用   nbsp   交互   unit   投影   图片   不同类   

技术分享图片

 

git地址:https://gitee.com/Hont/ColliderDemo

 

大致逻辑说一下,首先每一种碰撞器需要一套质点到该碰撞器相应边缘点的函数,后续不同类型的碰撞器都是基于这套接口实现的。

对于特殊的碰撞器也可以不实现这个接口,只在特殊场合使用这些特殊碰撞。

 

那么实现这套接口需要一些求交点函数,代码里都实现了,包括球体还有柱形的求交点函数都来源于网络,所以性能这方便差一些。

球体求交点直接从圆形的交点获取扩展:https://www.cnblogs.com/hont/p/8991751.html

平面求交点:http://www.cnblogs.com/hont/p/7467618.html

 

当求边缘点的函数有了之后,就可以进行具体形状的碰撞检测了,例如胶囊可以拆分为上下两个球的碰撞和中间的柱形碰撞。

直接求出其他常规类型碰撞器的边缘点之后再拿边缘点和胶囊做一次包含关系检测即可。当然中间的柱形要做一次投影。

上面的说法不包括一些凸包凹包的非常规碰撞,其他两种碰撞直接通过边缘点做检测即可。

 

另外相交点做了一个保留处理,即不在相交状态,或者变为包含状态时依旧可以获取得到旧的相交点。并且这里的相交点并不是准确接触点

但可以通过扩展计算更精确的接触点,所以能看见gif图中接触点在包含时有一些不准确的跳动。毕竟游戏中很多接触产生的特效位置是按照关节来的。

 

配合射线可以和unity自身碰撞器有良好的交互。

 

总之还不太完善,在实际项目中再去不断优化。

三种常用碰撞类型的实现(Box,Sphere,CapsuleCollider)及接触点获取

标签:技术   htm   常用   nbsp   交互   unit   投影   图片   不同类   

原文地址:https://www.cnblogs.com/hont/p/9381358.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!