Quick #UE4 Tip (第3周 2020.4.10)
Posted u010019717
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quick #UE4 Tip (第3周 2020.4.10)相关的知识,希望对你有一定的参考价值。
选自过去1~2周 自己所看到外文内容:https://twitter.com/search?q=%23UE4&src=recent_search_click&f=live 和各种其他博客来源吧
UE4 开发常用外部工具介绍
硬碟空间管理与分析 https://yekdniwue.blogspot.com/2021/03/UE4ExternalTool.html
WinDirStat 档案内容分析★★★★☆
在使用UE4的过程中,硬碟永远不够用,尤其是常常出不同平台的版本,或是出各种版本测试,都需要用掉大量的硬碟空间。
这时候我都会定期使用WinDirStat对专案目录作分析,找出特别大的资料夹,如果不是必需的就会砍掉。
另外一个使用时机则是分析打包后资料的时候,有的时候最后打包的档案过大。
我会利用这个软体看一下Cooked目录,分析一下是不是有哪些Asset档不符合应该有的大小,然后再回去做调整。
mklink 目录连结★★★★★
windows内建的外部工具,但是因为太好用了所以不能不特别介绍
大部份开发UE4使用SSD应该已经是标配,不过并不是所有的专案都能整个专案放SSD。
但是如果全部放硬碟,想必开启或使用的速度上是受到严重限制的。
这时候就可以透过mklink,将常常需要读取写入的目录对应到SSD的硬碟。
如此一来就可以最有效率的使用SSD。
举例来说,[Project]/Content 跟[Project]/Saved 通常占用不少空间,但是又不一定需要SSD。
我可能就会把这两个目录对应到普通硬碟,其他都放在SSD。
更大的专案就会在Content资料夹再做细分。
使用范例:
开始->执行->Command
或是
C:\\ WINDOWS \\ system32 \\ cmd.exe
在指令视窗里面输入
mklink / j C:\\ ThirdPerson \\ Content D:\\ ThirdPerson \\ Content
就会把C:\\ThirdPerson的Content 连结到D:\\ThirdPerson\\Content
(档案实际放在D:\\ThirdPerson\\Content)
资源监视器Resource Manager ★★★★★
windows内建的外部工具,一样很常用。
一般大多都是用工作管理员Task Manager。不过工作管理员提供的资讯其实很不够。
所以我都直接把资源监视器放在最快可以开启到的地方了。
我最常看的就是Disk的项目,然后看那些档案被读取或写入,以及被那些程式使用。
通常这样也可以协助自己掌握UE4的某些阶段到底在做什么,例如打包,编辑器启动,等等。
目前想到的大概就这些,各位有更推荐的也可以跟我说,我用了好用也会在日后补上的。
Editor内Blueprint中断点没有触发
https://yekdniwue.blogspot.com/2020/11/BPBreakpoint.html
最近在做功能的时候遇到了有趣的问题。
其实以前就偶尔有遇到但是没有认真找原因,因为发生的机会其实很低。
这次很幸运的找到问题的原因,所以分享一下
问题发生的现象
在解决问题之前,先描述问题的定义
在BP下中断点
无论如何都不会停下来
但是在中断点前或后面的节点下PrintString确定会印,功能也都正常
就只是断点不会停
如果这个BP是从C++呼叫的话
C++的断点是会停的。
问题的原因
追查发现ScriptCore.cpp
在执行BP的breakpoint 之前
会检查现在是不是在GameThread
如果有在Game Thread才会触发中断点
刚好我这次的功能是从muti-threading的animation事件过来的
CallStack直接看到有Update_AnyThread的字眼
所以下次如果再遇到类似的现象
可能要想一下是不是因为multi threading造成的~
相关程式码
ScriptCore.cpp
FBlueprintCoreDelegates::ThrowScriptException裡面的
if (IsInGameThread())
OnScriptException.Broadcast(ActiveObject, StackFrame, Info);
Quick #UE4 Tip number 136.
Easily add shore wetness to landscape with Water plugin.
快速#UE4提示编号136。
使用“水”插件轻松为景观增加海岸的湿度。
You can quickly add shore wetness using the below graph to your landscape with water plugin.
Quick #UE4 Tip number 135.
How to set Water to NOT affect landscape.
快速#UE4提示编号135。
如何设置水不影响景观。
我已经看到很多人对新的Water Plugin(可从4.26版本获得)有影响,该插件会影响景观的形状,因此今天的技巧是关于如何设置Water而不影响景观。我会假设您已经在您的水平面中拥有景观和水,因为我只是跳到了这一点。这是一个丑陋的例子:
通常,当您将水拖放到景观中时,它将像这样重塑。
我知道,所有美丽的雕刻都消失了!好吧...不是真的。如果选择WaterBodyOcean
在世界大纲和设置都Falloff Mode
以Width
和Falloff Width
以0
...
多田!! 您可以保持景观雕塑和浇水。
Quick #UE4 Tip number 134.
Create your own level templates.
快速#UE4提示编号134。
创建自己的关卡模板。
New Level
从文件菜单中选择时,每个人都知道虚幻引擎中的关卡模板。这是可定制的,这意味着您可以添加自己的模板,如下所示:
让我们看看这是怎么可能的。
注意:在内容浏览器中启用“显示引擎内容”。
首先像往常一样创建您的关卡,并将其保存(以您想要的任何名称)Engine/Maps/Templates
文件夹。例如,我们将保存一个名为的级别My_Level
。然后截取您级别的屏幕快照,并使用图像编辑软件将其设置为200x200,然后将其导入Engine/Maps/Templates/Thumbnails
文件夹中。例如,我们将缩略图另存为My_Level_Thumb
。现在,BaseEngine.ini
从Engine/Config
文件夹中打开,然后在[/Script/UnrealEd.UnrealEdEngine]
部分中添加以下行。
+TemplateMapInfos=(ThumbnailTexture=Texture2D'/Engine/Maps/Templates/Thumbnails/My_Level_Thumb.My_Level_Thumb',Map="/Engine/Maps/Templates/My_Level")
现在您将拥有类似的东西。
重要步骤:如果您使用的是4.25或更高版本,则必须Engine.ini
从Project/Saved/Config/Windows
文件夹中删除文件。
而已。打开您的项目,然后选择New Level
。
Quick #UE4 Tip number 133.
Press tab key to open context menu.
快速#UE4提示编号133。
按Tab键打开上下文菜单。
您是否知道可以按Tab
键盘上的键在Graph Editor中打开上下文菜单(如Blueprint,Material等),类似于Substance Designer,World Machine LTE等。此功能默认情况下应处于启用状态,但如果未启用(或最好将其关闭),您可以在Editor Preferences
-> Graph Editors
->中进行切换Open Create Menu on Blank Graph Area
。
Quick #UE4 Tip number 132.
Format text with plural form.
快速#UE4提示编号132。
用复数形式设置文本格式。
格式文本允许您使用基于数值和基数支持的不同文本(例如“有1只猫”或“有4只猫”)或有序(例如“您完成了第一!”或“您完成了第二次”) !”)。它们被指定为键值对,并支持以下任意关键字:零,一,二,少,多,其他。值是一个可选的带引号的字符串,也可以包含格式标记。
下面是有关如何使用复数形式的示例:
以上将基于进行格式化Item Amount
。如果您的项目金额为1,则会显示You have 1 item
。如果您的商品金额大于1,则会显示You have multiple items
。
Quick #UE4 Tip number 131.
Import dialog when re-importing.
快速#UE4提示编号131。
重新导入时的“导入”对话框。
如果您FBX
经常重新导入资产,或者希望在每次重新导入时都看到导入对话框,则可以Show import Dialog at Reimport
从Editor Preferences
->Miscellaneous
部分启用。
Quick #UE4 Tip number 130.
Bind Lambda in C++
快速#UE4提示编号130。
在C ++中绑定Lambda
在C ++项目中,有时可能必须经过一定时间才能运行一次逻辑。在标头中声明一个新计时器并对其进行管理是这样做的方法,我敢肯定我们大多数人都知道这一点。但是,不是,那不是唯一的方法。我们可以利用BindLambda
功能更简单的方法并使事情更易于阅读。让我们看一个例子。下面的代码是一定时间后执行功能的典型方法。
之前:
在标题中:
在源中:
我们可以使用来简单地做到这一点BindLambda
。看一下下面的代码。
在标题中:
在源中:
Blueprint Event
如果需要的话,我们可以通过运行选项来进一步扩展这一功能。为此,请查看以下示例。它几乎与上面相同,除了我们现在在蓝图设计器中可以使用的函数中还有一个附加的回调。
在标题中:
在源中:
Quick #UE4 Tip number 129.
Delete node without losing connection.
快速#UE4提示号129。
删除节点而不丢失连接。
在“蓝图”中,您可以选择一个节点,然后按Shift + Delete
删除选定的节点而不会失去连接。
在此处预览:https://imgur.com/46e8522
Quick #UE4 Tip number 128.
Content Browser other filters.
快速#UE4提示编号128。
内容浏览器其他过滤器。
在Content Browser
有Other Filters
,这是非常有用的,当涉及到搜索资产。特别是Show Redirectors
过滤器和水平的具体像In Use
,Used
并Not Used
在Any Level
过滤器。
Quick #UE4 Tip number 127.
Rectangular color picker.
快速#UE4提示编号127。
矩形拾色器。
如果您right click
使用色轮Color Picker
,它将变为矩形而不是圆形。
Quick #UE4 Tip number 126.
Filtering results in context menus.
快速#UE4提示号126。
在上下文菜单中过滤结果。
上下文菜单中的子菜单支持快速搜索,这意味着在打开子菜单时,您可以简单地开始在键盘上键入内容,菜单将显示结果。
在下面的示例屏幕截图中,您可以看到Select
打开子菜单的时间,我输入了内容U
,该内容使用过滤了所有内容U
。
Quick #UE4 Tip number 125.
Use Layers to quickly organize your actors in world.
快速#UE4提示编号125。
使用图层快速组织您的演员在世界上。
与World Outliner相似,有一个Layers
选项卡可用于组织世界中的演员。可以从Windows
->Layers
选项卡中召唤它。
Layers provide the ability to quickly select as well as control visibility of groups of related Actors. You can use your layers to quickly un-clutter a scene leaving only the geometry and Actors that you are working with. For example, you might be working on a building that has multiple levels but is comprised of many modular parts. By assigning each floor to a layer, you can hide each of the floors you are not working on making the top view much more manageable. An Actor can be in as many layers as you want. This might be useful if you have different sets of Actors that fall under overlapping layers. For instance, you could organize your layers by assigning everything within a particular zone to one layer and have another layer comprised of all the doors in your level. When creating large levels, the more extensively you use layers, the easier your job will be. And remember, it is always easier to start using layers from the beginning rather than trying to incorporate them after you are already deep into the creation of your level.
Quick #UE4 Tip number 124.
Instantly remove unused material nodes.
快速#UE4提示编号124。
立即删除未使用的材质节点。
在你的material editor
,如果你有未连接的节点,您可以立即通过单击清除它们Clean Up
按钮工具栏上。
Quick #UE4 Tip number 123.
Disaster Recovery plugin to restore session after crash.
快速#UE4提示号123。
灾难恢复插件,可在崩溃后恢复会话。
虚幻引擎有一个名为的插件Disaster Recovery
,可用于崩溃后恢复会话。非常有用,尤其是在不使用源代码管理的情况下。
首先,您必须启用Disaster Recovery
插件,然后Recovery Hub
从Window
->Developer Tools
部分访问。
Quick #UE4 Tip number 122.
Cooker related settings.
快速#UE4提示编号122。
Cooker相关设置。
如果您正在寻找更多Cooker
相关的控件,请转到Project Settings
->Cooker
部分。例如:这允许您排除专用服务器和客户端的任何类/模块。
Quick #UE4 Tip number 121.
Asset user data.
快速#UE4提示编号121。
资产用户数据。
虚幻引擎中的几乎每个资产都有一个称为的属性Asset User Data (印象中Unity中也包含这个类似的)
,可用于将元数据分配给您的资产。我找不到有关资产用户数据的太多信息。在下面的屏幕截图中,您可以看到如何分配元数据,该元数据可用于检查在加载该资产时是否存在某些ini值。
Quick #UE4 Tip number 120.
Render mesh in wireframe mode.
快速#UE4提示编号120。
在线框模式下渲染网格。
在中Material Editor
,您可以启用Wireframe
选项以在线框中渲染网格。
Quick #UE4 Tip number 119.
Polygon Editing that let's you modify Static Mesh inside Editor.
快速#UE4提示号119。
多边形编辑,可让您在编辑器中修改“静态网格物体”。
虚幻引擎有一个名为的插件Polygon Editing
,启用后会在其中添加一个新的工具栏Static Mesh Editor
,可用于修改打开的网格。
Quick #UE4 Tip number 118.
Batch editing via Property Matrix.
快速#UE4提示编号118。
通过属性矩阵进行批量编辑。
您可以通过右键单击并选择Asset Actions
->来批量编辑选定资产(相同类型)的属性Bulk Edit via Property Matrix
。
Quick #UE4 Tip number 117.
Material Analyzer developer tool.
快速#UE4提示编号117。
材料分析器开发人员工具。
虚幻引擎提供了一个开发人员工具Material Analyzer
,该工具可以分析给定的材料或实例并提供建议。您可以从Window
-> Developer Tools
->召唤该工具Material Analyzer
。
Quick #UE4 Tip number 116.
How to see all slate widgets from UE4.
快速#UE4提示编号116。
如何从UE4中查看所有slate小部件。
是否想查看UE4必须提供的所有Slate小部件?选择Window
-> Developer Tools
-> Debug Tools
,然后单击Test Suite
按钮。这将打开一堆包含几乎所有Slate小部件的窗口。
Quick #UE4 Tip number 115.
Run Pre/Post Build Events by modifying uproject file.
快速#UE4提示编号115。
通过修改uproject文件来运行Pre / Post构建事件。
您可以在构建完成时触发自己的自定义Pre / Post构建事件。仅适用于C ++项目。
uproject
在记事本(或任何文本编辑器)中打开文件,然后添加以下键。
"PostBuildSteps": "Win64": [ <Example: Run a bat file.> ]
例如,下面的uproject文件将运行CopyDLL.bat
文件。
"FileVersion": 3, "EngineAssociation": "", "Category": "", "Description": "", "Modules": [ "Name": "YourProjectName", "Type": "Runtime", "LoadingPhase": "Default" ], "PostBuildSteps": "Win64": [ "call \\"G:\\\\UnrealProjects\\\\MyProject\\\\CopyDLL.bat\\"" ]
Quick #UE4 Tip number 114. Modifying Max Search Nodes for finding path to large distance.https://cutt.ly/ue4-tip-114
https://twitter.com/RyanJon2040/status/1365908339801038848
快速#UE4技巧编号114。修改“最大搜索节点”以查找较大距离的路径。
2021年2月28日
默认情况下,当您请求Find Path to Location
或时,UE4最多使用2048个导航节点进行搜索Find Path to Actor
。当您想查找更大距离的路径时,这可能会出现问题。您可以通过打开DefaultEngine.ini
并添加以下部分来修改限制。
[/Script/NavigationSystem.RecastNavMesh] DefaultMaxSearchNodes=4096 ;2048 is the default. Change it to whatever value that works for you.
Unreal Tip #113
2021年2月27日
您可以Level Blueprint
通过右键单击资产并选择,快速轻松地为参与者添加事件Add Event
。
Unreal Tip #112
Feb 26, 2021
FreezeRendering
is a useful command to freeze most aspects of rendering. Can be used to check how frustum and occlusion culling is working.
https://i.imgur.com/i7IhLUO.gifv <- Click to preview
虚幻技巧#112
2021年2月26日
FreezeRendering是冻结大多数渲染方面的有用命令。 可用于检查截锥体和遮挡剔除的工作方式。
https://i.imgur.com/i7IhLUO.gifv <-单击以预览
Unreal Tip #111
Feb 25, 2021
You can switch the View Type
to Columns
to see more detailed information related to assets in Content Browser
.
虚幻技巧#111
2021年2月25日
您可以将“视图类型”切换为“列”,以在“内容浏览器”中查看与资产相关的更多详细信息。
Unreal Tip #110
Feb 24, 2021
In Editor Viewport
you can press Backslash
key to preview mesh at mouse point.
https://i.imgur.com/yIdl1Rd.gifv <- Click to Preview
This mesh (or meshes) can be changed from Editor Preferences
-> Viewports
-> Preview
category.
虚幻技巧#110
2021年2月24日
在编辑器视口Editor Viewport
中,可以按反斜杠键在鼠标点预览网格。
https://i.imgur.com/yIdl1Rd.gifv <-单击预览
可以从“编辑器首选项”->“视口”->“预览”类别中更改一个或多个网格。
Feb 23, 2021
When you open a Material Editor, you can click Hierarchy
button to see all the Material Instances inherited from the Material.
虚幻技巧#109
2021年2月23日
打开材质编辑器时,可以单击“层次结构”按钮以查看从材质继承的所有材质实例。
Unreal Tip #108
Feb 22, 2021
When play testing a multiplayer instance in Editor, you can switch the world using View Options
from World Outliner
tab to see which actors exist in server or client. Useful for debugging as well.
虚幻技巧#108
2021年2月22日
在编辑器中测试多人游戏实例时,可以使用“世界大纲”标签中的“查看选项”切换世界,以查看服务器或客户端中存在哪些参与者。 对于调试也很有用。
Unreal Tip #107
Feb 21, 2021
Having multiple levels with actors in them but can't figure out which actor belongs to which level? Fear not young (or old) warrior, check out Level Coloration
from Show
menu in Viewport.
Here you can see the actors are colored based on their respective levels. Colors itself can be modified from the Levels tab.
虚幻技巧#107
2021年2月21日
演员中有多个级别,但不能弄清楚哪个演员属于哪个级别? 不要害怕年轻(或年纪大的)战士,请从“视口”的“显示”菜单中查看“关卡着色”。
在这里,您可以看到演员根据他们各自的水平着色。 颜色本身可以在“色阶”选项卡中进行修改。
Unreal Tip #106
Feb 20, 2021
In UE4, there is templated type called TOptional which is a really useful class. It can be used to check if a certain value is set or not and continue game logic based on the result.
Consider the below code. Let's imagine, in this example we expect bHasWeaponExtras
to be true if the weapon has any attachment, false if no attachments are installed. But what to do if weapon doesn't support any attachments at all?
Without TOptional:
In Header:
bool bHasWeaponExtras;
In Source:// Both true/false can be valid in this context so what will we do?
if (bHasWeaponExtras)
// Need an additional check where this bool is not at all set.
// Similar to Nullable<bool> in C#.
With TOptional:
In Header:
TOptional<bool> bHasWeaponExtras;
In Source:
// If the value is not set (i.e not true and not false), notify player that this weapon doesn't support any attachments at all.
if (bHasWeaponExtras.IsSet())
if (bHasWeaponExtras.GetValue())
// Do your thingy.
虚幻技巧#106
2021年2月20日
在UE4中,有一个称为TOptional的模板类型,这是一个非常有用的类。 它可用于检查是否设置了某个值,并根据结果继续游戏逻辑。
考虑下面的代码。 假设在此示例中,如果武器具有任何附件,我们期望bHasWeaponExtrasto为true,如果未安装附件,则为false。 但是,如果武器根本不支持任何附件怎么办?
Without TOptional:
In Header:
bool bHasWeaponExtras;
In Source:// Both true/false can be valid in this context so what will we do?
if (bHasWeaponExtras)
// Need an additional check where this bool is not at all set.
// Similar to Nullable<bool> in C#.
With TOptional:
In Header:
TOptional<bool> bHasWeaponExtras;
In Source:
// If the value is not set (i.e not true and not false), notify player that this weapon doesn't support any attachments at all.
if (bHasWeaponExtras.IsSet())
if (bHasWeaponExtras.GetValue())
// Do your thingy.
以上是关于Quick #UE4 Tip (第3周 2020.4.10)的主要内容,如果未能解决你的问题,请参考以下文章
Quick #UE4 Tip (第1周 2020.12.5)
Quick #UE4 Tip (第2周 2020.1.31)