Skip to content

Unreal 学习笔记(二)

Actor通信:接口和派生比较

虚幻引擎中的Actor通信 | 虚幻引擎 5.6 文档 | Epic Developer Community

把经常调用的public方法写进BPI(蓝图接口)

  • 比如说,每一帧都需要调用My_GI的Test方法,调用GetGameInstance返回的是UGameInstace而不是My_GI,每次还需要Cast to My_GI才能调用Test,写起来麻烦 imageimage
  • 再举个例子,BP_Sword和BP_Knife,都要实现Attack
    • 可以让他们都继承自BP_Weapon,然后虚函数Override基类的Attack
    • 当然也可以实现BPI_Weapon,里面有一个Attack方法,两个都实现它

性能分析

  • 继承方案,要 Get All Actor Of Class 然后直接虚表调用函数,CPU开销小一点,但是问题在于,要把所有该类的Actor全部加载进内存,如果Actor多了就爆内存了
  • UE采用反射机制实现BPI的Message通信,CPU执行起来更慢一点,但是没有上述的内存问题 对于现代游戏而言,减少内存占用更加重要一些,而且BPI耦合度更低

组合优于继承:ActorComponent模式

TODO

项目打包

  1. 打开项目启动器 image
  2. 编辑配置 image
  3. 返回,启动此描述文件

编辑器标签和内部名称

imageimage

美术相关

导入问题

  1. 和美术确认平滑法线情况,在导入时用UE的重新生成法线还是用模型数据
  2. 模型缩放(UE内被称为“偏移”之类的)

Cropout UI淡出效果

很酷的UMG动画+Shader魔法 image

  1. ConstantBiasScale 对 UV0 执行 输出 = (输入 - 0.5) * 2.0,将原本以左上角为原点的坐标系,转换为了以UI元素中心为原点的 [-1, 1] 坐标系。
  2. 计算和(0,0)距离
  3. 不透明蒙版的判断逻辑可以简化理解为 像素到中心的距离 >= 某个阈值 - Scale。 当 Scale 为 -1 时,这个判断条件变为 距离 >= 阈值 + 1。 image
  4. 对UI控件中的这张贴图,获取笔刷-笔刷材质,调整实例化材质。随着Scale值的增大,阈值-Scale的值在不断变小,也就是外围的像素点变为不透明(全黑)。 不透明蒙版(Opacity Mask) - UE4.27

效果杂项