Unreal Engine07:Actor的物理特性

写在前面

UE4作为物理引擎,其中一大功能就是能够赋予物体以物理特性。这里将简单介绍一下Actor常用的一些物理特性设置。

一、基本操作

  • 这里介绍一些UE4的Editor基本操作;

1. Actor的变换

  • 将Actor类拖动到地图中,生成实例;
  • 鼠标选中Actor实例,此时的模式是位移变换,悬停鼠标到特定箭头可以让Actor沿箭头方向移动;

位移变换

  • 按空格键,此时转换为旋转变换,可沿三个轴进行旋转;

旋转变换

  • 再按空格键,此时为缩放变换,可以沿三个轴缩放Actor大小;

缩放变换

2. 快速转到素材所在路径

  • Actor的网格体和材质均为素材;

  • 点击细节面板中的放大镜按钮,即可打开网格体和材质所在的文件路径;

打开网格体或者材质所在的路径

3. 播放游戏选项

  • 播放游戏有不同的选项,如下:

播放游戏

  • 常用的选项对应的含义如下:
    • 选中的视口:播放游戏后,视角跳转到地图中的预设玩家视角,这也是真实游戏开始时的玩家视角;
    • 模拟:播放游戏后,视角并不跳转到玩家视角,仍停留在当前的视口;

二、碰撞

  • 碰撞是一种物理特性,当Actor在游戏中有了实际的体积,会占据一部分空间时,才会和其他Actor产生碰撞;

1. 设置碰撞形状

  • 双击网格体素材,即可打开网格体编辑窗口,可以为网格体增加或者修改碰撞的形状;

  • Actor碰撞的形状并不一定是Actor本身的形状,尤其是对于复杂形状的Actor来说,用一个简化的碰撞形状可以极大地降低碰撞时的计算损耗;

  • 点击碰撞->勾选简单碰撞可以查看当前网格体已设置的简单碰撞模型,显示为绿色线,如下:

简单碰撞

  • 勾选复杂碰撞可以查看当前网格体已有的复杂碰撞模型,显示为浅蓝色线,如下:

复杂碰撞

  • 对于静态网格体而言,碰撞均参照的是简单碰撞,不会启用复杂碰撞;
  • 可以为静态网格体添加新的的简单碰撞,点击碰撞,选择要添加的碰撞模型即可;

添加简单碰撞

  • 注意碰撞模型的形状是可以进行变换(包括位移、旋转和缩放)和叠加的;
  • 这里增加了一个倾斜的盒体碰撞;
    添加的简单碰撞模型

2. 打开模拟物理

  • 在细节面板中可以勾选模拟物理,否则碰撞不会生效;
  • 注意启用重力

模拟物理

  • 启用模拟选项播放游戏,可以看到Actor在重力的作用下,以立方体的碰撞模型立在了地面上,而不是以它本身的形状;

碰撞结果

三、Actor移动过程中的碰撞

  • 移动过程中的发生碰撞后,可以采用的措施有两种:
    • 重叠:碰撞的物体没有实际的碰撞效果,表现为穿模;
    • 阻挡:碰撞的物体产生实际的碰撞效果,阻碍Actor的前进;
  • 前面有提到,如果不勾选模拟物理,也不增加别的代码逻辑,将不能有阻挡的效果;
  • 这里将使用C++实现在不勾选模拟物理的情况下的阻挡效果;

1. Sweep概念

  • Sweep是扫描Actor的前进路线,并在碰撞时产生阻挡效果;
  • 能够在不启动模拟物理的情况下,实现实际的物体碰撞;
  • Sweep = true,扫描前进路线,并在碰撞时采用阻挡
  • Sweep = false,不扫描前进路线,在碰撞时采用重叠

2. 实现的功能函数

  • 实现的C++功能函数如下:

移动中的碰撞设置

  • 就是在移动函数AddActorLocalOffset中,启用Sweep参数,并将信息保存在一个碰撞结果类对象中;
  • 如果Sweep = false,则碰撞的HitResult.bBlockingHit = false

3. 碰撞的效果

  • 由于没有启用模拟物理,因此Actor并没有具备重力,仍然是在空中漂浮;
  • 将玩家视角移动到合适的位置,启用选中的视口播放游戏;
  • 当鼠标进入游戏中时,点击键盘上方数字1左边的按键,可以调出CMD控制台;
  • 输入show collision,可以显式地看到各个Actor的碰撞模型,这里Actor是和墙撞在一起了,如下:

碰撞过程

四、碰撞的细节

  • 每个Actor可以具备不同的碰撞属性;
  • 这些属性将决定两个Actor是产生重叠效果还是阻挡效果;
  • 在细节面板的Collision中可以看到碰撞属性:

碰撞属性

  • 碰撞预设就是决定是否会产生碰撞的效果:
    • 对象类型:指当前的Actor是什么类型;
    • 碰撞响应:指当前Actor和其他类型的Actor碰撞时,是产生重叠效果还是阻挡效果;
  • 可以用系统已经创建的碰撞预设,也可以自定义碰撞预设
  • 两个Actor碰撞时,只有相互的碰撞预设都是阻挡,实际的效果才会是阻挡,否则为重叠,也就是说单方面地设置为阻挡是无效的;

五、力和力矩

  • 力能使物体产生位移,力矩能使物体产生旋转;
  • 力和力矩均需要勾选模拟物理才能生效;
  • 为Actor添加力和力矩的实现如下:

添加力和力矩

  • 力和力矩均是按照世界坐标系的X轴、Y轴和Z轴来设置的;
  • 力是沿三个轴的方向位移,力矩是绕三个轴旋转;
  • 传入的参数均为FVector类型,对应(X, Y, Z)

猜你喜欢

转载自blog.csdn.net/weixin_43992162/article/details/129008193