初识碰撞
2023年6月25日 2024年1月19日
概览
虚幻编辑器
- 在虚幻编辑器使用控制台
Console
- 碰撞选项
- 设置对其他类型物体的反馈
- 设置对通道的反馈
- 碰撞时产生重叠事件
- 碰撞时产生碰撞事件
- 自定义物体类型
碰撞
物体之间的交互,会发生以下情形
- | |
---|---|
Ignore | 不会发生碰撞 |
Overlap | 重叠: 可以发生碰撞, 允许通过, 可以产生重叠事件 |
Block | 阻挡:可以发生碰撞, 形成阻碍, 可以产生碰撞事件 |
游戏角色拥有Capsule组件, 用以处理碰撞相关逻辑: 如游戏角色跳起后会落到地面, 而不是穿过地板; 可以操控其上楼梯; 和另一个游戏角色碰撞, 而不是穿过他
轨迹计算
Logical Trace
给定轨迹的端点, 计算场景中与轨迹相交的物体
通过轨迹计算得到射击击中的目标
在虚幻编辑器使用控制台
-
打开控制台
`
运行时, 按下Apostrophe Sign
, 在视口下方会出现命令行, 可以输入调试命令 -
设置打开控制台的快捷键
项目设置 > Engine > Input > Console > Console Keys
输出每秒帧数
stat fps
-
在右上方显示
-
1秒将近40帧
1s / 25ms = 1000ms / 25ms = 40
输出GPU统计数据
stat GPU
隐藏Debug信息
输入相同命令, 或
stat none
显示场景中的碰撞
show collision
-
可以看到Character的Capsule组件;碰撞组件纯逻辑, 在游戏中默认不可见
-
再次输入隐藏
碰撞选项
设置游戏角色穿过物体
在场景中添加Sphere和Cube Place Actors > Shapes
设置游戏角色Capsule组件的碰撞选项
BP_STUBaseCharacter > Capsule Component > Details > Collision
-
碰撞预设默认为Pawn
-
将碰撞预设置为Custom
设置Sphere的碰撞选项
-
将碰撞预设设置为Custom
-
允许游戏角色穿过
对物体类型的碰撞反馈中, 设置对Pawn执行OverlapCollision Responses > Object Responses > Pawn, 勾选Overlap
设置Cube的碰撞选项
-
设置
Collision Preset
为Custom -
允许Pawn穿过
查看
游戏角色可以穿过Sphere和Cube
游戏角色与物体碰撞时, 镜头会放大, 这是Camera通道对于Block设置给出的碰撞反馈
- 可以在SpringArm组件设置碰撞探测通道, 默认使用Camera通道
- Camera组件作为SpringArm组件的下级组件, 是游戏角色的一部分, 此时也与物体碰撞
- 之所以会放大镜头, 在于发生碰撞时要表示阻挡; 我们不应该看到已经穿过物体那部分
设置Camera通道忽略物体
查看SpringArm组件
BP_STUBaseCharacter > 选中SpringArmComponent > Details > Camera Collision > Probe Channel
SpringArm组件如何进行碰撞探测, 默认为Camera通道
Probe Channel |
---|
Camera |
设置Camera通道忽略Sphere
Collision Responses > Trace Responses > Camera, 选择Ignore
查看: 游戏角色穿过Sphere时, 感官上正常
产生重叠事件: 输出Actor信息
在蓝图中处理事件
- 打开
BP_STUBaseCharacter > Event Graph
Event ActorBeginOverlap
之后, 在屏幕打印PrintString
- OtherActor作为PrintString输入, 实际输出产生碰撞的物体名称
为物体勾选发生碰撞时产生重叠事件
-
Sphere
Details > 勾选 Generate Overlap Events
-
Cube
Details > 勾选 Generate Overlap Events
查看日志
产生碰撞事件: 获取碰撞信息
为物体勾选发生碰撞时产生碰撞事件
选择Cube, 去到Details面板, 勾选 Simulation Generates Hit Events
在蓝图中添加事件
BP_STUBaseCharacter > EventGraph, 添加EventHit
补充: 要求物体与Cube的碰撞反馈互为Block,发生碰撞时,才会产生碰撞事件
自定义物体类型
项目设置 > Engine > Collision
创建物体类型Enemy
-
New Object Channel
-
设置
- Name Enemy Default Response Block -
其他类型物体对Enemy采取Block
创建物体类型Geometry
-
New Object Channel
-
设置
- Name Geometry Default Response Ignore -
其他类型物体对Geometry采取Ignore
查看游戏角色的碰撞选项
- | |
---|---|
Enemy | Block |
Geometry | Ignore |
设置Cube
- 物体类型为Geometry
- 忽略Pawn
设置Sphere
- 物体类型为Enemy
- 阻挡Pawn