Generate Mesh Distance Fields(生成网格距离场)
在 Unreal Engine(UE) 中,Mesh Distance Fields(网格距离场) 是一种 用于计算物体之间距离 的体积数据。它可以让光照、渲染、特效等功能基于距离场信息进行动态调整,例如 动态AO(Ambient Occlusion)、基于距离的遮罩、距离场阴影等。
在 项目设置-》 Lighting ->Generate Mesh Distance Fields 开启
在 Unreal Engine(UE) 中,Mesh Distance Fields(网格距离场) 是一种 用于计算物体之间距离 的体积数据。它可以让光照、渲染、特效等功能基于距离场信息进行动态调整,例如 动态AO(Ambient Occlusion)、基于距离的遮罩、距离场阴影等。
在 项目设置-》 Lighting ->Generate Mesh Distance Fields 开启
HeightLerp 用于根据高度信息在两个材质之间进行平滑过渡。
input TEXTURE 材质函数 输入
全部粒子 渲染一张图片
粒子坐标 世界坐标 本地坐标
Particle Speed 粒子速度
Power(幂次运算)
通过修改 材质 减少K 粒子
Particle Color 获取 粒子颜色
Particle Relative Time 各属性粒子时间
UV CustomRotator 自定义旋转
RadialGradientExponential 辐射渐变节点
LinearGradient 梯度节点
MakeMaterialAttributes
定义多个材质属性
BlendMaterialAttributes
材质混合
Panner 平移节点
BumpOffset 高度偏移
Depth Fade 深度渐隐
接触其他物体渐隐
Fresnel 菲涅尔 外发光
TGProject.Build 里添加 插件
public TGProject(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay",
"EnhancedInput", "OnlineSubsystem", "OnlineSubsystemUtils" });
}
VS 属性页 调试 添加 命令参数
void ATGProjectCharacter::PossessedBy(AController* NewController)
{
Super::PossessedBy(NewController);
UE_LOG(MYLog____ATGProjectCharacter, Log, TEXT("---PossessedBy---32323232323"));
if (GetNetMode() == NM_DedicatedServer)
{
if (UTGProjectGameInstance* GI = GetGameInstance<UTGProjectGameInstance>())
{
if (ATGProjectPlayerState* PS = GetPlayerState<ATGProjectPlayerState>())
{
//读存档
bool IsNeedDataTable = true;
if (UTGSettings::Get().bSaveGame)
{
UTGSaveGame* SaveGame = Cast<UTGSaveGame>(UGameplayStatics::LoadGameFromSlot(FString("TGSaveGame_" + PS->GetPlayerName()), 0));
if (SaveGame)
{
PS->SetPlayerCurHP(SaveGame->SG_CurHP);
PS->SetPlayerMaxHP(SaveGame->SG_MaxHP);
IsNeedDataTable = false;
}
}
//读表
if (IsNeedDataTable)
{
if (GI->PlayerInitData)
{
FTGPlayerInitData* PlayerData = GI->PlayerInitData->FindRow<FTGPlayerInitData>(PlayerInitRowName, TEXT(""));
if (ensure(PS))
{
PS->SetPlayerCurHP(PlayerData->MaxHP);
PS->SetPlayerMaxHP(PlayerData->MaxHP);
}
}
}
}
}
}
}
void ATGProjectPlayerState::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
if (UTGSettings::Get().bSaveGame)
{
if (GetNetMode() == NM_DedicatedServer)
{
//创建游戏保存
UTGSaveGame* SaveGame = Cast<UTGSaveGame>(UGameplayStatics::CreateSaveGameObject(UTGSaveGame::StaticClass()));
if (SaveGame)
{
SaveGame->SG_CurHP = CurHP;
SaveGame->SG_MaxHP = MaxHP;
//保存文件
UGameplayStatics::SaveGameToSlot(SaveGame, FString("TGSaveGame_" + GetPlayerName()), 0);
}
}
}
Super::EndPlay(EndPlayReason);
}
FURL map;
map.Op.add()
向服务器传递消息
GameMode
Login 接收登录事件
FString PN = UGameplayStatics::ParseOption(Options, FString("PN"));
FCommandLine::Get() 获取当前游戏的命令行参数字符串
DEFINE_LOG_CATEGORY_STATIC(MYLog____ATGProjectGameInstance, Log, All)
添加打印宏
UE_LOG(MYLog____ATGProjectGameInstance,
if (FParse::Value(FCommandLine::Get(), TEXT("PlayerName="), PlayerName))
{
UE_LOG(MYLog____ATGProjectGameInstance, Log, TEXT("----Init----PlayerName = %s"), *PlayerName);
}
UPROPERTY() 不会被回收
ensure 宏ensure 是 Unreal Engine 提供的一个调试宏,它用于 验证一个条件是否为真,如果条件为假,则会:
ensure(Condition);
PossessedBy() 指定完控制器后
就可以读取数据了
服务端 或者 单机状态下 才调用
客户端除外
基本数据-》结构-》表格
USTRUCT(BlueprintType)
定义可用于蓝图的结构体
UPROPERTY(EditAnywhere,BlueprintReadWrite)
定义蓝图可访问的变量
TEnumAsByte<ECharacterColorType::ColorType> 是什么意思?在 Unreal Engine C++ 代码中,TEnumAsByte<T> 是一个模板类,它的作用是将 枚举(enum) 存储为 一个字节(uint8),而不是默认的 4 字节 int32。这样可以节省内存,特别是在结构体或 UPROPERTY 变量中。
DECLARE_DELEGATE_OneParam(FOnPlayerCurHPChange, float);
单播委托,即 只能绑定一个函数。
DECLARE_DYNAMIC_DELEGATE_OneParam
动态单播
DECLARE_MULTICAST_DELEGATE_OneParam(FOnPlayerMaxHPChange, float);
多播委托,可以 绑定多个函数。
DECLARE_DYNAMIC_MULTICAST_DELEGATE
动态多播
OnPlayerCurHPChange.ExecuteIfBound(GetPlayerCurHP());
执行单播
OnPlayerMaxHPChange.Broadcast(GetPlayerMaxHP());
执行多播
OnPlayerCurHPChange 是一个 DECLARE_DELEGATE_OneParam 定义的委托。
ExecuteIfBound() 检查委托是否绑定,如果绑定了,就执行。
GetPlayerCurHP() 是一个返回 float 的函数,获取玩家当前血量。
PS->OnPlayerCurHPChange.BindUObject(this, &UUI_PlayerInfoUI::SetPlayerCurHP);
绑定单播
PS->OnPlayerMaxHPChange.AddUObject(this, &UUI_PlayerInfoUI::SetPlayerMaxHP);
绑定多播