六一的部落格


行百里者半九十




概览

虚幻编辑器

  • 在虚幻编辑器使用控制台 Console
  • 碰撞选项
  • 设置对其他类型物体的反馈
  • 设置对通道的反馈
  • 碰撞时产生重叠事件
  • 碰撞时产生碰撞事件
  • 自定义物体类型

碰撞

物体之间的交互, 会发生以下情形

-
Ignore 不会发生碰撞
Overlap 重叠: 可以发生碰撞, 允许通过, 可以产生重叠事件
Block 阻挡:可以发生碰撞, 形成阻碍, 可以产生碰撞事件

游戏角色拥有Capsule组件, 用以处理碰撞相关逻辑: 如游戏角色跳起后会落到地面, 而不是穿过地板; 可以操控其上楼梯; 和另一个游戏角色碰撞, 而不是穿过他


轨迹计算

Logical Trace

给定轨迹的端点, 计算场景中与轨迹相交的物体

通过轨迹计算得到射击击中的目标


在虚幻编辑器使用控制台

  1. 打开控制台 `

    运行时, 按下 Apostrophe Sign , 在视口下方会出现命令行, 可以输入调试命令

  2. 设置打开控制台的快捷键

    项目设置 > Engine > Input > Console > Console Keys


输出每秒帧数

stat fps
  1. 在右上方显示


  2. 1秒将近40帧

    1s / 25ms = 1000ms / 25ms = 40

输出GPU统计数据

stat GPU    



隐藏Debug信息

输入相同命令, 或

stat none

显示场景中的碰撞

show collision    
  1. 可以看到Character的Capsule组件;碰撞组件纯逻辑, 在游戏中默认不可见


  2. 再次输入隐藏


碰撞选项

文档


概览

Details > Collision

API

  • 碰撞预设
  • 碰撞使能选项
  • 物体类型
  • 碰撞反馈
  • 产生重叠事件
  • 产生碰撞事件

碰撞预设

Collision Presets

专注自定义选项 Custom


提供多种选项



默认面板

Default



自定义面板

Custom



查看碰撞预设定义

项目设置 > Engine > Collision

支持自定义预设, 对碰撞使能选项, 物体类型, 碰撞反馈进行设置; 可以对已有预设进行修改



碰撞使能选项

Collision Enabled


-
No Collision 不产生碰撞
Query Only (No Physics Collision) 只参与轨迹计算 Logical Trace : 参与给定线段与物体相交计算
Physics Only (No Query Collision) 只用于物理仿真 Physical Simulation : 穿过或被阻挡
Collision Enabled (Query and Physics) 轨迹计算 + 物理仿真

物体类型

Object Type

对该物体的物体类型进行设置, 其他物体依据该属性作出反馈



碰撞反馈

Collision Responses

产生碰撞时, 如何给出反馈; 通过交互矩阵 Interaction Matrix 实现



反馈类型

-
Ignore 不会发生碰撞
Overlap 重叠: 可以发生碰撞, 允许通过, 可以产生重叠事件
Block 阻碍: 可以发生碰撞, 形成阻碍, 可以产生碰撞事件

对通道的反馈

Trace Responses

是否参与该通道的轨迹计算

-
Visibility 给定线段起点和终点
Camera Camera组件

对其他物体类型的反馈

Object Responses

对其他物体类型作出何种反馈

-
WorldStatic
WorldDynamic
Pawn

发生碰撞时产生重叠事件

Generate Overlap Events

出于优化考虑, 默认false

勾选后, 发生碰撞会产生重叠事件, 可以在蓝图中对该类型事件进行处理



发生碰撞时产生碰撞事件

Simulation Generates Hit Events

出于优化考虑, 默认false

勾选后, 发生碰撞会产生碰撞事件, 可以获取碰撞信息



设置游戏角色穿过物体

在场景中添加Sphere和Cube Place Actors > Shapes


设置游戏角色Capsule组件的碰撞选项

BP_STUBaseCharacter > Capsule Component > Details > Collision

  1. 碰撞预设默认为Pawn


  2. 将碰撞预设置为Custom


设置Sphere的碰撞选项

  1. 将碰撞预设设置为Custom

  2. 允许游戏角色穿过

    对物体类型的碰撞反馈中, 设置对Pawn执行Overlap Collision Responses > Object Responses > Pawn, 勾选Overlap



设置Cube的碰撞选项

  1. 设置 Collision Preset 为Custom

  2. 允许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信息


在蓝图中处理事件

  1. 打开 BP_STUBaseCharacter > Event Graph
  2. Event ActorBeginOverlap 之后, 在屏幕打印 PrintString
  3. OtherActor作为PrintString输入, 实际输出产生碰撞的物体名称



为物体勾选发生碰撞时产生重叠事件

  1. Sphere

    Details > 勾选 Generate Overlap Events


  2. Cube

    Details > 勾选 Generate Overlap Events


查看日志



产生碰撞事件: 获取碰撞信息


为物体勾选发生碰撞时产生碰撞事件

选择Cube, 去到Details面板, 勾选 Simulation Generates Hit Events



在蓝图中添加事件

BP_STUBaseCharacter > EventGraph, 添加EventHit


补充: 要求物体与Cube的碰撞反馈互为Block, 发生碰撞时, 才会产生碰撞事件


自定义物体类型

项目设置 > Engine > Collision


创建物体类型Enemy

  1. New Object Channel


  2. 设置

    -
    Name Enemy
    Default Response Block


  3. 其他类型物体对Enemy采取Block


创建物体类型Geometry

  1. New Object Channel

  2. 设置

    -
    Name Geometry
    Default Response Ignore


  3. 其他类型物体对Geometry采取Ignore


查看游戏角色的碰撞选项

-
Enemy Block
Geometry Ignore



设置Cube

  1. 物体类型为Geometry
  2. 忽略Pawn



设置Sphere

  1. 物体类型为Enemy
  2. 阻挡Pawn



初识碰撞



概览

虚幻编辑器

  • 在虚幻编辑器使用控制台 Console
  • 碰撞选项
  • 设置对其他类型物体的反馈
  • 设置对通道的反馈
  • 碰撞时产生重叠事件
  • 碰撞时产生碰撞事件
  • 自定义物体类型

碰撞

物体之间的交互, 会发生以下情形

-
Ignore 不会发生碰撞
Overlap 重叠: 可以发生碰撞, 允许通过, 可以产生重叠事件
Block 阻挡:可以发生碰撞, 形成阻碍, 可以产生碰撞事件

游戏角色拥有Capsule组件, 用以处理碰撞相关逻辑: 如游戏角色跳起后会落到地面, 而不是穿过地板; 可以操控其上楼梯; 和另一个游戏角色碰撞, 而不是穿过他


轨迹计算

Logical Trace

给定轨迹的端点, 计算场景中与轨迹相交的物体

通过轨迹计算得到射击击中的目标


在虚幻编辑器使用控制台

  1. 打开控制台 `

    运行时, 按下 Apostrophe Sign , 在视口下方会出现命令行, 可以输入调试命令

  2. 设置打开控制台的快捷键

    项目设置 > Engine > Input > Console > Console Keys


输出每秒帧数

stat fps
  1. 在右上方显示


  2. 1秒将近40帧

    1s / 25ms = 1000ms / 25ms = 40

输出GPU统计数据

stat GPU    



隐藏Debug信息

输入相同命令, 或

stat none

显示场景中的碰撞

show collision    
  1. 可以看到Character的Capsule组件;碰撞组件纯逻辑, 在游戏中默认不可见


  2. 再次输入隐藏


碰撞选项

文档


概览

Details > Collision

API

  • 碰撞预设
  • 碰撞使能选项
  • 物体类型
  • 碰撞反馈
  • 产生重叠事件
  • 产生碰撞事件

碰撞预设

Collision Presets

专注自定义选项 Custom


提供多种选项



默认面板

Default



自定义面板

Custom



查看碰撞预设定义

项目设置 > Engine > Collision

支持自定义预设, 对碰撞使能选项, 物体类型, 碰撞反馈进行设置; 可以对已有预设进行修改



碰撞使能选项

Collision Enabled


-
No Collision 不产生碰撞
Query Only (No Physics Collision) 只参与轨迹计算 Logical Trace : 参与给定线段与物体相交计算
Physics Only (No Query Collision) 只用于物理仿真 Physical Simulation : 穿过或被阻挡
Collision Enabled (Query and Physics) 轨迹计算 + 物理仿真

物体类型

Object Type

对该物体的物体类型进行设置, 其他物体依据该属性作出反馈



碰撞反馈

Collision Responses

产生碰撞时, 如何给出反馈; 通过交互矩阵 Interaction Matrix 实现



反馈类型

-
Ignore 不会发生碰撞
Overlap 重叠: 可以发生碰撞, 允许通过, 可以产生重叠事件
Block 阻碍: 可以发生碰撞, 形成阻碍, 可以产生碰撞事件

对通道的反馈

Trace Responses

是否参与该通道的轨迹计算

-
Visibility 给定线段起点和终点
Camera Camera组件

对其他物体类型的反馈

Object Responses

对其他物体类型作出何种反馈

-
WorldStatic
WorldDynamic
Pawn

发生碰撞时产生重叠事件

Generate Overlap Events

出于优化考虑, 默认false

勾选后, 发生碰撞会产生重叠事件, 可以在蓝图中对该类型事件进行处理



发生碰撞时产生碰撞事件

Simulation Generates Hit Events

出于优化考虑, 默认false

勾选后, 发生碰撞会产生碰撞事件, 可以获取碰撞信息



设置游戏角色穿过物体

在场景中添加Sphere和Cube Place Actors > Shapes


设置游戏角色Capsule组件的碰撞选项

BP_STUBaseCharacter > Capsule Component > Details > Collision

  1. 碰撞预设默认为Pawn


  2. 将碰撞预设置为Custom


设置Sphere的碰撞选项

  1. 将碰撞预设设置为Custom

  2. 允许游戏角色穿过

    对物体类型的碰撞反馈中, 设置对Pawn执行Overlap Collision Responses > Object Responses > Pawn, 勾选Overlap



设置Cube的碰撞选项

  1. 设置 Collision Preset 为Custom

  2. 允许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信息


在蓝图中处理事件

  1. 打开 BP_STUBaseCharacter > Event Graph
  2. Event ActorBeginOverlap 之后, 在屏幕打印 PrintString
  3. OtherActor作为PrintString输入, 实际输出产生碰撞的物体名称



为物体勾选发生碰撞时产生重叠事件

  1. Sphere

    Details > 勾选 Generate Overlap Events


  2. Cube

    Details > 勾选 Generate Overlap Events


查看日志



产生碰撞事件: 获取碰撞信息


为物体勾选发生碰撞时产生碰撞事件

选择Cube, 去到Details面板, 勾选 Simulation Generates Hit Events



在蓝图中添加事件

BP_STUBaseCharacter > EventGraph, 添加EventHit


补充: 要求物体与Cube的碰撞反馈互为Block, 发生碰撞时, 才会产生碰撞事件


自定义物体类型

项目设置 > Engine > Collision


创建物体类型Enemy

  1. New Object Channel


  2. 设置

    -
    Name Enemy
    Default Response Block


  3. 其他类型物体对Enemy采取Block


创建物体类型Geometry

  1. New Object Channel

  2. 设置

    -
    Name Geometry
    Default Response Ignore


  3. 其他类型物体对Geometry采取Ignore


查看游戏角色的碰撞选项

-
Enemy Block
Geometry Ignore



设置Cube

  1. 物体类型为Geometry
  2. 忽略Pawn



设置Sphere

  1. 物体类型为Enemy
  2. 阻挡Pawn