UE4学习杂项总结一

Posted 凯尔八阿哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4学习杂项总结一相关的知识,希望对你有一定的参考价值。

一、前言

        学习UE4也有一段时间了,将遇到的问题做了一个汇总,也许对我来说目前这写问题还算是一个知识点,因为其中还有一些基本的操作问题。当然也有一些非常费解的、截至到目前为止我也没有找到解决方法的问题。

二、具体内容

2.1、界面操作BoxBrush

刚创建的BoxBrush在Details中找不到Materials、Physics等属性,无法对材质进行设置,如图2.1.1所示:

图2.1.1

这是因为刚创建的Bush需要转换成StaticMesh才会有上述的属性,点击BrushSetting下的Create StaticMesh后,如图2.1.2所示,会将该Brush保存为一个静态网格到文

图2.1.2

件夹中,并且世界大纲中的Brush也会自动转成StaticMesh,针对StaticMesh的Details是会包含上述的属性的。

2.2、自定义的GameInstance蓝图或类的使用

如果自定义了GameInstance蓝图或类,比如命名为MyGameInstance,一定要在ProjectSetting里设置为自定义的MyGameInstance,如图2.2.1所示,

2.2.1

否则会出现转换问题。如图2.2.2所示,如果不进行图2.2.1的设置,在将系统GameInstance转成MyGameInstance时出现转换失败。

图2.2.2

 2.3、每个UI中的组件都可以成为设计视图中的变量

 在UI中有两个视图分别为Designer和Graph,在Designer中创建的UI组件在Graph中默认是不能引用的,需要将UI组件的IsVariable勾选方可。如图2.3所示,勾选组件的Is Variable后在Graph视图

图2.3

的Variable/UI下会显示刚刚勾选的组件,此时在定义的方法和事件中可以引用该组件。

2.4、 UI的Text绑定更新问题

       如图2.4.1所示,在控件Text上绑定文本更新方法,如果是从这创建的绑定

图 2.4.1

方法会执行,但如果是从这选的一开始创建好的方法,如图中的GetPing方法有可能不执行,这个可能是虚幻4(版本为4.25.4)的Bug。也即一定要从图1.4.1中点击“Create Binging”创建绑定后的处理方法才会被每帧刷新,如果是事先在“Graph”视图中创建好的方法,在图2.4.1中选择后,不会每帧执行。

2.5、如果UI按钮的子部件设置为“Collapse”则整个按钮都会隐藏并且不会占用布局空间

        如图2.5.1所示,按钮“DebugDestroySession”的子物体为“TextBlock”,并且

图2.5.1

设置这个子物体的Behavior->visibility为Collapsed,则整个按钮在运行时都会隐藏,并且不占用布局空间。

2.6、Cast To 自定义的GameInstance时失败

        在2.2中设置了默认的GameInstance为自定义的MyGameInstance类还是出现转换失败的情况,可以检查下系统的配置文件DefaultEngine.ini里的GameInstanceClass是否为对应的自定义游戏实例名,如图2.6.1所示为出现错误时对应的名字不是我创建的GameInstance名,我创建的游戏实例名字为“MyGameInstance”,将其修改过来即可。比如我创建的“MyGameInstance”蓝图脚本在如图2.6.2所示的文件夹下,则在DefaultEngine.ini里默认GameInstanceClass下面添加一句“GameInstanceClass=/Game/Blueprints/MyGameInstance.MyGameInstance_C”

修改完了之后,一定要重启一下工程才可以使用。

图2.6.1

图2.6.2

2.7、 关卡蓝图的Event BenginPlay不执行

        如果关卡Level1的Word Setting中设置了GameMode为自定义的模式,如图2.7.1所示,则从别的关卡进入到该关卡时,如通过Open Level方法加载到Level1关卡时,Level1的关卡蓝图中Event BenginPlay会出现不执行的现象。只需要将GameMode设置为None即可。

图 2.7.1

2.8、 静态网格Sockets属性使用

        

        如图2.8.1所示,帽子的模型可以通过设置其Sockets属性为head而快速放置帽子的位置。

图2.8.1

 2.9、新编译或重新打开工程能解决很多问题

        比如如图2.9.1所示,同样的两个动画状态,上面的是编译后带帧率条的,下面的就没有。不要觉得奇怪编译一下就可以,如果还是不行,重新打开一下工程。

图2.9.1

2.10、 动画出现重复播发可能需要关闭循环

2.11、蓝图中自定义的事件有Replicate属性而自定义的方法没有

2.12、User Widget可以作为一个另外一个User Widget的一部分

比如创建了一个User Widget A,并且在A里面有一个容器AC,再创建了一个User Widget B,可以直接将B创建完之后放置到容器AC中,如图2.12.1所示的蓝图,创建完之后使用Add Child方法添加到容器AC中。

图2.12.1

2.13、 纯函数和非纯函数的区别

        如图2.13.1所示,在创建函数的属性中有一个Pure的选项,勾选即成为纯函数,反之为非纯函数。纯函数和非纯函数的区别主要有:

图 2.13.1

用途不一样:纯函数通常用于只输出数据值的 getter函数或运算符;调用方式不一样:纯函数不需要执行引脚,非纯函数需要执行引脚,并且是作为输入调用,如图2.13.2的纯函数

图 2.13.2

“SetPlayerNumber”作为蓝图“Cast To MyPlayerState”的输出调用时是不会执行的,必须作为输入时才可以调用,如图 2.13.3所示,当纯函数“SetPlayerNumber”所谓“New Var 0”的输入端调用函数时会执行。也即纯函数连接到数据引脚,当需要依赖它们的数据时,编译器会自动执行它们。

图2.13.4

 2.14、在事件图中可以使用Delay方法,在自定义的方法中不能使用

如图2.14.1所示的Delay蓝图方法是在蓝图的事件图章创建的,当复制到方法中时提示不能复制,如图2.14.2所示。这也就意味着Delay只能在事件中使用不能在方法中调用,但是我想要在调用方法后执行一段延迟的功能要如何实现,只能通过方法后面调用自定义的事件了,略显得繁琐了些。有点类似于Unity的协程,单独在方面里面使用yield关键字是无法创建延迟的效果,必须要方法里调用一个新建的协程才能实现。

图2.14.1
图2.14.2

方法中不能调用的方法还有

  1. 和Session有关的所有方法,如Create Session、Destroy Session、Find Session等;
  2. Timeline方法,但Set Timer by Function Name可以调用

目前总结到的就这么多,后续再补充。

三、总结

        整理的都是平时遇到的问题,比较杂乱,不过有些问题还是很有帮助;

以上是关于UE4学习杂项总结一的主要内容,如果未能解决你的问题,请参考以下文章

UE4学习杂项总结一

为啥我玩使命召唤9每一关都会卡出来,显示“Unhandle exception caught”?

杂项之年终总结

bugku杂项—12-16题

[学习笔记]动态规划的一些基本概念和杂项

[总结]其他杂项数学相关(定理&证明&板子)