|
|
@@ -1,7 +1,7 @@
|
|
|
<!--
|
|
|
* @Author: lc
|
|
|
* @Date: 2021-09-03 21:41:18
|
|
|
- * @LastEditTime: 2021-09-14 11:22:02
|
|
|
+ * @LastEditTime: 2021-09-14 14:36:08
|
|
|
* @LastEditors: Please set LastEditors
|
|
|
* @Description: 虚幻学习
|
|
|
* @FilePath: D:\Projects\markdown\虚幻.md
|
|
|
@@ -761,6 +761,8 @@ With Tag 通过给定的标签将场景中与之匹配的对象进行查找,
|
|
|
> 打开网格编辑器,查看复杂碰撞和简单碰撞
|
|
|
> 可以看到绿色的框就是物体的相似接近于桌子的形态,这就是虚幻的K-DOP包裹
|
|
|
|
|
|
+#### 添加简单碰撞
|
|
|
+
|
|
|

|
|
|
|
|
|
> 添加简单碰撞
|
|
|
@@ -770,6 +772,13 @@ With Tag 通过给定的标签将场景中与之匹配的对象进行查找,
|
|
|
虚幻提供三种简单的形状碰撞器:球体、胶囊体、盒体
|
|
|
虚化允许一个物体具备多个碰撞器
|
|
|
|
|
|
+**使用简单的形状制作成复杂的物理碰撞**,是常用的设置物体物理碰撞的方法,因为简单的物理碰撞计算效率最高
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+> 从GIF中可以看到,如何删除物体的碰撞体积,如何使用简单的形状(球盒胶囊)制作物体的碰撞体积
|
|
|
+> **一个模型可以存在多个碰撞框**
|
|
|
+
|
|
|
----
|
|
|
|
|
|
- **添加K-DOP简单凸包碰撞**
|
|
|
@@ -780,6 +789,11 @@ K-DOP是包围体的一种,是K离散导向多面体(K discrete oriented polyt
|
|
|
- 18 - 樊哙中所有边均形成斜角
|
|
|
- 26 - 方块中所有边和角均形成斜角
|
|
|
|
|
|
+
|
|
|
+大概的思想应该是:在物体外围包一个球,然后尽量把球往里面捏,向物体的内轮廓靠拢
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
----
|
|
|
|
|
|
- **添加自动凸包碰撞**
|
|
|
@@ -791,25 +805,114 @@ K-DOP是包围体的一种,是K离散导向多面体(K discrete oriented polyt
|
|
|
|
|
|
> 基于物体的形体轮廓(mesh三角面)进行计算
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+> 使用凸包
|
|
|
+
|
|
|

|
|
|
|
|
|
-----
|
|
|
+> 设置凸包精细度
|
|
|
|
|
|
-- **添加简单的形状碰撞**
|
|
|
+
|
|
|
|
|
|
-**使用简单的形状制作成复杂的物理碰撞**,是常用的设置物体物理碰撞的方法,因为简单的物理碰撞计算效率最高
|
|
|
+> 这里可以看到最后生成的碰撞模型是由四块组成的,刚好与设置的凸包数量的值相同
|
|
|
+> 同理可以修改*最大外壳定点数*来试试,该值越大,每一块凸包的就越精细顶点数目越多
|
|
|
|
|
|
-
|
|
|
+#### 添加复杂碰撞
|
|
|
|
|
|
-> 从GIF中可以看到,如何删除物体的碰撞体积,如何使用简单的形状(球盒胶囊)制作物体的碰撞体积
|
|
|
-> **一个模型可以存在多个碰撞框**
|
|
|
+会按照模型的顶点和线的关系去生成碰撞关系,模型越复杂生成的模型碰撞效率越低
|
|
|
+在静态网格的细节面板设置中,可以开启复杂碰撞
|
|
|
|
|
|
-----
|
|
|
+**复杂碰撞与其他物体进行运动交互的复杂度太高,所以物体开启复杂碰撞就不能开启物理模拟**
|
|
|
|
|
|
-- **添加K-DOP简单凸包碰撞**
|
|
|
+> 从表现来看就是:如果椅子开启复杂碰撞,则用球打击椅子,椅子不会倒,只会进行判断是否触碰
|
|
|
|
|
|
-大概的思想应该是:在物体外围包一个球,然后尽量把球往里面捏,向物体的内轮廓靠拢
|
|
|
+
|
|
|
|
|
|
-
|
|
|
+- Default 设置“默认”使简单碰撞请求使用见到那碰撞,复杂请求使用是咋碰撞。引擎默认SAC(Simple And Complex)模式
|
|
|
+- Simple And Complex创建简单和复杂的形状。简单形状常用于常规场景查询和碰撞测试。复杂形状(逐多边形,比如:查询(射线检测,将射线的交互特性改为复杂碰撞))用于复杂场景查询。
|
|
|
+- UseSimpleAsComplex 如请求复杂查询,引擎仍将查询简单形态,无视三角网格图。这有助于节约内存,因为我们不需要烘焙三角形网格图。如果碰撞几何体更简单,则可增强性能。
|
|
|
+- UseComplexAsSimple 如请求简单查询,引擎仍将查询复杂形态,无视简单碰撞。该设置可将三角形网格图用作物理模拟碰撞(**使用UseComplexAsSimple无法进行模拟物体**,但可以将其和其他模拟物体进行碰撞)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+> 前面说的,在查询时可以使用复杂碰撞检测
|
|
|
+
|
|
|
+### 碰撞设置
|
|
|
+
|
|
|
+- **物体类型**
|
|
|
+
|
|
|
+虚幻中使用物体类型来描述碰撞关系。虚幻只提供了少量的物体类型,我们可以在碰撞设置中进行添加
|
|
|
+虚幻允许我们额外添加18种碰撞物体类型
|
|
|
+
|
|
|
+- **踪迹类型**
|
|
|
+
|
|
|
+踪迹类型用来相应和射线之间的交互关系。虚幻中默认提供两种踪迹类型
|
|
|
+也可以自定义添加其他踪迹类型,虚幻最多允许额外添加18个踪迹类型
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+> 在`Object Channels`中添加自定义碰撞类型
|
|
|
+>> 每加一个物体可以选择该物体与其他所有物体的交互关系
|
|
|
+> 在`Trace Channels`中添加自定义踪迹类型
|
|
|
+>> 每加一个踪迹类型可以选择该物体与其他所有物体的交互关系
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+- **碰撞启用设置**
|
|
|
+
|
|
|
+还是同样的面板中,关于物体碰撞检测的设置
|
|
|
+
|
|
|
+1. No Collision 没有任何碰撞信息产生,并且没有物理碰撞效果
|
|
|
+2. Query Only 只会产生碰撞通知(堆叠通知),但没有物理效果
|
|
|
+3. Physics Only 只会产生物理效果,不产生碰撞通知(堆叠通知)
|
|
|
+4. Collision Enable 即产生碰撞通知,也产生物理效果
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+虚幻引擎会**优先**检查碰撞启用设置,再进行物体之间的碰撞类型判断
|
|
|
+也就是说如果碰撞启用设置为`No Collision`,即使两个物体的物体类型是阻挡关系也不会产生阻挡效果
|
|
|
+
|
|
|
+- **碰撞响应事件**
|
|
|
+
|
|
|
+虚幻中的碰撞响应分为忽略、堆叠、阻挡,与之对应的事件我们尽可以获得到
|
|
|
+
|
|
|
+1. On Component Hit 触发阻挡
|
|
|
+2. On Component Begin Overlap 开始堆叠
|
|
|
+3. On Component End Overlap 堆叠结束
|
|
|
+
|
|
|
+我们可以调整组件的碰撞预设,或是自定义碰撞预设,以达到响应碰撞的不同结果
|
|
|
+
|
|
|
+**堆叠事件**
|
|
|
+
|
|
|
+堆叠事件分为进入和退出堆叠,在虚幻中希望获得堆叠事件通知,需要满足以下条件
|
|
|
+
|
|
|
+1. **双方必须都**勾选生成堆叠事件通知
|
|
|
+2. 物体有碰撞包裹
|
|
|
+3. 碰撞预设体中物体之间的碰撞方式为堆叠(有一方开启即可)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+**撞击事件**
|
|
|
+
|
|
|
+撞击事件的必要条件
|
|
|
+
|
|
|
+1. 希望接收事件通知方式勾选生成撞击事件(谁希望接收,谁开启)
|
|
|
+2. 双方任意一方开启物理模拟
|
|
|
+3. 双方具备碰撞包裹
|
|
|
+4. 碰撞预设中物体的碰撞关系为阻挡
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 物理追踪
|
|
|
+
|
|
|
+虚幻中的物理追踪是在**引擎运行状态下**,允许使用**线或者形状**与场景物体产生交互,并将交互结果进行反馈,以达到动态产生物理交互响应的目的
|
|
|
+
|
|
|
+- 线性检测(射线检测)
|
|
|
+- 形状检测(球、盒子、胶囊)
|
|
|
|
|
|
-----
|