ue4奇怪知识点拾遗-2019

本文整理2019年收集到的,ue4杂乱的小知识点

1. 控制台设置分辨率

可以用于锁帧
t.maxfps 20

2. 获取spline控制点的distance

获取spline控制点的distance

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

3. Spline Mesh Runtime

参考https://answers.unrealengine.com/questions/261136/add-spline-mesh-component-doesnt-work-at-runtime.html
使用SplineMeshComponent方法时,会报如下错误

Spline Mesh Runtime

Spline Mesh Runtime

解决方法是在蓝图里,将这个组件的移动性改为可移动
Spline Mesh Runtime

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

Create Widget

6. FString 换行

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

FString 换行

7. c++蓝图函数库要使用静态方法

加个static,不然蓝图中找不到

UFUNCTION(BlueprintCallable, meta = (DisplayName = "SaveRenderTargetToFile", Keywords = "SaveRenderTargetToFile"), Category = "ADAS_SaveToFile")
static bool SaveRenderTargetToFile(UTextureRenderTarget2D* rt, const FString& fileDestination);
c++蓝图函数库要使用静态方法

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.

打包win64报错

在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 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 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不会动

SpawnActor

15. 设置character速度

如果直接设置Movement组件里的速度,会卡,导致动画播放不稳定。可以通过AddMovementInput节点设置

AddMovementInput

16. 使用手柄

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

  1. 我用的手柄是rapoo v10 这款手柄,连接无线USB之后,在“控制面板\硬件和声音\设备和打印机”里找关于手柄手柄的设备,然后输入,可以看到一些值的反馈。
  2. 需要下载 x360ce.exe
  3. 下载vld-2.5-setup.exe,我也忘记这是什么东西了。
  4. 下载手柄驱动,用什么下什么。
  5. 在手柄接入后,打开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


ui蓝图暴露变量

ui蓝图暴露变量

19. 不同版本切换时无法保存

高版本导入到低版本时,低版本有的东西显示不出来
如果遇到类似“因为时高版本保存的,所以无法保存”的问题,把高版本的UASSET文件删除,然后再导入fbx或者贴图等试试

20. 3dmax导入和导出fbx

ue4版本不一样时,可以从ue4导出fbx,然后从3dMax导出,再导入到ue4
3dMax导出设置,注意勾选涡轮平滑,单位改为cm,轴改为z向上


3dmax导入和导出fbx

3dmax导入和导出fbx

3dmax导入和导出fbx

21. 定序器player

不勾选show player就没有player的


定序器player

22. ui对camera可见性

设置Widget的此选项,可以让其他摄像头拍不到这个UI,否则所有物体都能看到(?)


ui对camera可见性

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


Lightmass

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的对应关系


framework

30. 调整VIVE眼镜的清晰度

r.screenpercentage 200
r.screenpercentage[30-300]

你可能感兴趣的:(ue4奇怪知识点拾遗-2019)