碰撞检测中高速物体直接穿过包围盒问题

在游戏开发的过程中会出现物体直接穿过碰撞体的情况:

1.由于碰撞物体太薄了

2.由于物体的移动速度太快

分析原因:由于在Unity中的碰撞检测是有时间花费的,而每帧之间的时间间隔大概是0.02s如果速度太快或者是碰撞物体的太薄了,下一帧可能物体已经穿过了碰撞体,没有来的及进行碰撞检测。如图:


在前一帧时还在碰撞体的左边在下一帧已经在碰撞体的右边,这个时候就会高速的穿过,碰撞检测每检测到。

解决方案:

通过射线检测如果在两帧之间射线发生碰撞那么此时记为发生碰撞。

代码如下:

Vector3 oriPos=transform.position;//获取当前帧的位置

Transform.Translate(Vector3.forword*speed*Time.deltaTime);

float length=(Transform.position-oriPos)*magnitude;//获取距离

Vector3 direction=transform.position-oriPos;

RaycastHit hit;

bool isCollider=Physics.Raycast(originPos,direction,out hit,length)//在两个位置之间发射一条射线,如果发生碰撞那么返回发生碰撞。

同时也可以在刚开始的状态下发射射线,射线的长度是speed*Time.deltaTime;




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值