UE4碰撞规则详解
UE4的碰撞设置在官方的文档的 物理模拟模块(链接:点击打开链接)。但是操作起来感觉坑还是比较多,所以这里总结一下,以防平时经常会漏掉或忽略某些条件。如果想看关于碰撞响应触发,可以参考链接( UE4蓝图碰撞检测解析) 如果想进一步深入UE物理引擎相关内容,请参考博客 (UE4物理模块分析)
现在开始讲解并总结一下UE4里面的碰撞规则:
1.只有拥有Collision属性的实体才可以碰撞
每个实体Actor,包括static Mesh,sphere,capsule等带碰撞的组件,在detail细节面板都有一个collision属性的栏。这个里面的参数是控制这些实体间进行碰撞的必要条件。
(注:在UE4里面,所有可以直接放在UE4场景世界里的对象都是一个Actor,这个类型在C++中是类AActor。其本身包含了非常多的属性,如坐标,碰撞等必要的特性。继承于Actor的有Pawn,Character,StaticMeshActor,CameraActor等等,所以在游戏世界存在的实体都属于Actor,不过Actor本身可能还包含组件等更多其他的元素)
2.不同实体的碰撞通过碰撞通道来区分
在UE4世界里面所有带碰撞的Actor被分为很多类别,比如WorldDynamic,Worldstatic,Pawn,character等,这些类型被称为一个个collision channel(碰撞对象通道)。一般来说,系统帮你设置了一些基本的collision channel。比如一个设置为静止的立方体归属于Worldstatic,而一个设置为可以动的球体归属于WorldDynamic。UE4做的非常的灵活的是,这个通道的类型,你可以任意的设置与添加,这样,你就可以根据你的情况自由的设置恰当的通道。更自由的是,你可以随时改变这个实体对象所属于的通道类型。
3.每一个实体必定有其自身属于的通道类型
每一个带有碰撞的Actor都有一个自己属于的通道类型,这个类型就在下图的Object Type里面。
4.每个实体可以通过碰撞预设来设置是否对其他通道类型实体产生碰撞
每一个带有碰撞的Actor都有一个Collision Presets(我们称他为碰撞预设),这个预设里面记录了他与系统设置里面所有通道类型之间的碰撞关系。参考下图,我们可以看到,这个实体本身的通道类型是WorldStatic,碰撞预设为BlockAll,意思就是与所有的实体都会产生碰撞。我们可以看到在下面有一个列表叫Collision Response,下面所有的对号都打在了Block里面,这就表示这个实体本身与所有打钩的对象都会产生碰撞。(你会看到还有一个trace response,之后再介绍)除了Block,还有Overlap和Ignore,分别是重叠和忽略。
5.碰撞时相互的,所以两个相互碰撞的实体设置都要满足碰撞条件
那是不是下图的这个实体就会和所有实体都会产生碰撞?不是的!我们知道力的作用是相互的,那这里的这个预设也是一个道理,另一个物体想与该实体碰撞,必须在这个物体所属的类型里面的Block打上对号才可以。这样二者就会相互碰撞了。
6.重叠事件也很重要,可以作为场景触发器事件
设置为Ignore和Overlap就不会产生任何碰撞,但是overlap会产生overlap事件(蓝图以及代码中可以判断实体之间是否有重叠,下面有简单解释)
7.trace response的理解
除了碰撞的通道,还有trace通道。trace也是一种碰撞检测的方法,向一个方向位置发射一个射线,对射线击中的对象进行判断,进而采取进一步措施。
所以trace response就是设置实体本身发射的trace会不会被其他对象响应。
8.正确设置staticMesh的碰撞盒类型(这是导致很多奇怪问题的重要bug)
每个staticMesh的碰撞盒必须正确对应他的StaticMeshSettings下的CollisionComplexity属性(双击静态网格物体文件即可进入编辑器)。这里简单介绍一下,每个静态网格实体都可以在编辑器里面添加碰撞盒,可以给物体设置简单的碰撞盒(球型,盒型,10个面的碰撞盒等),也可以设置复杂的碰撞盒。如果你给该静态物体设置简单的碰撞盒,StaticMeshSettings下的CollisionComplexity属性就应该设置为UseSimpleCollisionAsComplexity。如果设置了复杂的碰撞盒(AutoConvexCollision),这个属性就该为UseComplexityCollisionAsSimple(设置为Default也可以)。如果设置反了,就很容易出现无法正确模拟物理碰撞的情况。

9.最后,我们看一下图中的Collision Enabled类型。
正常4.8之前的版本有下面三个类型选项,文档基本说的比较通俗,不过有两点要注意
| No Collision(无碰撞) - 不同该对象发生碰撞,无论是踪迹碰撞还是物理碰撞。 |
| No Physics Collision(无物理碰撞) - 该刚体仅用于射线投射、扫射及重叠。 |
| Collision Enabled(启用碰撞) - 该刚体用于物理模拟和碰撞查询。 |
a.这个选项类似一个总开关,如果这个地方选择了No Collision,那么不管前面怎么设置通道,也不会产生任何碰撞事件
b.这个里面No Physics Collision表示不进行物理模拟,就是说在这个实体移动时不会产生任何碰撞,但是各种重叠的事件还是会触发的。当这个实体静止的时候,与Collision Enabled的效果是完全一样的,可以碰撞也可以触发各种事件。
4.9之后变为下面的四个类型,如果你在官方文档找不到,切换成英文再查一下就能看到了。(中文文档总是更新的比较慢)
| No Collision | No collision is enabled for this body. | |
| Query Only | This body is used only for collision queries (raycasts, sweeps, and overlaps). | |
| Physics Only | This body is used only for physics collision. | |
| Collision Enabled | This body interacts with all collision (Query and Physics). | |
其实4.9之后把原来的No Physics Collision分成了Query Only 和 Physics Only,也就是说Query Only可以进行各种trace,sweep,Overlap事件的触发,但是不会进行物理模拟,简单的讲就是运动时不会产生任何碰撞。但是静止时是由碰撞的。
Physics Only表示只能进行物理碰撞与运动模拟,但是不会触发任何事件。
注意:如果这里设置为No Collision,那么即使在Actor对象开启了simulatePhysics(开启物理模拟)也不会有效,也就不会受到重力而下落
其他注意内容:对于每个StaticMesh类型的Actor(即存在于场景中的实体),他的的detail面板下StaticMesh栏下有一个BlockingVolum,功能是创建一个物理体积。所谓物理体积就是一个游戏不可见的但是真实存在的实体,可以用于触发事件等。BlockingVolum就是一个带碰撞盒的体积,点击这个按钮,就是给这个实体创建一个单独的碰撞盒体积。按住Alt+C可以隐藏或者显示碰撞盒。这个体积可以用于场景中用画刷刷出来没有碰撞盒的静态物体,但是也需要碰撞的物体。
原文链接(转载请标明):http://blog.csdn.net/u012999985/article/details/51290096
UE4碰撞规则详解的更多相关文章
- Nginx 常用全局变量 及Rewrite规则详解
每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...
- 53个Oracle语句优化规则详解(转)
Oracle sql 性能优化调整 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种:a. RULE (基于规则) b. COST (基于成本) c. CHOOSE ...
- ESLint 规则详解(二)
接上篇 ESLint 规则详解(一) 前端界大神 Nicholas C. Zakas 在 2013 年开发的 ESLint,极大地方便了大家对 Javascript 代码进行代码规范检查.这个工具包含 ...
- QuantLib 金融计算——基本组件之天数计算规则详解
目录 天数计算规则详解 定义 30 / 360 法 30/360 US 30/360 Bond Basis 30E/360 30E/360 ISDA Actual 法 Actual/Actual IC ...
- Apache Rewrite 规则详解
在开篇之前: 我想说这篇文章其实是我刚刚接触Rewrite的时候学习的文档,应属转载,但是在这里我不想写明原地址,原因是文章中大多数给出的配置命令经实验都是错误的.需要原文的可以在谷歌上搜索一下&qu ...
- css样式继承规则详解
css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...
- eslint规则详解
{ // 环境定义了预定义的全局变量. "env": { //环境定义了预定义的全局变量.更多在官网查看 "browser":true, "node& ...
- Nginx之location 匹配规则详解
有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...
- jQuery.validator 验证规则详解
前言:jQuery.validator是一款非常不错的表单验证插件,验证方式非常简单方便,它还对HTML5做了兼容处理,了解了验证规则,就基本掌握了它的使用,下面就让我一一道来 jQuery.vali ...
随机推荐
- hdu6277
hdu6277结论题 #include<iostream> #include<cstdio> #include<queue> #include<algorit ...
- 快速体验 Sentinel 集群限流功能,只需简单几步
️ Pic by Alibaba Tech on Facebook 集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器. S ...
- tornado nginx 同源(Access-Control-Allow-Origin)错误处理记录
如果以下两个步骤操作完还是没有解决问题,可能是因为程序出了别的错误,因为后来的调试中不论出什么问题它都是会返回同源错误..呵呵哒 1.在nginx.conf里配置server,在location里添加 ...
- 矩阵快速幂2 3*n铺方格
#include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...
- 2019.10.29 csp-s模拟测试92 反思总结
今天快乐的墨雨笙因为什么而几乎爆零了呢? 顾此失彼+不会对拍+无脑的复杂度 今天高兴的墨雨笙又因为什么调了一个下午呢? 不明题意+不想范围+板子低级错误 R.I.P. T1: //唉 //害怕TLE, ...
- TZOJ 4021 Ugly Problem(线段树区间子段最大)
描述 给定一个序列A[0],A[1],…A[N-1],要求找到p0,p1,p2,p3使得A[p0]+A[p0+1]+…+A[p1] + A[p2]+A[p2+1]+…+A[p3]最大(0<=p0 ...
- mysql 登录的时候设置编码 utf8
很多时候 导入sql 的时候需要命令行导入 但是有的时候容易出现乱码 因为字符集的问题 所以 尽量在登录的时候就设置编码 就不容易出错了 例如: mysql -uroot -p –default-ch ...
- [转]js作用域系列——内部原理
前面的话 javascript拥有一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域.作用域貌似简单,实则复杂,由于作用域与this机制非常容易混淆,使得理解作用域的原 ...
- Hackerrank--Team Formation
题目链接 For an upcoming programming contest, Roy is forming some teams from the n students of his unive ...
- java并发系列(六)-----Java并发:volatile关键字解析
在 Java 并发编程中,要想使并发程序能够正确地执行,必须要保证三条原则,即:原子性.可见性和有序性.只要有一条原则没有被保证,就有可能会导致程序运行不正确.volatile关键字 被用来保证可见性 ...