UE4之全流程开发基础知识(上)

用户头像
石家庄/网页设计师/5年前/742浏览
UE4之全流程开发基础知识(上)

初入虚幻引擎全流程开发所涉及的一些基础知识

UE4之全流程开发基础知识(上)





undefined


      经过一年的时间,终于通过UE4将去年的《PERIODIC TABLE 元素周期表 概念设计》成功实现出来,也是对初入学习UE4第一个学习项目。这其中也是踩了大大小小不少坑,这座山找不到解决办法,翻到另一座山解决。看不懂的鸟语找各种朋友帮忙。公司的程序大哥哥小姐姐们都快被烦死了。最终才搞定这个学习项目。

      现在我将项目中涉及到功能点与大大小小的坑整理在这里,感兴趣的朋友可以看看(全文大概在2.4万字),希望对想研究UE4这款引擎的朋友有所帮助。之后我会将发布程序与项目源文件分享在百度云与github上。同时我会将X-MIND版与WORD版的内容放置在百度云。项目程序请使用4.25.4或高于的UE4版本。




      随着数字孪生的日益普及与逐渐进入大众的视野,虚幻引擎已经不仅仅用来制作游戏了。涉及领域甚是包含建筑可视化、影视制作、产品制造展示与数据可视化展示。同时随着近期UE5的体验版发布后伴随Nanite虚拟几何体与Lumen功能的出现,致使我们能够更容易更简单的构建一个更真实数字虚拟世界。




      虚幻引擎并不是一个简单的3D软件,它是一个全面性的开发编辑器, 其学习难度要远高其他三维设计软件,甚至会涉及一定的代码逻辑与知识,同时还需要多软件的联合制作。其中会涉及到PS、XD、AI、AE、DW(代码编辑器)、C4D/3DMAX/MAYA(基础建模软件)、Substance Alchemist、Substance Designer、FontCreator(字体库编辑软件),为什么会涉及这些软件我会在下面的功能点介绍里说明。



undefined


      接下来我会根据开发本项目我所应用及所涉及到功能点做部分的介绍与说明,毕竟虚幻引擎这个东西真心不像其他软件1、2年就可以玩透的,我只能为各位介绍下我所用的一些功能点与制作时碰到的坑。

      这里我将所用的内容分类为资产管理、模型、贴图制作与导入、字体应用、材质、参数集、枚举、蓝(Actor)、数据表、UMG(用户界面)。



undefined


元素每个区域的信息








undefined


元素模块内容信息所使用的各种字体与字重







undefined


区分的是周期表中的区域,分为s、d、ds、p区,是按电子填充规律划分的




undefined


全新的用户界面,采用橙与蓝的互补色的搭配,为整体项目提升科技感的同时带有一丝暖意。全新的界面还对数据内容进行重新的编排,使用户可以更清晰的查阅每个元素的数据内容。




undefined


      接下来我会根据开发本项目我所应用及所涉及到功能点做部分的介绍与说明,毕竟虚幻引擎这个东西真心不像其他软件1、2年就可以玩透的,我只能为各位介绍下我所用的一些功能点与制作时碰到的坑。

      这里我将所用的内容分类为资产管理、模型、贴图制作与导入、字体应用、材质、参数集、枚举、蓝(Actor)、数据表、UMG(用户界面)。



undefined


      资产管理顾名思义就是对项目所应用的所有资产的一个管理,比如关卡、材质、贴图、媒体文件、蓝图、字体、数据表等等。所以不做过多的说明,在这我只说下各位需要主要的问题。

      首先,对于没有接触过代码的朋友会有一个问题,就是文件名会用中文去命名,这时就可能会出现引擎无法识别路径找不到对应内容的问题,所以各位尽量所有都使用英文命名。

      其次,部分文件不会被添加到资产目录里需要手动添加,比如媒体文件与字体文件,因为这些文件在创建是引擎是让咱们选择的外部路径。如果需要分享项目文件时就会出现这些外部文件找不到链接的问题。

      最后来说下如果使用了中文命名引擎找不到路径怎么解决,这里并不是简单的修改一下名字就能解决的。首先各位在修改完文件名后,可能会出现修改后的文件未被指向到源位置和被复制了一份并且原文件无法删除的情况,这时需要右键文件或文件夹选择“修复重定向器”这时文件就会被重新指向到源位置然后就可以手动删除原文件了,如果在资产管理器里无法删除可以手动找到文件目录在目录里删除。其中需要注意的是千万不要再外部修改文件名一定再资产管理器里修改,不然会出现报错问题。



undefined


undefined



undefined




undefined



undefined


      模型具体怎么导入用什么格式这类的就不说了,主要说下在导入模型时需要注意的。

      首先就是法线方向,本人用的C4D在导入模型时很多法线是返的,在导入至UE4种后就会发现模型上了材质看不到 ,解决方法有两个,一个是开启材质的双面材质这个明显不太友好,后期还会碰到其他问题,所以最好还是手动调整好所需的发现方向后再次导入模型。

      然后就是模型轴的位置,有时会发现模型导入后,模型并没有在轴中心位置,而便宜的很多,这时需要手动调整轴位置后再次重导入。

      最后就是模型材质尽量使用材质实例,这样方便后期的材质调整。

      至于LOD,UE4自带自动的LOD一般来说是可满足大部分需求,但是如果最求完美还是自行制作,不过随着UE5体验版的发布我想也没有什么必要了。


undefined



undefined


      贴图所支持的格式也蛮多的这里也就不挨个说明了。主要需要注意LOD,虽然模型有自动LOD、UE5有Nanite,但是贴图好像并没有,所以在大量使用高清贴图时还是会影响程序的运行速度。所以还需通过层次细节内的MIP生成设置与LOD偏移去设置我们所需的贴图大小,然后结合蓝图节点去控制所需的LOD。


undefined



undefined


          使用OC、RS、Arnold、VRAY等渲染器的朋友尽量还是使用Substance Designer来制作贴图,虽然UE4也是节点编辑器,但是器工作原理相对来还是很不友好的。

          举个例子,比如说一个简单的渐变色与渐变方向的调整,现在市面上绝对多数渲染器都只需一个节点即可完成。但是UE4就会涉及至少4-6个节点,并且还需要咱们懂得其工作原理才能调整出想要的效果。



undefined


      媒体视频需要结合动态媒体源、动态纹理与媒体功放器一同使用。主要用于模型需要动态材质,比如场景里放置了一台电视机,那么你可以让电视机播放想要的视频。

      说道这个应该会有人想到为什么不用GIF,因为目前UE4并不支持GIF格式的贴图,虽然有一个外部插件可以导入GIF并使用,但是综合可控性是比较差得,毕竟GIF图你不能控制他何时播放何时停止,相对来说如果你只需不可控的动画效果那么用插件导入GIF贴图确实是一个不错的选择,但是这里还是推荐各位使用媒体播放的方式。

      下面来说下在使用媒体视频时都有哪些坑需要避免。

      首先,大家在建立动态媒体源时,尽量将源视频手动放置在项目资产目录里,这样在分享项目与打包项目时就不会出现丢失源文件的问题。

      其次,一个媒体播放器可以对应多个动态纹理。举个例子,比如说你有一个媒体播放器,但有2个动态纹理分别在不同的模型材质上。这时2个模型播放的是同一个视频文件,如果你需要让他们分别播放不同的视频,那么你就需要在创建一个媒体播放器才能播放不同的视频。



undefined




undefined


undefined



undefined


undefined



undefined


      导入字体后会生成一个字体样式与字体。字体样式就是所使用的字体文件,为避免分享项目与打包项目时丢失源文件,尽量将源文件放置在资产目录内,

      至于字体就是一个字体样式管理器,我们可以通过默认字体族系与子字体族系添加其他字体字重,还可通过下方预览输入内容查看具体内容的字体样式和是否用于字体样式。而退却字体族系理论上来说,当当前族系没有所需字体样式时自动使用的代替的字体样式,但是通过测试发现好像并没有用。所以这时就需要使用字库编辑软件在外部重新编辑字库再次导入,这里我用的FontCreator。



undefined


undefined



undefined


undefined



undefined


      UE4的材质编辑器相对目前市面流行的各大渲染器来说并算友好,除了需要熟练运用各种数学算法外,一些在其他渲染器看似简单的节点想要在UE4内使用是极其复杂的。




undefined


      数学运算节点是UE4内最基础且最常用的工作节点,只有熟练使用了数据节点才能制作出精美的材质。



undefined


      Multiply 乘法也可当做混合使用,制作发光材质时配合参数节点使用,快捷键m




undefined


      divide 除法 快捷键d




undefined


      Subtract 减法 去掉共有的纹理




undefined


      加法,将两个通道上的数值或者纹理增加到一起 快捷键“a”




undefined


      Mask(分化蒙版),用来屏蔽、分离通道,分化多维向量的值等,可通过细节面板选择所需分离或屏蔽遮罩的R、G、B通道。




undefined


      Lerp(线性,全称LinearInterpolate)线性插值 用来融合两个通道,当alpha值等于0时,融合值为A通道,为1时为B通道,因此0.5以下则为靠近A通道颜色,0.5以上靠近B通道,0.5为对等分融合,快捷键L




undefined


      Sin(正弦)与Cosine(余弦)在-1到0之间浮动的抛物线(曲线) 和time配合使用,比如可以用在物体自发光闪烁上(在-1到1之间反复运动)


undefined



undefined


      if做参数判断 A和B是基础对比判断参数,如果A>b那么输出A>B所连接的参数C,如果A=b那么输出A==B所连接的参数D,如果A<b那么输出A<B所连接的参数E.




undefined




undefined


      当勾选了材质细节面板里的使用材质属性选项后,咱们就可以使用参数材质与混合材质进行图层的混合。



undefined


      材质属性,与默认的属性接口一样,但有一个输出接口可以配合混合材质属性使用。




undefined


      混合材质属性与大多数渲染器的图层节点功能一样。




undefined



undefined


      UE4想要制作毛玻璃效果,并不能想其他渲染器一样提高粗糙度即可,需要使用SpiralBlur-SceneTexture高斯模糊材质函数节点来实现。这个几点其实我也没弄太明白,但是仅仅是制作简单的毛玻璃,配合参数节点控制Distance的强度,将Result与SceneColor Clamp分别配到基础颜色与透明度即可。

      在使用这个节点时也有一些问题,在毛玻璃后方的所有拥有透明材质的模型将不可见,具体原因目前我也不太清楚,可能是最大折射深度的问题,目前暂时没有很好的解决办法。




undefined



undefined


      Frensnel(菲尼尔)   学过任意一款3D软件的朋友应该都用过,所以不多说。




undefined



undefined


      TexCoord(UV坐标节点,全称TextureCoordinate)纹理坐标。

      纹理数量等于UV值相乘 U为横向 V为竖向 快捷键U




undefined



undefined


      其实算一种置换节点,需要配合数学节点与纹理节点一同使用。




undefined


      模型在全局空间内的顶点法线颜色,配合Mask节点可以输出指定通道,也可配合Multiply节点与Vertex Coolor节点制作置换效果。




undefined


      constant(一维向量) 输出R通道0-1(黑-白)的向量 快捷键1




undefined


      constant2Vector(二维向量) 输出 R G通道 快捷键2




undefined


      constant3Vector(三维向量)输出RGB通道 快捷键3




undefined


      constant4Vector(四维向量)输出RGB及alpha通道 快捷键4





undefined



undefined


      TextureSample(纹理贴图)节点如名称所示,用于贴图的调用。不仅可调用常用贴图还能调用动态媒体纹理。




undefined


      材质参数是广泛应用去UE4内的一种可调用可修改的参数值,就好如C4D中的用户数据类似(本人入门软件)。通过右键选择转换参数或提升参数,可将向量、常量、纹理等节点转换为参数节点,在通过命名,可供蓝图、用户界面、材质实例等多方面调用并对其进行参数的修改。




undefined


      通过右键材质选择“创建材质实例”来为主材质创建一个或多个子后缀为Inst的材质,子材质及时材质实例,每个材质实例都会继承主材质的所有属性,并可修改主材质内的全部参数节点与部分材质属性。

      多个材质实例可分别修改参数,也就说你可以通过建立一个主材质,然后根据主材质修改出多种不同的子级材质,同时修改了主材质时子级材质也会修改。

      材质实例除了以上用处外,还有一个最大的用处。当模型使用材质实例时,我们可通过调整材质实例内的参数,在编辑器视口内实时预览材质的情况,如果使用主材质则需要保存并等待重新构建纹理。这样可大大提升工作效率。




undefined


      参数集是一种高级参数的用法,一个参数集可以建立多个标量参数和向量参数,同时还可应用在多个材质或者蓝图内,拱起调用。

      虽然参数集是一种高级参数,但是也是有其弊端。比如参数集不可在材质实例里进行修改,又或者在修改参数集后所有调用的此参数集的资产都会一并修改。所以在使用时还是需要慎重选择。



undefined




undefined




undefined


      枚举简单来说就是一个可选的下拉菜单,通过枚举去实现流程的控制。

      通过右键蓝图创建枚举资产。一个枚举资产可以新增多个枚举类型。之后我们可在蓝图变量中根据枚举资产的名称创建一个枚举变量,这时变量就会获取我们建立的枚举内的类型。

      枚举的使用范围还是很广泛的,比如可以配合布尔做布尔运算,可以配合切换做流程控制等。而且枚举带有描述与选项的直观性,相对使用数值等方式来做流程控制更为直观。



undefined




undefined




undefined




undefined


      对于不会C++的朋友来说蓝图是玩转UE4最基本的功能。而且蓝图有很多种类但是大体功能都差不多,这里我用Actor这类蓝图来给他说介绍我所使用的到的蓝图功能点。



undefined


      变量是蓝图中最最基础的工作节点,其涉及UE4中方方面面极大部分的内容。只有熟练掌握变量的应用,才能更好的使用蓝图内的其他功能。因为变量类型太多,这里我只针对我用过的来说明。



undefined


      在说明之前,大家需要先了解所有变量都拥有2个节点“设置变量与获取变量”。

      1.设置变量是对变量参数的设置。可以手动调整获取从其他节点获取

      2.获取变量是把变量当成一个参数,并设置给其他节点

      其中要注意的是,变量的设置与获取是有先后顺序的,先设置后获取与先获取后设置最终得到的结果是完全不一样的。



undefined


      细节面板,我们可以设置“变量名称”,选择所需的变量类型与变量容器等变量细节。其中单独说明下,当打开可编辑实例时大家可以在关卡里的细节面板调整已经放置的本Actor并打开可编辑实例的变量。最后变量在编译成功后才可对变量默认值等属性进行操作。




undefined


      设置变量拥有一个输入口和一个输出口与2个执行口。

      1.可以通过修改设置上的输入框设置数值。

      2.也可通过其他几点或其他变量参数位置赋值。

      3.我们还可通过右键对应的接口,选择提升为变量直接创建一个该类型的变量。

      注:这里设置的值并不是默认值,当程序执行到本节点后参数则会被修改。



undefined




undefined




undefined




undefined


      对于向量类的变量,我们可以右键每个数据接口去分割结构引脚,然后叫向量的每类引脚分开可供我们单独链接使用,当然这个分割不仅仅使用在变量上,许多带有向量的应用节点也是可以分割的,当我们仅想设置某各值的时候而不知道从何下手时,不妨试试右键接口看看能不能分割。




undefined


      获取变量是获取变量当前参数值并将其赋予某节点。




undefined


      布尔变量,基础的判断型变量,分别可以设置True与Fasle,经常配合分支节点使用。常用节点之一。




undefined


      浮点变量,一个实数节点灵活度与应用范围非常的好 。几乎所有节点都能应用的变量。常用节点之一




undefined


      整数变量,一个整数变量相对浮点灵活度较差但是应用范围页非常广泛。也属于常用节点之一。




undefined


      时间变量有很多类型,比如时间间隔、日期时间、时间码。都是时间的变量。经常与拆分节点使用。




undefined


      Actor变量是一个类型的统称。Actor变量的默认值是不可能编辑的,需要进行设置。但是我们可以通过变量类型输入已有的Actor蓝图名称创建指定的Actor变量。同时Actor变量可以创建自己的事件。平时Actor变量会与获取节点、设置节点与类型转换节点配合使用较多。




undefined


      静态网格体变量,是一个模型设置与获取的变量。我们可以使用次变量设置所需调用的模型。通过静态网格体变量生成的模型不会显示在蓝图视口与组件内。这个变量多用于动态获取或修改改变模型。




undefined


      变量,经常与获取材质与设置材质配合使用,来实现动态更换材质或者更改材质参数的目的。属于常用变量一。




undefined


      枚举变量在上方介绍枚举时已经很详细说明了着了不多说了。




undefined


      媒体播放器变量就是调用媒体播放器使用,经常配合播放、暂停、打开源等节点使用。当蓝图实例需要调用打开多个不同媒体时,我们需要媒体播放器变量与纹理变量配合使用,然后编辑各个蓝图实例上的这2个变量,即可达到每个蓝图实例播放不同的媒体。




undefined


      基础媒体源变量是调用媒体源的变量,常配合打开源节点使用。只有当打开了媒体源,媒体播放器才会播放媒体,动态材质才会显示媒体播放。




undefined


      纹理变量同时可调用动态纹理与静态纹理,可与设置纹理参数值节点设置纹理贴图,如果设置的是动态纹理,那么配合媒体播放器变量与播放节点即可播放媒体文件。本变量不仅应用在设置模型贴图,还可设置灯光天光等组件上,所以也属于常用变量。




undefined


      线性颜色变量,一个颜色的变量,不仅可以用于修改材质的向量参数,也可用于涉及颜色的组件。同样属于常用节点。




undefined


      UMG变量也是用户界面变量,这个变量在创建时与其他变量略有不同。首先我们需要创建一个UMG蓝图(用户界面蓝图),之后我们随便创建一个变量,然后再变量类型里搜索我们UMG蓝图的名称进行创建。UMG变量常与添加到视口节点和从父项移除节点配合使用。得以实现当用户对Actor进行交互操作时打开或关闭所需的用户界面。




undefined


      函数常用的一个函数脚本,用来构建或封装一些复杂的函数方便调用。




undefined


      构造脚本,默认无法删除的函数脚本,多用来预先构建某些事件。




undefined


      点击我的蓝图慢板函数后方的加号可以新增一个新函数。我们手动新增的函数,目前我所了解的是函数除了不能直接使用时间轴节点外其他节点都可以使用,但是函数可以调用已有的时间轴节点当做一个事件使用。

      并且手动新增的函数还可创建输入与输出的参数接口,方便我们将变量参数直接传入或传出。




undefined


      我们可以通过函数细节面板手动添加输入接口与输出接口,并调整戏接口类型与接口名称。当我们在创建输出接口后,会自动新增一个返回节点。具体的使用看下方实例。




undefined


      我们可以通过函数细节面板手动添加输入接口与输出接口,并调整戏接口类型与接口名称。当我们在创建输出接口后,会自动新增一个返回节点。具体的使用看下方实例。




undefined


      调用函数时,如果布尔值为“ture”则执行数组循环赋值到字典,当循环完成时返回枚举显示。如果布尔值为“false”,则返回枚举不显示。




undefined


      调用函数时,如果布尔值为“ture”则执行数组循环赋值到字典,返回枚举显示如果布尔值为“false”,则返回枚举不显示。

      这2个函数看似一样,实则大有不同,例子1:是当循环赋值完成后才会返回在执行接下来的程序,如果数组的数据量非常大时,这个时间可能会很长。

      例子2:并没有等待循环结束直接返回并执行下面的程序,如果这时数据量过大就会出现后面程序已经开始执行而数据还没有赋值完成显示不出来。

      所以这个返回节点具体放在什么位置还需斟酌。




undefined


      图表,蓝图编写主要程序的地方。我们可以新增多个图表,每个图表可以拥有多个事件。




undefined


      UE4为我们准备了多种多样的事件选项,当触发事件后就会执行事件所对应的程序。当然除了一些固定事件外,为了方便管理与调用UE4还为我们增加了一种自定义事件。



undefined


      程序开始运行就执行的事件,用处很多,比如运行一段蒙太奇动画、生成一些模型、创建一些UMG蓝图等。




undefined


      Tick事件,每帧行一次程序。“Delta Seconds”参数则是每帧所的时间,因为各种原因(比如卡帧等),每一帧所花费的时间并不是相同的。“Delta Seconds”具体用处目前我还没有弄清楚。并且次节点是在实时执行程序,如果如果频繁使用会降低程序运行速度。




undefined


      事件被点击的Actor,也就是当Actor被点击时所触发的事件。应用范围非常广泛。Button Pressed为按下按钮参数。




undefined


      如字面意思,就是鼠标开始悬停与结束悬停所触发的事件,这两个会经常配合使用。




undefined


      滚轮事件有3类,鼠标滚轮轴、鼠标滚轮上滚与鼠标滚轮下滚。先来说下我所用的是鼠标滚轮上滚与鼠标滚轮下滚。这2种与鼠标左键事件一样,只是输入方式改变了而已。通过输入消耗上滚轮与下滚轮来实现镜头远近。而鼠标滚轮轴事件则是每帧提供一次滚轮轴的当前值。

      至于这2类有什么不同呢,滚轮上下滚的的事件是输入时执行,需要配合多个数学几点与控制节点来配合,相对来说不太影响程序的运行速度。而鼠标滚轮轴是程序开始运行时就开始TICK滚轴轴的值,相对来说会比较占用程序运行速度。




undefined


      看到这里大家会发现,每个事件的右上角都有一个红色圆角方块。这个是Output Delegate委托事件,这个功能我还真没有用到仅仅了解了一下,终于的逻辑层面还是必须深的,感兴趣的朋友可以去查一查管网的资料。




undefined


      鼠标左键、鼠标右键事件。最最最常用的事件。Pressed为按下事件,Released为松开事件,Key是返回的一个键值。其实这个事件其实更应该称为“键”事件,因为我们可以通过细节面板修改输入的方式,直接改变触发事件所需的键位与物理设备。这其中消耗输入、暂定时执行与重载父绑定我没有接触就不做说明了。下面的修改器,其实就是绑定PC与Mac的CTRL、ATL、SHIFT与WIN键来一起输入。




undefined




undefined


      我们通过右键图表空白区输入“自定义”,即可找打添加自定义事件。自定义事件是一个灵活且非常常用的事件,他可以将复杂的程序逻辑整合成一个事件供我们在需要的时候进行调用。有的朋友会发现这个事件与函数貌似差不多,那么为什么不用函数?目前我发现的区别就是自定事件可以跨蓝图进行通讯调用,而函数则不可以。

      在创建自定义事件时大家需要注意,自定义事件的名称是可以自行修改的,方便根据名称进行调用,但是自定义事件的名称不能重复。




undefined


      自定义事件之所以灵活就是它为我们提供了输入接口,我们可以通过自定义事件的细节面板内的输入区新建所需调用的的变量接口类型。通过这个接口我们可以让本蓝图或其他蓝图的变量数据传入到这个事件内,供事件内的程序使用。




undefined


      添加了输入接口的自定义事件,通过下方蓝色调用自定义事件左侧接口接收输入,然后从上方红色自定义事件右侧接口输出给程序。




undefined


      节点,蓝图程序构成的基本的元素。UE4蓝图的节点众多,每个节点都有不同的功能与用处,我这里至整理了我所应用到的节点。



undefined


      流程控制类节点用于程序的流程管控与整理程序代码,属于常用的蓝图节点类。



undefined


      序列节点的作用就是可以将一个长的顺序执行代码划分成段,更便于管理。





      分支节点,需要配合布尔值来进行判断执行的节点。




undefined


      切换节点Flip Flop,根据输入事件在A与B之间切换执行程序代码。




undefined


      我用到了两种循环节点,For Each Loop、For Each Loop with Break。这两种循环节点都是用于循环执行数组变量的节点。均都从左侧Exec进入然后通过Loop Body进行循环,右侧Array则是输入的数组,右侧Array Element则是输出的元素,而Array index则是元素的索引。Completed是完成执行接口,当loop Body循环执行完成后可以触发Completed之后的事件。要说这两个节点的区别则是在于左侧的Break,这个中断,当某个事件通过次接口后则会中断停止循环。

      大家在使用循环节点时需要注意的是,当我们更换数组类型时,Array、Array Element这两个接口时不会自动更换类型的,需要我们手动断开链接后先链接Array这个接口然后节点就会自动更换类型。




undefined


      切换节点我们上面枚举篇幅里有过体现这里就简单说下。

      当我们右键输入“切换”时,可以在Switch里看到很多类型,这里不要怕。其实这个切换就是我们枚举里的类型,根据当前枚举所选的类型去执行对应的程序代码。当我们了解了这个切换是做什么的之后就好说了,我们只需要找到与我们枚举相对应的切换节点即可。




undefined


      门gate节点,其实一种开关节点,Enter是输入事件,Open则是由某事件控制开启输入,Close则是由某事件控制关闭输入,Toggle则是由某事件控制在开启与关闭之间切换。Start Closed是否启用关闭事件。




undefined


      时间轴节点,是蓝图图表常用的一个节点。通过它我们可以实现一些效果或控制一些事件。



undefined


      很简单左侧为事件输入,右侧则是输出执行。

      先来看左侧。Play播放,不多说就是播放。Play from Start从头开始播放,就是没次播放都会从头开始。Stop停止,小学4年级英语不多说。Reverse反转,这里要注意这个接口时从当前时间点反转。Reverse from End从末端反转。Set New Time设置新时间,举个例子:假如当前时间轴共5秒,你可以通过这个接口与New Time浮点去更改新的时间,可以更长也可以更短但是时间轴里的关键帧位置是不变的。

      然后是右侧输出。Update执行,如例1:开始执行,立方体1秒Z从0旋转到360。

      Finished完成时,如例2:时间轴播放完成后执行立方体Y轴直接变成180。Direction是时间轴自带的枚举变量,是当前时间轴的一个播放状态,这里UE4自带翻译是快进与快退,其实我感觉正确的翻译应该是播放与反转播放。

      最后是下方4类轨道变量,供输出使用的。这里大家看到的是4类,其实这里是大家手动添加的。




undefined




undefined




undefined


      当我们双击时间轴节点即可打开时间轴面板,这里进来后是没有时间轨道的,对应的我上面所说的4类变量接口也是没有,大家通过上方添加这几类变量轨道,浮点轨道、向量轨道、事件轨道、颜色轨道。还有一个是根据所需曲线添加轨道这个下面说。长度设置时间轴的总长度这时秒为单位(本人没找到怎么改成帧,所以习惯帧的小朋友们注意下),然后还一些公共参数,使用最后一个关键帧、自动播放、循环等根据自己需求选择就好。

      下面来说下轨道相同的功能,当我添加了一条轨道后,对应我们可以通过F2修改轨道名称,同时节点上也会显示这条轨道的接口。我们还可以通过外部曲线选择一条曲线直接添加进来(方便相同效果的调用不用来回手动调整)。还有一个同步试图,当有2条以上轨道时,那条轨道没有勾选次选项那条轨道既不会同步缩放移动。

      接下来看下不同轨道之间的不同作用。




      undefined


      一个浮点值的轨道(就是带小数的)。我们可以通过它做很多事情,比如让物体旋转、物体移动、物体缩放、调整某个RGB通道值或者作为Alpha值来使用。

      因为是浮点值所以整体动画会很细腻。因为UE4并未提供整数轨道,所以各位入如果需要整数则需要配合数学节点里的转换整数节点进行转换。




      undefined


      向量轨道,看到的是XYZ三个轴,其他各位吧它理解为三个浮点值就好,我们可以通过右击时间轴节点上的蓝色向量参数接口将其拆分,这时大家看到的就是3个XYZ的浮点节点。这里大家可以分别调整这3条曲线。用法与浮点轨道一样其实就是从1条曲线变成了3条。




      undefined


      这个轨道我还真没用到。事件轨道没有曲线仅有关键帧,其实就是当事件走到关键帧时就会触发事件接口所连接的程序代码,如果你轨道内有多个关键帧就会触发执行多次。




      undefined

      颜色轨道就是颜色根据事件进行的变化,这里没有关键战和曲线,大家通过下方的2个滑块去调整颜色的变化和透明度。




undefined


      咱们可以通过内容浏览器右键-其他找到曲线,然后选择对应的3种曲线类型新建曲线图谱供时间轴调用。咱们可以通过选择已有曲线图谱然后点击时间轴面板内的添加选中虚线资产来新建当前曲线轨道。




      undefined


undefined



      undefined


undefined



      undefined


undefined



undefined


      浮点轨道与向量轨道不能同时使用,只能使用一种不然无法编译。



undefined


      数学类节点有非常的种类,如果按类型分可以分成大体三类。浮点类,整数类,向量类。

      在绝大部分数据节点里我们可以通过节点的输入框去手动设置想要的参数值,当然如果你需要一个可控的参数那么就需要创建一个变量。至于如何创建上面再说变量时有提及过。这里就不在重复了。下面主要来说说我所用到一些数学节点。

      因为节点众多,这里我将用到的节点按照运算类、判断类、创建与拆分、控制类与转换类分开说明。



undefined


      因为运算节点有很多,比如整数+整数、帧+整数、向量+浮点很多很多,这里我就统一用浮点类的了。



      undefined


      浮点加法运算,搜索“+”。




      undefined


      浮点减法运算,搜索“-”。




      undefined


      浮点乘法运算,搜索“*”。




      undefined


      浮点除法运算,搜索“/”。




      undefined


      浮点百分比运算,搜索“%”。




      undefined


      计算输入值的正弦值。




      undefined


      计算输入值的余弦值。




undefined


      判断类节点主要是将两组参数进行对比判断,当条件达成时则会输入Ture否则为False。判断类的节点经常配合分支节点或带有布尔接口的节点使用。



      undefined


      浮点大于布尔。




      undefined


      浮点小于布尔。




      undefined


      浮点等于布尔。




      undefined


      浮点不等于布尔。




      undefined


      浮点小于等于布尔。




      undefined


      浮点大于等于布尔




      undefined


      当变量A等于变量B时为True,执行设置“立方体”可视性,New Visibillity(新的可视性)为True(显示)。




undefined



      undefined


       创建2D的向量。




      undefined


      创建3D的向量。




      undefined


      创建4D向量。




      undefined


      将变量A赋值于向量X变量B赋值于向量Y创建一个向量然后赋予变量“向量2D”。




undefined



      undefined


      将2D向量进行拆分。




      undefined


      将向量进行拆分。




      undefined


      将4D向量进行拆分。




      undefined


      将变量“向量2D”拆分为XY分别赋值设置变量A与变量B。




undefined


      控制类的数据节点也有很多,我这里就说下我用的最多的3个。



      undefined


      每帧生成一个0到1之间的浮点数值,我们可以配合运算节点来制作很多效果,如灯光的闪烁、植物的摆渡等等。




      undefined


      插值是通过Alpha值的0-1控制A值到B值的过度。我经常拿来与时间轴一同使用,大家可以看下例子。



      这个实例跟时间轴里的效果一样,均是1秒内立方体Z轴从0旋转到360。看似效果一样,但是其中事由很大的不同之处的,首先时间轴里关键帧我们是没法快速调整和调用参数的,而如果用当前形势,我可以通过调整变量A和变量B来达到我想要的旋转角度不用再去编译蓝图。甚至变量是可以通信给用户界面,让用户自己调整。




      undefined


      限制节点,通过Value输入一个参数,然后限制只能输出Min到Max之间的一个数值。我通过这个几点来控制镜头拉远与推进的范围。



      每帧生成一个0-5的数值,然后通过限制节点,限制输出2-3之间的数值。




undefined


      UE4提供了很多数学之间的转换,这里我只用一个整数转换为浮点来说明。正常情况当我们想把整数链接到浮点时UE4会自动为我们添加一个转换节点,如果需要手动调用大家可以在数学分类下的转换里查找自己所需的转换节点。一般来说直接用UE4直接添加就够了。




undefined


      打印文本是用来做程序测试的,我们可以通过打印文本的方式来测试程序有没有正常的运行。我们可以将许多参数链接到In Text上UE4会自动帮我们转换为文本格式,如果程序正常则会将对应参数显示在屏幕或日志里。

      Print to Screen打印到屏幕Print to Log打印到日志勾选这两项分别会在屏幕的左上角与运行日志内显示。Text Color是打印文本的颜色,当我们有多个测试时可以通过更改颜色来区分。Duration文本持续显示的时间,当打印文本为Tick事件时请将Duration数值调整为0,这样就只会一直显示一条数据。




undefined


      我们可以通过工具集的节点对蓝图内的模型、Actor、变量等元素进行参数设置与调整已达到我们想要的一些效果。因为节点太多,这里我只挑选了几种有代表性的节点进行说明。



undefined


      设置类的节点,是专门对模型、Actor的各项变换参数进行设置,如相对位置、场景位置、相对旋转等。



      undefined


      设置蓝图内的Actor的旋转,通过目标链接Actor组件对New Rotation新的旋转进行设置,New Rotation也可以链接一个3D向量变量或者分割后链接浮点变量。Teleport Physics是一个碰撞检测,暂时没用过。Return Value如果设置旋转成功那么返回Ture。




      undefined


      设置静态网格体组件的相对父级的位置与旋转,通过目标链接要设置的静态网格体组件,New Location新的位置与New Rotation新的旋转可以用一个向量变量来链接也可以将其分割之后用浮点变量来链接。Teleport与Teleport是碰撞检测我没有用到过所以也就不说明了。Sweep Hit Result则是命中检测,分割后会看到很多参数,可以与鼠标或者碰撞盒体配合,当碰撞时可以传递指定的数据。




      undefined


      将组件附加到组件,就是将一个组件作为子集附加到另一个组件。各位先了解这个是做什么的就行,说道组件类节点的时候我会有一个实例。

      首先通过目标链接要作为子集的组件,在通过Parent确定父级组件,Socket Name是一个父级组件的插槽名(没用过不明白),然后Location Rule(位置规则)Rotation Rule(旋转规则)Scale Rule(缩放规则)分别有3种选项,保持相对很好理解不多介绍,保持场景就是相对场景进行设置无视父级,对其目到目标就是父级怎么变换它就怎么变化。Weld Simulated Bodies默认勾选不变,Return Value同样是一个返回值。




      undefined


      添加Actor本地旋转的参数就不多说了,主要来说下这个与上面两种的区别。





undefined



      undefined


      获取目标相对父级的变化,Return Value是返回的变化向量值,可通过发分割为Return Value Location、Return Value Rotation、Return Value Scale并且这三种向量值还可继续分割。

      我们可以通过这个节点获取物体的当前位置,然后加入一个变量,让其实时根据当前位置进行变换。




      undefined


      获取类的actor使用方法去上面大致相同,只是它获取的是所选的这个actor。

      注:如果你说选的是Actor的子集,而子集在场景里有2个那么他会对这两个进行设置。




      undefined


      通过Actor Class 选择一个Actor或链接一个Actor类的变量,来获取关卡场景种的所有该类型的Actor(父级、子集、孙集),创建为一个数组,然后我们可以同FIND与GET节点去查找调用其中某个Actor对其进行操作。





undefined


      流控制里就2个节点,延迟与可再触发延迟。虽然就是2个节点,但是这两个节点非常常用。但是本人在使用中貌似也发现一些BUG,会有一些添加了延迟类节点的程序,延迟结束后不会继续运行。如果有朋友碰到相同的情况可以换成时间轴节点,但是尽量能用延迟还是不要用时间轴,毕竟时间轴的载量还是比较大的。



      undefined


      顾名思义就是延迟,通过设置Duration持续事件浮点值来控制延迟的长度,时间结束继续运行后方代码。要注意的就是,这个延迟只会出发一次,下次将不会再次触发。




      undefined


      使用方法和延迟一样,只是这个节点是可以多次触发的。甚至我们可以通过手动制作一个循环程序来达到一个简单tick事件。



      延迟0.2秒后打印立方的相对缩放X值然后循环回再次延迟0.2秒继续执行。




undefined


      在UE4中并不是这么分类的,这里是我将其归到了一类中。这类的节点主要用于对数组、集与映射字典的设置。我也就用到其中一部分。这里我就用数组类的节点来做说明。



      undefined


      ADD添加,往数组内添加一条新的参数,并且通过右侧输出新添加参数的索引。




      undefined


      FIND查找,如果我们已知数组中一条数据,我们可以通过左侧的通配符接口去查找数组中这条数据的索引。




      undefined


      GET获取,如果我们已知所需数据的索引,我们可以通过左侧整数索引搜索并复制这条数据然后所右侧输出。




      undefined


      CLEAR清除,清除当前数组里的所有数据。大多数情况时为了提升程序的运行速度,会在获取到数据并赋值后,将数组内的数据进行清除。当需要时再次调用数据。




      undefined


      已知数组里有一条数据是3.14,通过FIND获取到这条数据的索引并传给GET赋值这条数据,将其打印在屏幕。




undefined


      添加组件是通过程序自动添加一些我们想要的组件,通过添加组件类节点的组件不会显示在蓝图组件里。



undefined


      新建一个静态网格体组件,如果没有勾选Manuale Attachment(手动附加)系统则会默认附加到Actor的根目录,其实这里的目标与手动附加我也没弄明白,我是选择的什么也链接默认,然后仅对Relative Transform相对变换进行设置。Return Value而这里的返回值则不是布尔了,返回的则是一个静态网格体组件,只是还没有设置静态网格体。




undefined


      设置静态网格体节点,是对静态网格体组件使用的一种节点,通过它我们可以修改组件调用的静态网格体(也就是模型),也可以通过它对没有设置静态网格体的组件进行设置。

      通过目标链接要设置的静态网格体组件,然后通过New Mesh新的网格选择要修改或附加的模型,这里我们可以通过变量达到快速调整。Return Value返回值则是布尔值,是否设置成功。




undefined


      通过添加组件新建了一个组件并且对象变化是XYZ为100,然后将此组件附加到立方体并且设置所有规则为相对,那么新添加的组件就会相对立方体放置在XYZ为100的位置,最后因为是新增组件所以静态网格体插槽是空的,我通过设置静态网格体节点为其添加一个模型。

      因为UE4并未提供像其他3D软件一样的克隆功能,所以如果我们需要同时规律的复制很多模型就会用到这几个节点,但是想要实现克隆光着几个几点还是不够,真正想具体了解的朋友可以搜索“集群买量”关键词,会有非常详细的教程。




undefined


      通过渲染类下的节点我们可以干许多事情,如设置材质、光照、LOD、纹理等等。我也就使用了其中一小部分,主要是用来创建与设置动态材质实例。我将节点按照获取与设置分成两类。



undefined



      undefined


      通过目标链接静态网格体获取目标上的Element index(索引)网格体的第几个材质插槽内的材质,并返回一个材质接口。




      undefined


      通过选择已有的参数集与Parameter Name参数名称获取参数集内应对的参数值,然后返回一个4D向量参数。




undefined



      undefined


      通过选择资产已有材质或获取的材质创建一个动态材质,返回的值是动态材质接口。




      undefined


      给一个网格体设置一个材质,材质可以是资产已有材质也可以是动态材质,如果网格体已有材质将会替换。




      undefined


      设置一个动态材质中的标量参数,注意这里的目标接口时动态材质接口,通过Parameter Name参数名称查找材质中的参数之后通过Value对其参数进行修改设置。




      undefined


      在材质上设置标量参数值节点使用原理与前两个大致相同,唯独需要注意的是这里的目标不在是动态材质,而是网格体。他是设置网格体上的材质参数。




      undefined


      设置向量参数值节点与上面的标量参数值节点是一个原理,都是应用去动态材质。这里输入的Value参数值则是一个线性颜色4D向量参数,我们可以分割分别控制R、G、B、A四个浮点值。




      undefined


      这个节点也是设置网格体上的材质参数。这个节点虽然是向量参数值节点,但是他的Value参数值是一个3D向量参数,一般来说我更喜欢使用4D向量所以我并没用使用这个节点。




undefined


      首先我获取到立方体的第一个材质将其创建为动态材质实例,之后再将动态材质实例替换掉立方体原来的材质,这句看似是一个相同材质但是实则不同,在没替换前立方体是一个常量材质,而替换后则是一个动态材质。这之前我为了方便创建了一个参数集,从中拿到#0号颜色去设置动态材质的自发光颜色。这里为了给大家演示节点,最后我使用的是设置材质上的标量值,因为现在立方体上的材质时动态材质,所以可以修改其动态材质的自发光强度的乘以系数。

      最后来说下动态材质和常量材质,咱们通过资产管理器创建的材质与动态材质这都属于常量材质,这两种材质只能在编辑时进行修改参数,而通过蓝图创建的动态材质实例在程序运行时也可以进行修改。




undefined


      说实话游戏类下面的节点我就用过“获取玩家控制器、获取鼠标位置、从类生成Actor”这3个其他的还需要小伙伴们自己去探索了。



undefined


      如名字就是获取玩家的控制器,因为UE4可以开发的东西很多,比如多人闯关游戏,这里就会设置到选择那个玩家控制器,而我们可以通过设置Player Index索引值去设置选择那个控制器。返回值则是玩家控制器类接口。




undefined


      我可以通过获取玩家控制后再获取玩家的鼠标位置信息,获取鼠标位置节点的目标是玩家控制器类,输出的则是屏幕上的XY坐标与是否获取到鼠标的布尔值。




undefined


      从类生成一个Actor,制作集群买量视频的朋友会经常用到。这个节点我真没用过,如果有




undefined


      类型转换位于工具类下,是用于创建蓝图之间通信的一种节点。得以达到通过跨蓝图设置修改蓝图的内容。这个东西对于初期的朋友来说有点难度,我也是琢磨的很长时间才慢慢明白。下面我用一个例子来说明一下。




      undefined


      首先我已经有了一个UMG用户界面蓝图为UI_Page_content,并且这个蓝图有一个动画效果,我将其制作成了一个自定义事件,并命名为Content_on_the_left_move。

      当前蓝图有一个立方体,通过立方体创建了一个点击立方体时事件,然后我们在工具-类型转换里找到“类型转换为UI_Page_content”将Object与立方体事件的Touched Component链接达到链接通信,这时我们就可以通过类型转换节点的As UI Page Content接口搜索到“Content_on_the_left_move”事件并调用。而Cast Failed则是转换失败在屏幕进行打印。

      这样一来我们就可以通过点击当前蓝图的立方体让UMG蓝图播放一段动画。




undefined


      媒体类的节点主要是针对媒体播放器进行设置的节点,这里我简单的介绍几个和说下怎么通过蓝图去调用播放媒体。



      undefined


      在播放器打开需要播放媒体源,节点目标需要链接一个媒体播放器变量,Media Source则是媒体来源,可以通过手动选择资产已有也可以通过变量调取。只有当打开媒体源之后我们才可进行播放,不然播放器内没有可以播放的内容。

      这时大家需要注意一点,如果媒体播放器设置的是打开是播放,那么打开源后视频就会直接播放。




      undefined


      播放节点,目标对象是媒体播放器变量,播放器如果是暂停状态则会进行播放。




      undefined


      暂停节点,目标对象是媒体播放器变量,如果播放器是播放状态则暂停。




      undefined


      倒回节点,目标对象是媒体播放器,会倒回到媒体源0时,如果播放器是播放状态则会从0时继续播放。




      undefined


      首先我们让媒体播放器打开对应的媒体源文件,然后播放器播放,紧接着暂停在倒回到0时。




undefined


      用户界面类节点是专门用于Actor调用资产已有用户界面,可以通过用户界面类下方的节点调整界面的位置、大小、获取视窗大小等诸多事情。这里我就说明下两个最主要的节点。



      undefined


      我们既然要调用用户界面,那么我们必须先有一个用户界面蓝图,然后通过创建控件节点(不要输入构建NONE搜索不到),就会得到当前节点,通过Class选择我们要构建的界面,将其附加在一个玩家控制器上Owning Player,所以这里Owning Player拥有玩家,必须链接一个获取玩家控制节点,不然UE4不知道将这个界面创建给谁。最后输入出一个用户控件参数供我们调用。


undefined



      undefined


      当我们创建用户控件后,我们就可以通过通过添加到视口节点,将得到用户控件参数添加到用户的视口,这里目标对应的是用户控件参数,而ZOrder则是层级,这个应该很好理解。


undefined



      undefined


      当我点击立方体时,为玩家1创建了一个UI_Mask界面(遮罩),并显示在视口的10层。




undefined


      碰撞类的节点应用范围很广,比如碰撞某物体触发事件、进入某位置触发事件等等。我这里仅仅用来碰撞命中触发创建一个用户界面并为其附加数据内容。节点。



      undefined


      创建命中结果,左侧是命中后获取到的结果,然后从右侧Value返回一个向量参数,分割后可单独调用。也可以直接创建一个变量供之后使用。




      undefined


      中断命中结果,其实就是将已有的命中结果变量拆分掉。




      undefined


      当我点击Actor时,活动到一个类的所有Actor,然后从中找到被点击的这个Actor,之后创建了一个命中结果获取到这个Actor的名称,将其转换成Actor类。之后创建了一个Other_Properties的用户界面并附加到玩家1并添加到视窗,然后调取Other_properties用户界面蓝图的Other Properties事件,并将之前创建的Actor类名称变量传输至事件内,供事件根据类名称查询对应数据参数并赋值在Other_Properties用户界面上。



4
举报
|
11
分享
相关推荐
评论
用户头像
评论你的想法~
表情
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
推荐素材
三维渲染抽象扭曲背景
三维卡通医生
三维假期旅行主题
三维渲染的平铺在薄荷绿背景上的易拉罐饮料静物
旋转的漩涡和流动的线条,三维渲染
三维渲染的老年医生
三维渲染发光霓虹灯通道
三维渲染红色礼盒
三维渲染的简约极简简洁紫色风格海报背景
三维渲染的简约简洁极简风格几何体场景海报
黑暗房间内的圆柱展台,三维渲染
三维户型剖面图
扁平化抽象几何三维模型创意时尚海报
柯基狗三维插画
三维渲染的平铺在薄荷绿背景上的易拉罐饮料静物
抽象紫色发光气球背景,三维渲染
实验室三维场景
茄子三维插画
三维曲线空间背景
三维卡通齿轮场景
创意弹簧与小球 弹性的概念物体 三维渲染
红色喜庆风格的三维产品展台
三维抽象矢量星球,寓意全球化、国际化,球形世界地图
灰色三角四面体、点线链接构成三维空间科技矢量背景
红色三维概念礼盒背景
你可能喜欢
相关收藏夹
地产VI
地产VI
地产VI
地产VI
大家都在看
登录注册