8. UE5 RPG创建UI(上)

这篇具有很好参考价值的文章主要介绍了8. UE5 RPG创建UI(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

UI是显示角色的一部分属性玩家可以直接查看的界面,通过直观的形式在屏幕上显示角色的各种信息。如何使用一种可扩展,可维护的形式来制作,这不得不说到耳熟能详的MVC架构。
MVC(Model-View-Controller)是一种常见的软件架构模式,用于组织和设计应用程序。它将应用程序分为三个逻辑层:模型(Model)、视图(View)和控制器(Controller)。

  1. 模型(Model)层: 主要处理数据相关的内容,和数据库进行读取,写入,更新,删除等操作。并定义了操作和访问这些数据的方法。
  2. 视图(View)层: 视图层负责展示模型层的数据给用户,并接收用户的输入。它是用户界面的一部分,负责展示信息、呈现数据、收集用户输入等。视图层通常是根据模型层的数据来动态生成的,以便用户可以直观地与数据进行交互。
  3. 控制器(Controller)层: 控制器层接收用户的输入,并根据输入调度和处理请求。它负责处理用户与应用程序的交互逻辑,决定如何更新模型层数据和选择合适的视图层。控制器将用户的请求转发给模型层进行处理,并在完成后更新视图层以显示结果。

通过MVC的方式,我们将各部分模块化分工,将关注点分离,提高应用程序的可维护性,可扩展性和可测试性。模型层只需将相应的接口提供,不需要知道控制层如何如使用它,也不需要知道视图层如何显示它。控制器层去模型层交互获取数据,然后通过广播的形式将消息散发出去,视图层只需要接受广播消息更新数据。形成一种单向依赖关系。

创建基础类

理论的东西说完了,开始进入实际操作中,首先,我需要创建用于显示的基础ui部件类
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
新创建一个UserWidget(用户控件)类
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
接着创建一个基础的Object类,用于作为控制器层。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
这个类被用来作为用户控件的控制器层。

用户控件代码:

	UPROPERTY(BlueprintReadOnly) //蓝图可读取,但不能修改
	TObjectPtr<UObject> WidgetController;

首先增加了一个参数,用于获取存储控制器层对象。

protected:
	UFUNCTION(BlueprintImplementableEvent) //c++里不能定义,可以调用,蓝图中 无返回值可作为通知,有返回值还可以覆盖重写
	void WidgetControllerSet();

添加一个可以在蓝图里面使用的函数作为控制器对象修改后的回调。

	UFUNCTION(BlueprintCallable) //蓝图可调用
	void SetWidgetController(UObject* InWidgetController);

增加一个设置控制器层的方法,可以在蓝图调用去修改控制器。

void UMyUserWidget::SetWidgetController(UObject* InWidgetController)
{
	WidgetController = InWidgetController;
	WidgetControllerSet();
}

在cpp中函数的实现就是赋值,然后调用回调。具体设置会在蓝图中设置。

MyUserWidget.h

// 版权归暮志未晚所有。

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyUserWidget.generated.h"

/**
 * 
 */
UCLASS()
class AURA_API UMyUserWidget : public UUserWidget
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable) //蓝图可调用
	void SetWidgetController(UObject* InWidgetController);

	UPROPERTY(BlueprintReadOnly) //蓝图可读取,但不能修改
	TObjectPtr<UObject> WidgetController;

protected:
	UFUNCTION(BlueprintImplementableEvent) //c++里不能定义,可以调用,蓝图中 无返回值可作为通知,有返回值还可以覆盖重写
	void WidgetControllerSet();
};

MyUserWidget.cpp

// 版权归暮志未晚所有。


#include "UI/Widget/MyUserWidget.h"

void UMyUserWidget::SetWidgetController(UObject* InWidgetController)
{
	WidgetController = InWidgetController;
	WidgetControllerSet();
}

在WidgetController里面,需要去获取model层的数据。数据在哪,在角色的playerController,playerState,ASC和AS身上。
MyWidgetController.h

// 版权归暮志未晚所有。

#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "MyWidgetController.generated.h"

class UAttributeSet;
class UAbilitySystemComponent;

/**
 * 
 */
UCLASS()
class AURA_API UMyWidgetController : public UObject
{
	GENERATED_BODY()

protected:

	UPROPERTY(BlueprintReadOnly, Category="WidgetController")
	TObjectPtr<APlayerController> PlayerController;

	UPROPERTY(BlueprintReadOnly, Category="WidgetController")
	TObjectPtr<APlayerState> PlayerState;

	UPROPERTY(BlueprintReadOnly, Category="WidgetController")
	TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent;

	UPROPERTY(BlueprintReadOnly, Category="WidgetController")
	TObjectPtr<UAttributeSet> AttributeSet;
	
};

创建进度条

我们创建进度条用于显示角色的血量变化。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
创建目录ProgressBar,用于存放进度条蓝图
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
文件夹内,选择创建控件蓝图
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
基类选择创建的c++类
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
将ui尺寸调整成所需(当前用户控件需要多少,大小就是多少)
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
添加一个尺寸框
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
为了可以自定义每个用户控件的大小,设置高度和宽度重载。并将其勾选是变量。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
打开图标,可以在左侧查看到尺寸框的变量,我们接着创建两个变量用来更新尺寸框的尺寸。编译后的尺寸框可以修改宽高。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
EventPreConstruct相当于构造函数,在构造时,我们只需要通过变量修改尺寸框的高和宽,实现对每个添加的用户控件进行尺寸修改。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
在尺寸框下面添加一个覆层,覆层下面的物体可以重叠在一起。然后覆层下面添加一个图像作为背景图片。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
修改图片的水平对齐和垂直对齐
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
接下来,创建一个变量,用来在初始化时修改背景的图像,这里需要用到Slate笔刷。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
初始化后链接使用SetBrush节点,去使用变量修改背景图片的brush。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
设置变量的默认值。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
会发现图片被成功的渲染出来。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
我们可以选中右键,折叠到函数,将函数折叠起来。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
接着在覆层下面添加一个进度条,这个进度条用来表示
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
样式这边,添加上对应的材质或者图像。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
修改进度的百分比,可以实现修改进度。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui

但是你会发现颜色不对,是纯黑,需要在外观这里,将所有值都修改为1,颜色表现就对了。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
但是颜色却是正方形,需要将填充图绘制为图像,就可以正确显示图像里面效果。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
将背景图的着色的A值设置为0,可以去掉背景。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
进度过渡我们将条填充类型改为底到顶,实现了从下往上填充。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
我们想通过变量去修改进度条的样式,所以将进度条设置为变量,并设置样式。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
将样式拖出,选择Make ProgressBarStyle创建一个新的样式。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui

8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
创建的样式节点也就对应四个参数。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
前面设置,我们将背景颜色的着色的alpha设置为0, 那么我们也需要在节点这里修改透明度。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
将填充图像提升为变量,我们可以通过变量修改,来修改填充图像。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
我们需要修改填充让进度条大小小一些,防止遮挡住背景图像。通过修改覆层插槽的填充来实现。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
先将插槽转换成覆层的插槽,然后设置它的填充,并设置一个变量来可以修改当前的padding的值。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
接着在覆层下再添加一个图像,用于在血量图像上次覆盖一层玻璃瓶的效果。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
通过Brush去设置图像
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
稍微调整一下填充,来实现晶莹剔透的效果。如果你感觉玻璃瓶的亮度太高,可以通过调整它的透明度,降低亮度。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
现在这个可以作为药瓶基类,创建血量和蓝量显示ui。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
在右侧属性这里,修改图像,即可实现了两个用户控件的创建。

添加到屏幕

8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
创建一个新的用户控件,控件基类为创建的UMyUserWidget 基类,这个控件会覆盖整个屏幕,作为ui的根。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
添加一个画布面板
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
将血量显示控件拖入到场景内,并修改锚点到中间下方。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
打开关卡蓝图
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
在事件开始时,输入create Widget,创建控件节点,类设置为创建的WBP_Overlay。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
使用Add Viewport添加到视口
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
可以看到已经能够在ui上面显示,但是有些大。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
将属性右侧的眼睛打开,可以将私有变量设置为公有变量。

给用户控件添加控制器层

当前角色血量和蓝量显示的用户控件我们已经制作完成,接下来要实现对用户控件显示的更新,基于MVC,我们需要实现控制器层,将View和Model链接起来,前面我们已经创建了控制器层类。接下来,我们将继续更新它能够使用。

USTRUCT(BlueprintType)
struct FWidgetControllerParams
{
	GENERATED_BODY()
	FWidgetControllerParams(){}
	FWidgetControllerParams(APlayerController* PC, APlayerState* PS, UAbilitySystemComponent* ASC, UAttributeSet* AS)
	: PlayerController(PC),
	PlayerState(PS),
	AbilitySystemComponent(ASC),
	AttributeSet(AS)
	{}

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<APlayerController> PlayerController = nullptr;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<APlayerState> PlayerState = nullptr;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent = nullptr;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<UAttributeSet> AttributeSet = nullptr;
};

在控制器类里,增加了一个结构体,我们后续通过结构体设置控制器层的相关引用。结构体构造函数小括号后面加:可以直接对属性进行初始化。

public:
	UFUNCTION(BlueprintCallable)
	void SetWidgetControllerParams(const FWidgetControllerParams& WCParams);

控制器层类增加一个蓝图调用函数,通过蓝图调用去设置控制器层的相关参数。

void UMyWidgetController::SetWidgetControllerParams(const FWidgetControllerParams& WCParams)
{
	PlayerController = WCParams.PlayerController;
	PlayerState = WCParams.PlayerState;
	AbilitySystemComponent = WCParams.AbilitySystemComponent;
	AttributeSet = WCParams.AttributeSet;
}

函数实现是直接设置对应参数。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
然后创建基于此控制层类创建一个子类,后续作为HUD的控制器层,它可以作为一个单例使用。

创建HUD

HUD是管理UI的基类,我在类中将管理用户控件和用户控件的控制器层内容。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui

之前直接在关卡蓝图里面将控件添加到视口的方式只是用来测试。正常我们需要赋值HUD类的方式去实现对UI的添加。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
父类选择HUD
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
创建一个HUD类

public:

	UPROPERTY()
	TObjectPtr<UMyUserWidget> OverlayWidget;

在HUD代码中,创建一个公有属性用于存储实例化后的用户组件

private:

	UPROPERTY(EditAnywhere)
	TSubclassOf<UMyUserWidget> OverlayWidgetClass;

	UPROPERTY()
	TObjectPtr<UOverlayWidgetController> OverlayWidgetController;

	UPROPERTY(EditAnywhere)
	TSubclassOf<UOverlayWidgetController> OverlayWidgetControllerClass;

创建一个私有的用户组件类,用于存储需要实力的用户组件类。以及私有的覆层用户控件变量和它的类,用于创建和存储控制器层。

UOverlayWidgetController* GetOverlayWidgetController(const FWidgetControllerParams& WCParams);

创建一个函数,可以通过结构体去获取控制器层实例。

UOverlayWidgetController* AMyHUD::GetOverlayWidgetController(const FWidgetControllerParams& WCParams)
{
	if(OverlayWidgetController == nullptr)
	{
		OverlayWidgetController = NewObject<UOverlayWidgetController>(this, OverlayWidgetControllerClass);
		OverlayWidgetController->SetWidgetControllerParams(WCParams);
	}
	return OverlayWidgetController;
}

实现就是没有就创建,存在就直接返回。

void InitOverlay(APlayerController* PC, APlayerState* PS, UAbilitySystemComponent* ASC, UAttributeSet* AS);

创建一个能够HUD初始化并能够创建相应的用户控件和控制器层对象的函数

void AMyHUD::InitOverlay(APlayerController* PC, APlayerState* PS, UAbilitySystemComponent* ASC, UAttributeSet* AS)
{
	checkf(OverlayWidgetClass, TEXT("OverlayWidgetClass 未设置,请在HUD上面设置")); //会打印相关信息到log列表
	checkf(OverlayWidgetControllerClass, TEXT("OverlayWidgetControllerClass 未设置,请在HUD上面设置"));
	
	UMyUserWidget* Widget = CreateWidget<UMyUserWidget>(GetWorld(), OverlayWidgetClass); //创建Overlay用户控件
	OverlayWidget = Cast<UMyUserWidget>(Widget);

	const FWidgetControllerParams WidgetControllerParams(PC, PS, ASC, AS); //创建参数结构体
	OverlayWidgetController = GetOverlayWidgetController(WidgetControllerParams); //获取控制器层

	OverlayWidget->SetWidgetController(OverlayWidgetController); //设置用户控件的控制器层
	
	Widget->AddToViewport(); //添加到视口
}

如果没有设置对应的类,将抛出错误并给予提示,然后根据类创建对应的实例最后将用户控件添加到视口。

MyHUD.h

// 版权归暮志未晚所有。

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/HUD.h"
#include "MyHUD.generated.h"

class UAttributeSet;
class UAbilitySystemComponent;
struct FWidgetControllerParams;
class UOverlayWidgetController;
class UMyUserWidget;

/**
 * 
 */
UCLASS()
class AURA_API AMyHUD : public AHUD
{
	GENERATED_BODY()

public:

	UPROPERTY()
	TObjectPtr<UMyUserWidget> OverlayWidget;

	UOverlayWidgetController* GetOverlayWidgetController(const FWidgetControllerParams& WCParams);

	void InitOverlay(APlayerController* PC, APlayerState* PS, UAbilitySystemComponent* ASC, UAttributeSet* AS);

private:

	UPROPERTY(EditAnywhere)
	TSubclassOf<UMyUserWidget> OverlayWidgetClass;

	UPROPERTY()
	TObjectPtr<UOverlayWidgetController> OverlayWidgetController;

	UPROPERTY(EditAnywhere)
	TSubclassOf<UOverlayWidgetController> OverlayWidgetControllerClass;
};

MyHUD.cpp

// 版权归暮志未晚所有。


#include "UI/HUD/MyHUD.h"
#include "UI/Widget/MyUserWidget.h"
#include "UI/WidgetController/OverlayWidgetController.h"

UOverlayWidgetController* AMyHUD::GetOverlayWidgetController(const FWidgetControllerParams& WCParams)
{
	if(OverlayWidgetController == nullptr)
	{
		OverlayWidgetController = NewObject<UOverlayWidgetController>(this, OverlayWidgetControllerClass);
		OverlayWidgetController->SetWidgetControllerParams(WCParams);
	}
	return OverlayWidgetController;
}

void AMyHUD::InitOverlay(APlayerController* PC, APlayerState* PS, UAbilitySystemComponent* ASC, UAttributeSet* AS)
{
	checkf(OverlayWidgetClass, TEXT("OverlayWidgetClass 未设置,请在HUD上面设置")); //会打印相关信息到log列表
	checkf(OverlayWidgetControllerClass, TEXT("OverlayWidgetControllerClass 未设置,请在HUD上面设置"));
	
	UMyUserWidget* Widget = CreateWidget<UMyUserWidget>(GetWorld(), OverlayWidgetClass); //创建Overlay用户控件
	OverlayWidget = Cast<UMyUserWidget>(Widget);

	const FWidgetControllerParams WidgetControllerParams(PC, PS, ASC, AS); //创建参数结构体
	OverlayWidgetController = GetOverlayWidgetController(WidgetControllerParams); //获取控制器层

	OverlayWidget->SetWidgetController(OverlayWidgetController); //设置用户控件的控制器层
	
	Widget->AddToViewport(); //添加到视口
}

我们的初始化函数也创建完成了,接下里就是InitOverlay()函数何时调用,在哪里调用?
由于这个函数需要PC,PS,ASC,AS,这四个参数,所以我们需要在这四个值已经创建完成并初始化完成后的地方调用。而ASC初始化完成,需要在客户端和服务器都要初始化结束,我们是在对应的Character里面实现的,所以,我们也需要在对应的Character里面调用即可。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
在玩家角色里我们书写了InitAbilityActorInfo()函数,这里面可以获得ASC和AS还有PlayerState,从角色类身上我们也可以获得玩家控制器,那么参数就齐了。

void AHeroCharacter::InitAbilityActorInfo()
{
	APlayerStateBase* PlayerStateBase = GetPlayerState<APlayerStateBase>();
	check(PlayerStateBase); //检测是否有效,无限会暂停游戏
	//从playerState获取ASC和AS
	AbilitySystemComponent = PlayerStateBase->GetAbilitySystemComponent();
	AttributeSet = PlayerStateBase->GetAttributeSet();
	//初始化ASC
	AbilitySystemComponent->InitAbilityActorInfo(PlayerStateBase, this);

	//获取PC
	if(APlayerControllerBase* PlayerControllerBase = Cast<APlayerControllerBase>(GetController()))
	{
		if(AMyHUD* HUD = Cast<AMyHUD>(PlayerControllerBase->GetHUD()))
		{
			HUD->InitOverlay(PlayerControllerBase, PlayerStateBase, AbilitySystemComponent, AttributeSet);
		}
	}
	
}

我们可以先获取到PlayerController,可以通过PlayerController获取到HUD,并调用函数初始化。

8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
在UE里创建一个蓝图类,基类基于创建的c++的HUD
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
设置Overlay用户控件类和Overlay控制器层类
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
打开基础游戏模式,设置HUD类为当前创建的蓝图HUD。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
世界场景设置这里的HUD类也会默认改成当前的设置。

总结

上面这些我们主要实现了制作用户控件,并且能够在用户控件里面直接获取到控制器层,后续可以通过控制器层直接获取数据进行数据更新。
具体实现过程:在创建玩家控制角色过程中,初始化完成技能系统后,去调用HUD的InitOverlay()函数,来实现用户组件控制器层的初始化。InitOverlay()中将实现对用户控件和用户控件控制器层的实例化,并将UI添加到屏幕中。

测试

我们在用户组件基类中创建了一个WidgetControllerSet()函数,函数会在控制器层被设置时触发。这个函数可以在C++中调用,在蓝图中如果没有返回值可以当做通知使用,我们可以针对这一点对于当前实现的内容进行测试,查看是否在用户控件中这个通知是否有回调。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
在WBP_Overlay的图标中,右键搜索WidgetControllerSet,会发现相应的通知函数
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
拉出来
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
获取到控制器层对象。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
在设置控制器层对象完成后,打印它的名称。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
如果在左上角能够显示当前控制器层的对象名称,证明实现了当前内容的功能。

8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
在debug模式下,我们还可以通过打断点的方式实现调试检测。在代码左侧数字那里,悬停会出现红点,通过点击添加断点。
接着重新运行游戏。
8. UE5 RPG创建UI(上),unreal,UE5 RPG,ue5,ui
会发现程序停止运行到此处,我们可以以此来检查停止运行之前的值是否有问题,并检查相应的变量设置的是否正确。文章来源地址https://www.toymoban.com/news/detail-820027.html

到了这里,关于8. UE5 RPG创建UI(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 6. UE5 RPG AttributeSet的设置

    AttributeSet 负责定义和持有属性并且管理属性的变化。开发者可以子类化UAttributeSet。在OwnerActor的构造方法中创建的AttributeSet将会自动注册到ASC。这一步必须在C++中完成。 Attributes 是由 FGameplayAttributeData定义的浮点值。 Attributes能够表达从角色的生命值到角色等级到药瓶的价格等

    2024年01月18日
    浏览(26)
  • (UE4/UE5)Unreal Engine中使用HLOD

    本教程将详细介绍在Unreal Engine的不同版本(4.20-4.24、4.25-4.26、5.2)中如何使用Hierarchical Level of Detail (HLOD)。注意,每个版本中使用HLOD的方法可能会有所不同。 步骤一:预先生成LOD打开UE4.21,点击Content Browser(内容浏览器)中你想要生成LOD的静态网格。 步骤二:在静态网格编

    2024年02月10日
    浏览(34)
  • 7. UE5 RPG修改GAS的Attribute的值

    前面几节文章介绍了如何在角色身上添加AbilitySystemComponent和AttributeSet。并且还实现了给AttributeSet添加自定义属性。接下来,实现一下如何去修改角色身上的Attribute的值。 首先创建一个继承于Actor的c++类,actor是可以放置到场景中的基类。 创建一个静态模型组件,用来显示当前

    2024年01月18日
    浏览(30)
  • 14. UE5 RPG使用曲线表格设置回复血量值

    之前的文章中,我使用的都是固定的数值来设置血量回复或者蓝量回复,在这篇文章里面,介绍一下使用曲线表格。通过曲线表格我们可以设置多个数值,然后通过去通过修改索引对应的数值去修改回复的血量或者蓝量。 首先创建一个曲线表格,在其它里面找到 然后可以根

    2024年02月21日
    浏览(31)
  • UE5【UMG】 - Simple Menu UI v3 学习笔记

    案例地址:https://www.unrealengine.com/marketplace/zh-CN/product/simple-menu-ui 这个Demo简单,基本结构都有,可以用来入手学习 1) 先查看 Project-MapsModes,找到默认启动Map、GameMode与GameInstance;此外,Input设置也需要看下。 2)当UE5程序启动时,默认启动GameInstance、GameMode与默认Map; 接着,

    2024年02月06日
    浏览(35)
  • UE5 虚幻引擎中UI、HUD和UMG的区别与联系

    🙋‍♂️ 作者:海码007 📜 专栏:UE虚幻引擎专栏 💥 标题:UE5 虚幻引擎中UI、HUD和UMG的区别与联系 ❣️ 寄语:加油,一次专注一件事! 🎈 最后: 文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。 💥在学习虚幻引擎

    2024年01月20日
    浏览(30)
  • Unreal Engine(UE5)中构建离线地图服务

    1.     首先需要用到3个软件,Unreal Engine,gis office 和 bigemap离线服务器 Unreal Engine下载地址:点击前往下载页面 Gis office下载地址:点击前往下载页面 Bigemap离线服务器 下载地址: 点击前往下载页面 Unreal Engine用于数字孪生项目开发,gis office是一款地理信息软件,可用于获取

    2024年01月18日
    浏览(34)
  • UE4,UE5虚幻引擎,怎么在蓝图中获取FPS帧速率,显示在UMG(UI)上

    前言:在UE中可以使用命令行比如stat fps显示帧率,但只是显示在界面,假设我们要在蓝图中获取FPS帧率,并且显示在我们创建的UMG控件蓝图。这种stat fps命令行的形式就不行了,因为它只会固定显示在右上角的位置。 1、在Tick中获取DeltaSeconds,用1除InDeltaTime,得到帧速率。

    2024年02月11日
    浏览(36)
  • 【UE5 Cesium】15-Cesium for Unreal 加载本地影像和地形

    目录 一、加载全球无高度地形 二、加载区域DEM 三、加载离线地图影像 1. 先去如下网址下载全球无高度地形:Using a global terrain layer without height detail - #9 by RidhwanAziz - Cesium for Unreal - Cesium Community 下载后如下: 解压后可以看到是一个.tif格式的文件 2. 打开CesiumLab,需要将tif转为

    2024年02月07日
    浏览(30)
  • 【UE5】蓝图UI控件菜单锚(Menu Anchor)的使用与浮动详情窗口的制作

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 最近在做毕设,一直在苦恼要怎么精准地把浮动的详情窗口放在图标的一边,就比如下图中的效果 本来也有想过直接获取控件在屏幕上的位置来计算浮动窗口的生成位置,但神奇的是蓝图似乎没有这个

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包