UE4 小知识记录

文章介绍了UE4中的关键概念和技术,包括如何计算FPS、使用DDC进行数据缓存、调整游戏时间和场景三角面数。此外,还讨论了输入处理、Nanite技术对模型LOD的影响、布料系统的应用以及错误处理策略。内容涵盖从基本的帧率优化到复杂的场景构建和动画效果实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如图所示,now能够拿到所有的当前时间信息


用1 / delta time就能够得到FPS,其他操作时防止刷新过快,看不清字,另外,帧率越高,性能越好


第一个蓝图是世界时间运行的快慢,1是标准速度,0.1是标准速度的0.1倍,另外,第一个蓝图只能影响场景,不能影响到pawn,所以要有第二组蓝图节点,该节点用于游戏慢动作


显示场景三角面数:

stat RHI


DDC(DeriverdDataCache):中文名字叫派生数据缓存

将之加入到项目后就存在了DDC

点击Settings

编辑缓存位置

点击Brouse 

显示的文件就是加入到项目的DDC了,在这里可以进行删除 


玩家飞行逻辑:


如何在Actor内添加输入


UE4自带空气墙


用于制作技能CD,防止暂停过后,CD还在计算,所以用这个值来判断技能CD是否结束,是否能进行下一次攻击 


橡皮绳actor:

 

点击Attach Start为false,开始的位置就成非悬挂状态

点击Attach End为false,结束的位置就成非悬挂状态


SceneComponent比ActorComponent多一个位置信息,SceneComponent继承自ActorComponent

以上为SceneComponent

这个才是ActorComponent,没有位置信息 


Spline今天看到的新用法:

右键点击spline

即可用样条线直接画形状,比如说圆形啊什么的,不然圆形你不知道这个确实还不好弄不出来


解决曝光问题:

关闭Eye Adaptation 

场景就不曝光了 


这个地方只能用TEXT(),可以写FString a = TEXT("123");

可以static ConstructorHelpers::FObjectFinder<UMaterial> flyMat(TEXT("123"));

但是不能static ConstructorHelpers::FObjectFinder<UMaterial> flyMat(a);//报错

解决办法,申明一个const TCHAR*的变量即可解决该问题 

FString转化未const CHAR* 


 

ZOrder决定绘制的顺序,值越小,绘制的优先级越高,所以值大的在值小的上层(可遮挡)

UI贴图关闭MIPS,可以省三分之一的内存,一般ASTC 4*4压缩肉眼看不出变化


打包后,可以在这个目录下设置一些GameUserSetting的参数,比如说分辨率,项目质量设置,是否全屏等等


获取变量类型的三种方法:

1、std::is_same

相同为1,不同为0

2、typeid().name();

打印成int类型

3、std::is_floating_point<Type>::value       std::is_integral<Type>::value       std::is_base_of<FString,Type>()

对应上了就是1,不对应就是0 

std::is_intergral也一样

Is_base_of,是否为什么的父类 


UE5的Nanite,自动对模型做LOD,三角面可根据距离平滑过渡,提高性能优化

导入模型的时候把这个给√上 

Nanite通常在三角面数多的情况下使用,才能优化,三角面不多还是用普通的就行


布料系统(毛发、布料实现)

UE4_头发飘动物理_哔哩哔哩_bilibili


若GamePlay框架中,最好是继承自GameMode而不是GameModeBase,不然所有蓝图的BeginPlay将失效


CORE_API DECLARE_LOG_CATEGORY_EXTERN(LogHAL, Log, All);

LogHAL是新Log名,其它照抄就可以

以后就这么用:

UE_LOG(LogHAL, Fatal, TEXT("FGenericPlatformProcess::ReadPipeToArray not implemented on this platform"));


骚操作


法线混合不要直接用Add,用这个BlendAngleCorrectedNormals


CameraVector是材质像素朝向相机位置的一个方向向量,相机位置移动,内部uv也会移动,所以这样写有一种贴图在洞里面的感觉


球形加上Noise很有用,比如这个可以做撒出去的水


Timer里面如何绑定Lambda?

FTimerDelegate timeDelegate;
FTimerHandle timeHandle;

auto lambdaFunc = [](){
     ...
};

timeDelegate.BindLambda(lambdaFunc);

GetWorld()->GetTimerManager().SetTimer(timeHandle, timeDelegate, 1.f, true);

制作技能标记起始点到终点的抛物线轨迹


ExposeOnSpawn暴漏给SpawnActor,前提要把变量暴露给编辑器,例如BlueprintReadOnly,BlueprintReadWrite


UE C++如何使用Timeline



UE 用 try catch的写法需要在对应模块的.cs里面添加:bEnableExceptions = true;


打包报错 :

C4668

加上这个

#include "Windows/AllowWindowsPlatformTypes.h"
#include "Windows/PreWindowsApi.h"

#include "冲突的头文件"

#include "Windows/PostWindowsApi.h"
#include "Windows/HideWindowsPlatformTypes.h"
 

再在.build.cs里面加

bEnableUndefinedIdentifierWarnings = false;


将Actor附着到另一个Actor上,并且可以Detach


FVector UHermesWeatherSkyPluginBPLibrary::GetEidtorMainPawn(AActor* actor) {
	auto world = actor->GetWorld();
	if (world == nullptr)	return FVector{};
	auto viewLocations = world->ViewLocationsRenderedLastFrame;
	if (viewLocations.Num() == 0) {
		return FVector{};
	}
	FVector camLocation = viewLocations[0];
	return camLocation;
}

如何在编辑器下拿到pawn的位置


在这里设置粒子的裁剪距离

在这里设置例子排序模式


如何材质遮罩值为0时,则不做处理,提升性能


如何快速制作折射效果?

1、材质改为半透明材质

2、反射模式改为像素法线偏移

3、透明度小于1

4、要一个折射效果的法线贴图!

5、折射率要不等于1


这样也可以画圆环,SphereMask是通过离B值差值为Radius的进行渲染,硬度用来做离B值的插值曲线弱化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值