Unity 碰撞检测

Posted qq77530202

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 碰撞检测相关的知识,希望对你有一定的参考价值。

武器与怪物的碰撞

 

目前来说有三种思路,其实前两种算变种了:

1、动画关键帧回调 + 范围检测。http://blog.csdn.net/u013700908/article/details/52888792

这个是在Asset store上面下的一个例子中看到的,其实之前在做端游时,也差不多是这样做的,就是挥武器的动作到某一帧的时候,计算武器位中心的范围内有木有怪物,有的话,就给这个目标添加伤害。范围检测用到的函数是这个:

Physics.OverlapSphere

 

static function OverlapSphere(position: Vector3radius: float, layerMask: int = AllLayers): Collider[];
 
Description

Returns an array with all colliders touching or inside the sphere.

这个方法其实对于大部分游戏来说是足够了,性能上也没有什么开销。

 

2、动画关键帧回调 + 线性检测。

这个是从下面这位同学这里看到的哈,思路就是在武器的运动轨迹上选几个点,然后在这几个点上做线性检测。感觉这个比较适合做拿斧子横向砍一刀哈。

http://blog.sina.com.cn/s/blog_8373d8f00101989i.html

不过我觉得不必要向上面的链接里面说的,每帧都取值来算,可以在动画设置几个关键帧,然后记录当前关键帧的点和上一个关键帧的点做射线检测。用到的函数是这个:

Physics.Linecast

static function Linecast(start: Vector3end: Vector3layerMask: int = DefaultRaycastLayers): bool;
 
Description

Returns true if there is any collider intersecting the line between start and end.

 

3、碰撞体回调

给武器上挂一个空的GameObject,然后给这个GameObject挂上一个Collider(勾选山IsTrigger)和RigidBody,然后监听void OnTriggerEnter( Collider other )事件。

我这次做的这个Demo也就是用的这种哈,没有大规模的测试,只是做了一个Demo,据网上说这个会有性能上的开销,以后有机会测试一下。

 

以上是关于Unity 碰撞检测的主要内容,如果未能解决你的问题,请参考以下文章

unity3d 怎么检测碰撞?比如主角碰撞到物体之后销毁被撞到的物体

unity 用角色控制器怎么检测碰撞

Unity - 使用枚举属性来检测碰撞的对象

Unity3D中的射线与碰撞检测代码

Unity 2d 中的碰撞检测

Unity 碰撞检测与触发检测