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替换掉。不然碰撞可能会有问题。
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替换掉。不然碰撞可能会有问题。
相关文章推荐
- AndEngine学习:PhysicsCollisionFiltering(有过滤器的碰撞检测)
- Cocos2d-x中Physics物理引擎碰撞检测,setCategoryBitmask,setContactTestBitmask,setCollisionBitmask
- Physics 碰撞检测回调方法出错或者没有效果解决方法
- Unity 碰撞检测 OnTriggerEnter 入门
- Unity碰撞检测中OnTriggerXXX和OnCollisionXXX的功能注解
- Unity 使用物理射线(Physics.Raycast),实现扇形区域碰撞检测三种方法
- [unreal4入门系列之十四] 在UE4中添加碰撞触发事件
- 2015/11/7用Python写游戏,pygame入门(7):碰撞检测
- AndEngine学习:CollisionDetectionExample(碰撞检测)
- Unity3D入门 第壹章 :简单的碰撞检测
- 【Unity入门】碰撞检测与触发检测
- Unity3D入门(二):碰撞检测
- 【Unity入门】碰撞检测与触发检测
- 基于层的碰撞检测 Layer-Based Collision Detection
- OgreOde Collision: Which elements collided (OgreOde碰撞检测:哪一个元素发生碰撞)
- Physics.IgnoreCollision 忽略碰撞
- Rigidbody.OnCollisionEnter 碰撞速度检测
- unity3d入门教程简单的碰撞检测
- Rigidbody.detectCollisions 碰撞检测
- Unity 使用物理射线(Physics.Raycast),实现扇形区域碰撞检测三种方法