UE4_细碎常识点拾遗_2019

4周前 (01-09 15:50)阅读1回复0
kanwenda
kanwenda
  • 管理员
  • 注册排名1
  • 经验值135095
  • 级别管理员
  • 主题27019
  • 回复0
楼主

本文整理2019年日常记录的,UE4细碎的小常识。

1. 控造台设置分辩率

能够用于锁帧

t.maxfps 20 2. 获取spline控造点的distance

有个问题是,当spline很长时,那个办法不太准确。那就不要让一条spline太长了。

(20210116:仍然没有找到很好的,获取spline间隔的办法。若何通过肆意点的世界坐标,找到它在某条spline上对应的distance呢?有一个办法是获取spline上比来点的坐标,然后得到它的InputKey,通过那个Key前一点和后一点的distance,计算那点的间隔,但仍然禁绝确!)

3. Spline Mesh Runtime

参考https://answers.unrealengine.com/questions/261136/add-spline-mesh-component-doesnt-work-at-runtime.html

利用SplineMeshComponent办法时,会报如下错误

处理办法是在蓝图里,将那个组件的挪动性改为可挪动

4. 性能阐发

参考https://www.cnblogs.com/ghl_carmack/p/5481763.html起首要确定瓶颈是在CPU仍是GPU,为了找到是谁,以非debug版本启动你的法式,而且在控造台上输入stat unit号令,若是是在android平台上能够同时按下四个手指,翻开控造台,输入stat unit,它会显示如下图所示:

Frame时间是产生一帧花的总时间,因为逻辑线程(Game)和衬着线程(Draw)在一帧完毕的时候需要同步,一帧花的时间经常跟此中的一个线程花的时间附近。GPU时间丈量了显卡衬着当前场景花的时间。因为GPU时间是跟当前帧同步的,所以它跟一帧花的时间也根本差不多。

若是一帧花的时间跟逻辑线程的时间比力接近,那么瓶颈在逻辑线程,相反若是跟衬着线程的时间比力接近,那么瓶颈在衬着线程。若是两个时间都不接近,但跟GPU时间比力接近,那么瓶颈在显卡上。

当然也能够利用一些第三方东西,好比intel vtume、aqtime等,挪动平台上能够利用Apple Instruments、NVIDIA Tegra System Profiler、ARM DS-5等。

5. Create Widget

能够用如下办法创建控件,重点是要添加到视口AddToViewport

6. FString 换行

在蓝图中FString换行的办法是Shift+Enter

7. c++蓝图函数库要利用静态办法

加个static,否则蓝图中找不到

UFUNCTION(BlueprintCallable, meta = (DisplayName = "SaveRenderTargetToFile", Keywords = "SaveRenderTargetToFile"), Category = "ADAS_SaveToFile") static bool SaveRenderTargetToFile(UTextureRenderTarget2D* rt, const FString& fileDestination); 8. 打包win64编译时报错

参考https://blog.csdn.net/zhangxiaofan666/article/details/79567017

参考https://answers.unrealengine.com/questions/751683/systemargumentexception-path-fragment-content35123.html?sort=oldest

编译时报错如下

System.ArgumentException: Path fragment "ADAS/Content/ADAS/Texture/\346\226\271\345\235\227.uasset" contains invalid directory separators.

在cmd中运行以下号令,就能够通过编译了

git config --global core.quotepath false 9. c++保留图像

蓝图库函数C++类,实现将RanderTexture2D写入文件保留。那个参考了Rama的Victory插件,只撑持rgb888的rt

hpp: #pragma once #include "Runtime/Engine/Public/ImageUtils.h" #include "CoreMinimal.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "MyBlueprintFunctionLibrary.generated.h" UCLASS() class ADAS_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() UFUNCTION(BlueprintCallable, meta = (DisplayName = "SaveRenderTargetToFile", Keywords = "SaveRenderTargetToFile"), Category = "SaveToFile") static bool SaveRenderTargetToFile(UTextureRenderTarget2D* rt, const FString& fileDestination); }; cpp: #include "MyBlueprintFunctionLibrary.h" #include "FileHelper.h" #include "Engine/TextureRenderTarget2D.h" bool UMyBlueprintFunctionLibrary::SaveRenderTargetToFile(UTextureRenderTarget2D* rt, const FString& fileDestination) { FTextureRenderTargetResource* rtResource = rt->GameThread_GetRenderTargetResource(); FReadSurfaceDataFlags readPixelFlags(RCM_UNorm); TArray<FColor> outBMP; outBMP.AddUninitialized(rt->GetSurfaceWidth() * rt->GetSurfaceHeight()); rtResource->ReadPixels(outBMP, readPixelFlags); for (FColor& color : outBMP) color.A = 255; FIntPoint destSize(rt->GetSurfaceWidth(), rt->GetSurfaceHeight()); TArray<uint8> CompressedBitmap; FImageUtils::CompressImageArray(destSize.X, destSize.Y, outBMP, CompressedBitmap); bool imageSavedOk = FFileHelper::SaveArrayToFile(CompressedBitmap, *fileDestination); return imageSavedOk; return true; } 10. c++编译时报错贫乏*.generated.h UnrealHeaderTool failed for target CompilerResultsLog: ERROR: D:/project/adas-simulator/ADAS/Intermediate/Build/Win64/UE4Editor/Inc/ADAS/ADAS.init.gen.cpp: Changes to generated code are not allowed - conflicts written to D:/project/adas-simulator/ADAS/Intermediate/Build/Win64/UE4Editor/Inc/ADAS/ADAS.init.gen.cpp.conflict CompilerResultsLog: Error: UnrealHeaderTool failed for target ADASEditor (platform: Win64, module info: D:\project\adas-simulator\ADAS\Intermediate\Build\Win64\ADASEditor\Development\ADASEditor.uhtmanifest, exit code: OtherCompilationError (5)). LogMainFrame: MainFrame: Module compiling took 21.413 seconds

创建C++类

一般来说都是在Editor中add new c++,如许加完后会主动参加到vs工程中并编译主动生成 XXX.generated.h 头文件。

也能够手动创建c++的XXX.h 和XXX.cpp,然后利用UBT间接参加vs工程中,然后编译生成XXX.generated.h 头文件。

(ps:#inclued “XXX.generated.h”编译前是不存在的,但是也要参加到XXX.h中)

编译情况DebugGame和DebugDevelopment来回切,也是有效的

11. 显示鼠标

运行时默认是隐藏鼠标的,蓝图中以下节点显示鼠标

12. 高分辩率截图

蓝图中利用高分辩率截图,很卡。高分辩率截图在编纂时利用比力好

13. 挪动spline控造点

按住alt能够增加控造点,其实ue4中按住alt和3dmax中按住shift一样,能够复造

14. 动态创建spawn

参考https://blog.csdn.net/ln_polaris/article/details/54346319

SpawnActor。若是是Character类,还要继续挪用Spawn Default Controller办法,否则生成的Character不会动

15. 设置character速度

若是间接设置Movement组件里的速度,会卡,招致动画播放不不变。能够通过AddMovementInput节点设置

16. 利用手柄

参考http://www.52vr.com/thread-30834-1-1.html

我用的手柄是rapoo v10 那款手柄,毗连无线USB之后,在“控造面板\硬件和声音\设备和打印机”里找关于手柄手柄的设备,然后输入,能够看到一些值的反应。需要下载 x360ce.exe下载vld-2.5-setup.exe,我也忘记那是什么工具了。下载手柄驱动,用什么下什么。在手柄接入后,翻开se360x,需要联网下载一些动态库,然后点击保留会生成动态库“xinput1_3.dll”,“x360ce.ini”

编纂器内运行时,若想得到手柄的输入,需要在设置手柄按键后把“xinput1_3.dll”,“x360ce.ini”,拷贝到“Epic Games\4.13\Engine\Binaries\Win64...”途径下。

打包后运行时把“xinput1_3.dll”,“x360ce.ini”,拷贝到“WindowsNoEditor\YourProject\Binaries\Win64...”目次下。

别的,控造台号令,show debug input 能够看到输入,申明输入是准确的。

记得重启ue4,那个确实有效。但不确定里面下载的工具是不是都有用 17. 设置默认关卡

设置开启editor时默认翻开的关卡,和打包后运行时默认翻开的关卡。项目设置->地图

18. ui蓝图表露变量

其他类要挪用的话,勾上Is Variable

19. 差别版本切换时无法保留

高版本导入到低版本时,低版本有的工具显示不出来

若是碰到类似“因为时高版本保留的,所以无法保留”的问题,把高版本的UASSET文件删除,然后再导入fbx或者贴图等尝尝

20. 3dmax导入和导出fbx

ue4版本纷歧样时,能够从ue4导出fbx,然后从3dMax导出,再导入到ue4

3dMax导出设置,留意勾选涡轮光滑,单元改为cm,轴改为z向上

21. 定序器player

不勾选show player就没有player的

22. ui对camera可见性

设置Widget的此选项,能够让其他摄像头拍不到那个UI,不然所有物体都能看到(?)

23. 射线检测

LineTraceByChannel办法,对应unity中RayCast

24. 世界设置中的Lightmass

不是原创,参考的链接找不到了

世界光照设置中第一个决定了在计算静态光要详细到几厘米,那个参数越小精细,但相对的会大大提拔构建时间,留意是针对静态光照。我给出的建议是小场景若是逃求十分精细的话建议在0.3-0.2,中大型场景的话4.0-1.0摆布都能够。

第二个是计算间接光的反弹次数,越高反弹次数和间接光效果越好,但是超越50后提拔不在明显或者会变差,越高构建的时间越长。建议是逃求画量的情况下最末要做出效果时在进步到30-50摆布。(间接光对场景实在度影响很大)

第三个是间接光照的量量 能削减噪点和一些污渍的暗影,但其实不能处理光照UV呈现问题的污渍暗影,和上面一样,越高越好时间越久。建议逃求高效果的话在8-10摆布,若是是通俗的游戏那2-5就能够。

第四个决定了间接光照的光滑度,但越高会对间接暗影有细节丧失,若是上一个参数调整比力高的话,那个参数不克不及超越0.65-0.75

25. 光照贴图分辩率

那个现实上用的不多(雾)

26. uv堆叠

参考http://90cg.com/wordpress/ue4_mesh%E6%A8%A1%E5%9E%8B%E5%AF%BC%E5%85%A5%E9%97%AE%E9%A2%98%E4%B9%8Buvw%E4%BA%8C%E6%AC%A1uv/

此次碰到的问题是没有2次UV。把模子导入3dmax,修改器-uvw展开,挪动,新建一个通道,再导给ue就行

思疑只需要导入3dmax,再导给ue就行

27. 导入资本后引用不准确

导入资本经常会引用不准确,就是途径不准确

右键导入的资本,查看引用。将文件夹改成对应的途径能够修复

28. 异常处置

在Unity中,您可能习惯于当发作问题是抛出异常。虚幻4则其实不处置异常。取而代之的做法是,利用 “check()” 函数来触发严峻的错误。能够传入一个错误信息提醒。若是只是想陈述一个错误,但其实不希望打断整个法式,能够利用 “ensure()”。那将会记录一个完好仓库的日记信息,但法式会继续施行。若是当前附加了调试器,那么那两个函数城市暂定并进入调试器。

29. .NET Framework去哪里了

unity和ue4的对应关系

30. 调整VIVE眼镜的明晰度 r.screenpercentage 200 r.screenpercentage[30-300]

0
回帖

UE4_细碎常识点拾遗_2019 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息