虚幻Unreal - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(97评价)
价格: 3420.00元

Generate Mesh Distance Fields(生成网格距离场)

Unreal Engine(UE) 中,Mesh Distance Fields(网格距离场) 是一种 用于计算物体之间距离 的体积数据。它可以让光照、渲染、特效等功能基于距离场信息进行动态调整,例如 动态AO(Ambient Occlusion)、基于距离的遮罩、距离场阴影等

 

 

项目设置-》 Lighting ->Generate Mesh Distance Fields 开启

[展开全文]
Alonelys · 2025-03-20 · 0

HeightLerp 用于根据高度信息在两个材质之间进行平滑过渡

[展开全文]
Alonelys · 2025-03-20 · 0

input TEXTURE 材质函数 输入

[展开全文]
Alonelys · 2025-03-20 · 0

全部粒子 渲染一张图片

粒子坐标 世界坐标 本地坐标 

[展开全文]
Alonelys · 2025-03-20 · 0

Particle Speed  粒子速度

Power(幂次运算)

通过修改 材质 减少K 粒子

[展开全文]
Alonelys · 2025-03-20 · 0

Particle Color 获取 粒子颜色

Particle Relative Time 各属性粒子时间

[展开全文]
Alonelys · 2025-03-20 · 0

UV CustomRotator 自定义旋转

[展开全文]
Alonelys · 2025-03-20 · 0

RadialGradientExponential 辐射渐变节点

[展开全文]
Alonelys · 2025-03-20 · 0

LinearGradient  梯度节点

 

[展开全文]
Alonelys · 2025-03-20 · 0

MakeMaterialAttributes

定义多个材质属性

BlendMaterialAttributes

材质混合

[展开全文]
Alonelys · 2025-03-20 · 0

Panner 平移节点

BumpOffset 高度偏移

Depth Fade 深度渐隐

接触其他物体渐隐

Fresnel 菲涅尔 外发光

 

[展开全文]
Alonelys · 2025-03-20 · 0

TGProject.Build 里添加 插件

public TGProject(ReadOnlyTargetRules Target) : base(Target)
{
	PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

	PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay",
		"EnhancedInput", "OnlineSubsystem", "OnlineSubsystemUtils" });
}

 

[展开全文]
Alonelys · 2025-03-19 · 0

VS 属性页 调试 添加 命令参数

 

[展开全文]
Alonelys · 2025-03-19 · 0
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);
                        }
                    }
                }

            }
        }
    }
}

 

[展开全文]
Alonelys · 2025-03-19 · 0
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);
}

 

[展开全文]
Alonelys · 2025-03-19 · 0

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);
}

 

[展开全文]
Alonelys · 2025-03-19 · 0

UPROPERTY()  不会被回收

 

[展开全文]
Alonelys · 2025-03-19 · 0

ensure

ensure 是 Unreal Engine 提供的一个调试宏,它用于 验证一个条件是否为真,如果条件为假,则会:

  • 打印一个警告信息
  • 停止当前帧的执行(不崩溃),但是允许程序继续运行。

ensure(Condition);

 

 

PossessedBy() 指定完控制器后

就可以读取数据了

 

服务端 或者 单机状态下 才调用

客户端除外

 

 

[展开全文]
Alonelys · 2025-03-19 · 0

基本数据-》结构-》表格

USTRUCT(BlueprintType)

定义可用于蓝图的结构体

UPROPERTY(EditAnywhere,BlueprintReadWrite)

定义蓝图可访问的变量

 

TEnumAsByte<ECharacterColorType::ColorType> 是什么意思?

在 Unreal Engine C++ 代码中,TEnumAsByte<T> 是一个模板类,它的作用是将 枚举(enum) 存储为 一个字节(uint8,而不是默认的 4 字节 int32。这样可以节省内存,特别是在结构体或 UPROPERTY 变量中。

[展开全文]
Alonelys · 2025-03-19 · 0

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);

绑定多播

 

[展开全文]
Alonelys · 2025-03-19 · 0