您的位置:首页 > 其它

Unreal 入门-Collision和Physics,碰撞检测

2017-03-22 23:55 501 查看
Collision仅仅掌管碰撞发生的检测和回调,而Physics仅仅模拟碰撞发生之后位置速度等等的变化。

Collision 可以设置persets,里边的标签都是不同的碰撞处理逻辑。Collision仅仅检测是否碰碰撞和回调一些碰撞处理函数。

CollisionEnable管理检测决定可以碰撞之后,是仅仅发生overlap回调、raycast(射线拾取)、sweep(扫描建模)还是有物理反馈,有下边三个选项 

NoCollision:就算重叠,并且通过channel检测可以碰撞,也不发生overlap,不raycast,不物理反馈


NoPhysicsCollision:发生重叠,通过channel检测可以碰撞之后,进行overlap,raycast,但是不物理反馈,也就是会有一些函数被调用,但是一定会互相穿过 。

PhysicsOnly:发生物理碰撞,但不会进行overlap,也不raycast。

CollisionEnable:发生重叠,channel决定可以碰撞,进行overlap(未确定,因为Block了之后可能不会overlap),raycast,并且进行物理反馈(要求碰撞双方至少有一方进行PhysicsSimulate,不然还是会穿模,毕竟如果两物体都不进行物理模拟,那么双方都不会回弹,但是都是刚体,物理上说不通,只能穿模),只有这个选项才会使得函数回调,并且有物理表现


CollisionEnable后边的,本物体会忽视哪些类型碰撞体,会仅仅和哪些类型发生overlap,又和哪些类型发生Block,这里的设定又是和CollisionEnabled里边的限制是与关系的,比如CollisionEnable里不允许发生物理反馈,而这里表示要发生Block,但是最后不会发生Block的。

WorldStatic - Volumes and world
geometry should be WorldStatic. 

WorldDynamic - Moving Actors outside
of Pawns, PhysicsBodies, Vehicles, and Destructible Actors. Like an elevator. 

Pawn - Characters. 

PhysicsBody - Any physics object
that is or can be simulated in the world. 

Vehicle - A good response to have
so you can have Pawns jump into them. 

Destructible - Destructible Actors.

关于Mesh的碰撞网格 ,Collision使用的碰撞体全部是继承自Mesh的,而Mesh的碰撞体是在MeshEditor里边自行编辑的。Editor里边有一个选项CollisionComplexity,有三种选择,第一种是Simple,第二种是Complex,第三种是Default。

Simple:Mesh的碰撞体全部由简单立体图形组成,比如Sphere,Cube等等,可以手工添加和删除,与Mesh本体的匹配度不是很高,但是只有Simple支持PhysicsSimulate,这个是重点。 

Complex:每一个Ploy都会计算碰撞,计算量相当大,于是不支持PhysicsSimulate,实用Complex碰撞之后,如果再使用物理模拟的话,会穿过底面掉到无穷远去。

另外必须注意一点,就是我们人物的运动受控于两个大组件,一个是物理引擎,还有一个是MovementComponent。

MovementComponent一定要注意,它很容易被忽视,比如CharacterMovementComponent,它的内部也实现了一个重力移动逻辑,和物理引擎是完全独立的!

添加组件之后要把Default Scene Root 替换掉。比如添加了一个Collision组件。然后把创建组件时的Default
Scene Root替换掉。不然碰撞可能会有问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: