当前位置: 首页 > news >正文

做投资理财网站百度快照seo

做投资理财网站,百度快照seo,网站运营与管理实训报告,iis做网站跳转在前两篇中#xff0c;我们在C中实现了对GameplayTag的创建#xff0c;并且创建DataAsset存储数据#xff0c;按照之前的规划#xff1a; 首先我们需要通过c去实现创建GameplayTag#xff0c;这样可以在c和UE里同时获取到Tag创建一个DataAsset类#xff0c;用于设置tag对…在前两篇中我们在C中实现了对GameplayTag的创建并且创建DataAsset存储数据按照之前的规划 首先我们需要通过c去实现创建GameplayTag这样可以在c和UE里同时获取到Tag创建一个DataAsset类用于设置tag对应的属性和显示内容创建AttributeMenuWidgetController实现对应逻辑 我们将在这一篇里实现对AttributeMenuWidgetController创建可以将数据从AS里同步到UI上面。 创建AttributeMenuWidgetController 首先基于之前的创建的WidgetController的基类创建一个子类 将其命名为AttributeMenuWidgetController 覆盖一下父类的初始化属性函数和构件委托的函数我们后续将在这两个函数内实现对属性面板的属性的广播。 我们并创建了一个委托AttributeInfoDelegate这个委托设置了BlueprintAssignable修饰符那么就可以在蓝图里面作为回调绑定使用。 AttributeInfo参数只能在UE面板编辑我们在上一篇添加了对应的Tag和属性名描述作为显示内容如果需要本地化可以添加多个切换中英文等其它语种的显示。 // 版权归暮志未晚所有。#pragma once#include CoreMinimal.h #include UI/WidgetController/MyWidgetController.h #include AttributeMenuWidgetController.generated.hclass UAttributeInfo; struct FMyAttributeInfo; DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FAttibuteInfoSignature, const FMyAttributeInfo, Info);/*** */ UCLASS(BlueprintType, Blueprintable) class AURA_API UAttributeMenuWidgetController : public UMyWidgetController {GENERATED_BODY()public:virtual void BindCallbacksToDependencies() override;virtual void BroadcastInitialValues() override;UPROPERTY(BlueprintAssignable, CategoryGAS|Attributes)//设置BlueprintAssignable可以在蓝图作为委托绑定监听FAttibuteInfoSignature AttributeInfoDelegate;protected:UPROPERTY(EditDefaultsOnly)//EditDefaultsOnly只能在UE面板编辑TObjectPtrUAttributeInfo AttributeInfo; }; 这两个函数我们将在后续对其内容进行实现。 在HUD设置Controller 之前我们在HUD类设置了创建OverlayWidgetController用于进入游戏时主界面生命值和法力值的更新。 相应的我们也将实现对AttributeMenuWidgetController的添加作为AttributeMenuWidgetController的单例承载。 我们在HUD类里面创建一个承载它实例的变量并添加一个获取方法 UAttributeMenuWidgetController* GetAttributeMenuWidgetController(const FWidgetControllerParams WCParams);UPROPERTY()TObjectPtrUAttributeMenuWidgetController AttributeMenuWidgetController;UPROPERTY(EditAnywhere)TSubclassOfUAttributeMenuWidgetController AttributeMenuWidgetControllerClass; 函数的实现这里其实就是保证只实例化一次后面的都复用它即可 UAttributeMenuWidgetController* AMyHUD::GetAttributeMenuWidgetController(const FWidgetControllerParams WCParams) {if(AttributeMenuWidgetController nullptr){AttributeMenuWidgetController NewObjectUAttributeMenuWidgetController(this, AttributeMenuWidgetControllerClass);AttributeMenuWidgetController-SetWidgetControllerParams(WCParams);AttributeMenuWidgetController-BindCallbacksToDependencies(); //绑定监听数值变化}return AttributeMenuWidgetController; }编译打开UE创建一个基于AttributeMenuWidgetController类的蓝图这里创建蓝图的原因是我们需要通过蓝图去设置AttributeInfo的数据。 将我们之前创建的属性数据设置上去 接着到HUD蓝图这里将AttributeMenuWidgetControllerClass类设置上蓝图。 这样在项目运行得时候这两个Controller都会被创建出来去使用。 接下来就是需要考虑如何在UI里面去获取到Controller我们之前对OverlayWidgetController的获取是在创建UI的时候在Widget的事件里面通过蓝图设置过去的但是在属性面板内层级太多我们一层层的设置过去太过于麻烦下面我们将使用一个新的方式能够在全局蓝图里获取Controller。 创建蓝图函数库获取Controller 我们创建一个蓝图函数库可以通过静态函数在任意位置获取到对应的Controller这样可以让结构更加的清晰也更加方便。 首先打开UE创建一个新的c类这个类继承至BlueprintFunctionLibrary 设置好名称 编辑器打开创建两个静态函数分别用于获取OverlayWidgetController和AttributeMenuWidgetController BlueprintPure 为去掉在蓝图内使用时的执行接口这样我们不需要调用也可以直接从节点获取返回。 // 版权归暮志未晚所有。#pragma once#include CoreMinimal.h #include Kismet/BlueprintFunctionLibrary.h #include MyAbilitySystemBlueprintLibrary.generated.hclass UAttributeMenuWidgetController; class UOverlayWidgetController; /*** */ UCLASS() class AURA_API UMyAbilitySystemBlueprintLibrary : public UBlueprintFunctionLibrary {GENERATED_BODY()public:UFUNCTION(BlueprintPure, CategoryMyAbilitySystemLibrary|WidgetController)static UOverlayWidgetController* GetOverlayWidgetController(const UObject* WorldContextObject);UFUNCTION(BlueprintPure, CategoryMyAbilitySystemLibrary|WidgetController)static UAttributeMenuWidgetController* GetAttributeMenuWidgetController(const UObject* WorldContextObject); }; 在函数实现这里我们通过函数从世界上下文的对象获取到本地的PlayerController然后根据PlayerController获取到所需的配置项再从HUD身上的函数获取Controller。 这里比较有意思的就是通过在一个世界上下文的对象可以获取到它所处的世界内的PlayerController。 // 版权归暮志未晚所有。#include AbilitySystem/MyAbilitySystemBlueprintLibrary.h#include Kismet/GameplayStatics.h #include Player/PlayerStateBase.h #include UI/HUD/MyHUD.h #include UI/WidgetController/MyWidgetController.hUOverlayWidgetController* UMyAbilitySystemBlueprintLibrary::GetOverlayWidgetController(const UObject* WorldContextObject) {//获取到playerController 需要传入一个世界空间上下文的对象用于得到对应世界中的PC列表0为本地使用的PCif(APlayerController* PC UGameplayStatics::GetPlayerController(WorldContextObject, 0)){//从PC获取到HUD我们就可以从HUD获得对应的Controllerif(AMyHUD* HUD CastAMyHUD(PC-GetHUD())){APlayerStateBase* PS PC-GetPlayerStateAPlayerStateBase();UAbilitySystemComponent* ASC PS-GetAbilitySystemComponent();UAttributeSet* AS PS-GetAttributeSet();const FWidgetControllerParams WidgetControllerParams(PC, PS, ASC, AS);return HUD-GetOverlayWidgetController(WidgetControllerParams);}}return nullptr; }UAttributeMenuWidgetController* UMyAbilitySystemBlueprintLibrary::GetAttributeMenuWidgetController(const UObject* WorldContextObject) {//获取到playerController 需要传入一个世界空间上下文的对象用于得到对应世界中的PC列表0为本地使用的PCif(APlayerController* PC UGameplayStatics::GetPlayerController(WorldContextObject, 0)){//从PC获取到HUD我们就可以从HUD获得对应的Controllerif(AMyHUD* HUD CastAMyHUD(PC-GetHUD())){APlayerStateBase* PS PC-GetPlayerStateAPlayerStateBase();UAbilitySystemComponent* ASC PS-GetAbilitySystemComponent();UAttributeSet* AS PS-GetAttributeSet();const FWidgetControllerParams WidgetControllerParams(PC, PS, ASC, AS);return HUD-GetAttributeMenuWidgetController(WidgetControllerParams);}}return nullptr; } 然后编译我们在UE打开Overlay的UI就可以直接右键获取下面的事OverlayWidget里面的函数上面的则是静态函数 我们直接将之前设置方式修改 也能够实现之前的效果。 接着我们在WBP_AttributeMenu里面使用静态函数获取到AttributeMenuWidgetController设置 可以做一下测试打印一下Controller的名称 运行项目点击打开属性面板查看是否有名称打印。 这里有个问题我们在设置OverlayWidgetController时是在C内初始化UI属性显示的。 在函数内执行逻辑是 OverlayWidget-SetWidgetController(OverlayWidgetController); //设置用户控件的控制器层设置属性后会调用WidgetControllerSet();执行函数这个在UI里面可以 Widget会在WidgetControllerSet()执行后进行Controller设置并绑定监听。 接着就会执行OverlayWidgetController-BroadcastInitialValues();在函数内进行广播将数据广播出去实现了数据在UI上面初始显示。 但是属性面板是动态创建的所以我们需要将BroadcastInitialValues设置为蓝图可调用 然后打开WBP_AttributeMenu里面等构造完成后使用蓝图调用BroadcastInitialValues函数。 Event Construct事件是在自身和自己的子元素都创建完成后才会被调用我在子元素的Event Construct后面打印11111111在WBP_AttributeMenu里面打印Hello发现在最后打印了Hello证明我们在使用蓝图调用BroadcastInitialValues函数时子元素可以在Event Construct里面绑定监听委托即可实现初始化。 我说这么多的原因在于大家一定要了解清楚引擎的运行逻辑这样才能更好的梳理逻辑学习以及使用内置的内容。 到这里我们创建了AttributeMenuWidgetController并实现了在Widget内的任意位置获取它由于篇幅太长我将在下一篇里对AttributeMenuWidgetController内部进行实现实现数据更新直接同步到UI上面。
http://www.pierceye.com/news/164807/

相关文章:

  • 搜狗站长线上营销策划方案
  • goggle营销型网站效果网站建设的种类
  • 建设银行网站注册企业类似返利网的网站建设
  • pc端网站建设碳晶板全屋装修的利和弊
  • 网站开发层次wordpress源码之家
  • 农产品电商网站建设的总体目标阿里云域名注册入口官网
  • 义乌个人兼职做建设网站做网站月收入多少
  • 福州网站seo优化公司徐州百度运营中心
  • 做网站需要用到ps吗中国十大最强装饰公司
  • 网站建设盈利去除wordpress rss图标
  • 网站策划书的基本内容东莞工程建设交易中心网
  • 免费推广网站入口2022静态网站开发外文文献
  • 如何做服装微商城网站建设网站开发设计中的收获
  • 网站开发详细设计文档模板网站建设设计工具
  • 网站建设项目资金申请wordpress主题美容
  • 专门做财经的网站软件开发都有哪些项目
  • 湛江网站制作多少钱建网站程序工具
  • 四川省乐山市建设银行网站一级门户网站建设费用
  • 六安网站制作哪里有网站备案网站
  • 石家庄手机网站建设公司wordpress媒体库难用
  • wordpress上传完了周口seo 网站
  • 广州网站建设技术方案建设宠物网站的目的
  • 邢台网站维护网络营销推广方法及分类
  • 做网站买过域名之后门户网站建设公司报价
  • 广告网站设计公司好吗重庆在线app
  • 深圳网站建设哪家公司便宜网站一般用什么语言做
  • 网站平台建设所需开发工具成都麦卡网络做网站开发怎么样
  • 可以做网站的电脑软件济南网页设计
  • 推广网站制作网站建设代理怎么做
  • 做网站页面遇到的问题网站规划设计的步骤