RPG7.準備GAS的工作

1.啟動項目,為項目添加gameplayability插件

2.添加abilitysystemcomponent的c++類

3.添加attributeset的c++類

4.往build.cs內添加模塊

5.進入CharacterBase內,添加gameplayasystem和attributbeset,覆寫PossessedBy()和GetAbilitysystemcomponent()

class ARPG_GRIVITY_API ACharacterBase : public ACharacter, public IAbilitySystemInterface
{GENERATED_BODY()public:ACharacterBase();//創建能力組件的獲取方法UXMBAbilitySystemComponent* GetXMBAbilitySystemComponent() const {return  XMBAbilitySystemComponent;}//創建屬性集的獲取方法UXMBAttributeSet* GetXMBAttributeSet() const {return  XMBAttributeSet;}//Begin IAbilitySystemInterface Interfacevirtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;//End IAbilitySystemInterface Interfaceprotected://創建能力組件UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "AbilitySystem")UXMBAbilitySystemComponent* XMBAbilitySystemComponent;//創建屬性集UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "AbilitySystem")UXMBAttributeSet* XMBAttributeSet;//Begin Apawn Interfacevirtual void PossessedBy(AController* NewController) override;//End Apawn Interface
};

6.在構造函數里創建,覆寫函數體內


#include "Character/CharacterBase.h"
#include "AbilitySystem/XMBAttributeSet.h"
#include "AbilitySystem/XMBAbilitySystemComponent.h"ACharacterBase::ACharacterBase()
{PrimaryActorTick.bCanEverTick = false;//初始禁用 Tick,適合需要手動控制更新的場景。PrimaryActorTick.bStartWithTickEnabled = false;//禁用貼花接收,適用于性能優化或特定視覺需求。GetMesh()->bReceivesDecals = false;XMBAbilitySystemComponent = CreateDefaultSubobject<UXMBAbilitySystemComponent>(TEXT("XMBAbilitySystemComponent"));XMBAttributeSet = CreateDefaultSubobject<UXMBAttributeSet>(TEXT("XMBAttributeSet"));
}UAbilitySystemComponent* ACharacterBase::GetAbilitySystemComponent() const
{return GetXMBAbilitySystemComponent();
}void ACharacterBase::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);if (XMBAbilitySystemComponent){XMBAbilitySystemComponent->InitAbilityActorInfo(this, this);}}

7.進入到玩家控制的角色內(XMBCharacter),對PossessedBy覆寫

//Begin Apawn Interfacevirtual void PossessedBy(AController* NewController) override;//End Apawn Interface

void AXMBCharacter::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);if (XMBAbilitySystemComponent && XMBAttributeSet){GEngine->AddOnScreenDebugMessage(-1,5.f, FColor::Red, FString::Printf(TEXT("Owner: %s, Avatar : %s"),*XMBAbilitySystemComponent->GetOwnerActor()->GetActorLabel(),*XMBAbilitySystemComponent->GetAvatarActor()->GetActorLabel()));}
}

8.啟動,能從日志里看到信息

9.我們需要給AbilitySystemComponent賦予Ability,當玩家嘗試激活Ability時,實際上是從ASC中激活能力。對于激活的這一部分,我們可以自定義Ability的激活方式。

繼續創建一個GameplayAbility的c++類,然后在其內創建一個激活策略的枚舉,覆寫兩個函數

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Abilities/GameplayAbility.h"
#include "XMBGameplayAbility.generated.h"//創建一個激活能力的策略枚舉
UENUM()
enum class EXMBAbilityActivationPolicy : uint8
{OnTriggered,OnGiven
};
/*** */
UCLASS()
class ARPG_GRIVITY_API UXMBGameplayAbility : public UGameplayAbility
{GENERATED_BODY()public:protected://設置激活策略UPROPERTY(EditDefaultsOnly, Category = "XMBAbility")EXMBAbilityActivationPolicy AbilityActivationPolicy = EXMBAbilityActivationPolicy::OnTriggered;//~ Begin UGameplayAbility Interfacevirtual void OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) override;virtual void EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override;//~ End UGameplayAbility Interface};
// Fill out your copyright notice in the Description page of Project Settings.#include "AbilitySystem/Abilities/XMBGameplayAbility.h"#include "AbilitySystem/XMBAbilitySystemComponent.h"//在Ability被分配給AbilitySystemComponent后立即調用
void UXMBGameplayAbility::OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec)
{Super::OnGiveAbility(ActorInfo, Spec);if (AbilityActivationPolicy == EXMBAbilityActivationPolicy::OnGiven){if (ActorInfo && !Spec.IsActive()){//Spec.Handle是FGameplayAbilitySpec對象的句柄,表示一個具體的能力實例ActorInfo->AbilitySystemComponent->TryActivateAbility(Spec.Handle);}}
}void UXMBGameplayAbility::EndAbility(const FGameplayAbilitySpecHandle Handle,const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo,bool bReplicateEndAbility, bool bWasCancelled)
{Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);if (AbilityActivationPolicy == EXMBAbilityActivationPolicy::OnGiven){if (ActorInfo){//Handle是FGameplayAbilitySpec對象的句柄,表示要清除的能力實例。ActorInfo->AbilitySystemComponent->ClearAbility(Handle);}}
}

10.啟動引擎,右鍵即可創建一個剛才自己創建的gameplayability類,

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用gitea發布軟件包

1、新建hello工程 &#xff08;1&#xff09;HelloApplication.java package cn.ac.trimps.sv;import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplicati…

從請求到響應:初探spring web

引入&#xff1a; 首先小編想分享下一些開發小知識 2000年——手寫servlet/JSP時代 在這個階段中&#xff0c;那時候寫后端代碼&#xff0c;可謂是個麻煩事。 畢竟什么都要自己干 發來的請求都要寫extends HttpServlet的類&#xff0c;手動在web.xml配置 <servlet>…

Redis從入門到實戰實戰篇2

面試重點&#xff1a;本篇包含悲觀鎖&#xff0c;樂觀鎖&#xff0c;多線程以及分布式鎖的知識 目錄 3.優惠卷秒殺 3.1 -全局唯一ID 3.2 -Redis實現全局唯一Id 3.3 添加優惠卷 3.4 實現秒殺下單 3.5 庫存超賣問題分析 3.6 樂觀鎖解決超賣問題 3.7 優惠券秒殺-一人一單 …

LabVIEW實驗室項目中使用類模塊與仿真

在 LabVIEW 程序開發過程中&#xff0c;借鑒面向對象的類思想進行模塊化架構設計&#xff0c;并結合仿真功能&#xff0c;能夠高效應對不同場景的開發需求。 ? 以實驗室場景為例&#xff0c;LabVIEW 開發常面臨設備種類繁多、調試周期漫長&#xff0c;且硬件難以一次性到位的情…

ES6入門---第二單元 模塊三:對象新增、

一&#xff1a;對象簡潔語法&#xff1a; 1、變量簡潔 <script>let name Strive;let age 18;let json {name, //name:name,age //age:age};console.log(json);</script> 2、函數簡潔 let json {name, //name:name,age, //age:age/* showA:functi…

Python創意:AI圖像生成——用代碼繪制未來藝術

當代碼邂逅藝術:AI圖像生成的革命 在數字藝術領域,一場由Python和AI技術引領的革命正在悄然發生。無需專業繪畫技巧,僅憑幾行代碼,普通人也能創造出令人驚嘆的藝術作品。AI圖像生成技術打破了藝術創作的門檻,讓想象力成為唯一的限制。 核心技術方案 1. 技術架構 我們采…

一、Shell 腳本基礎

一、Shell 簡介 1.Shell 的定義與作用 Shell&#xff0c;通常被稱為命令行解釋器 (Command Line Interpreter)&#xff0c;是用戶 &#x1f464; 與 Linux/Unix 操作系統內核進行交互 ?? 的“橋梁” &#x1f309;。它扮演著翻譯官 &#x1f5e3;? 的角色&#xff1a; 接…

青少年編程與數學 02-018 C++數據結構與算法 21課題、機器學習與人工智能算法

青少年編程與數學 02-018 C數據結構與算法 21課題、機器學習與人工智能算法 一、線性回歸算法二、邏輯回歸算法三、K近鄰算法&#xff08;K-Nearest Neighbors, KNN&#xff09;四、決策樹算法五、支持向量機&#xff08;SVM&#xff09;六、神經網絡算法七、聚類算法八、降維算…

【數據結構】——單鏈表練習(1)

一、移除鏈表元素 題目鏈接&#xff1a; 移除鏈表元素 那么根據題目的要求我們大致明白這道題要做什么&#xff0c;就是將一個鏈表中&#xff0c;和指定的值相等的元素的節點刪除&#xff0c;然后返回刪除后的新的鏈表&#xff0c;然后題目給我們傳入的參數是鏈表的頭節點和指…

AI大模型基礎設施:主流的幾款開源AI大語言模型的本地部署成本

以下是對目前主流開源AI大語言模型&#xff08;如DeepSeek R1、LLaMA系列、Qwen等&#xff09;本地部署成本的詳細分析&#xff0c;涵蓋計算機硬件、顯卡等成本&#xff0c;價格以美元計算。成本估算基于模型參數規模、硬件需求&#xff08;GPU、CPU、RAM、存儲等&#xff09;以…

AI生成視頻檢測方法及其相關研究

目錄標題 【1】AI-Generated Video Detection via Spatio-Temporal Anomaly Learning【2】DeCoF: Generated Video Detection via Frame Consistency【2.1】Spatiotemporal Convolutional Neural Networks (STCNN) rely on spatial artifacts【2.2】Capturing Universal Spatia…

仿騰訊會議——服務器注釋

目錄 1、修改協議 2、修改登錄請求結構體 3、修改登錄回復結構體 4、修改注冊請求結構體 5、修改發送登錄請求函數 6、實現發送注冊請求函數 7、修改mysql存儲數據格式 8、自己完成部分 1、修改協議 2、修改登錄請求結構體 3、修改登錄回復結構體 4、修改注冊請求結構體…

list的迭代器詳講

1.list的迭代器就是封裝了節點指針的類 2.迭代器失效 迭代器失效即迭代器封裝的節點指針無效 。因為 list 的底層結構為帶頭結點的雙向循環鏈表 &#xff0c;因此 在 list 中進行插入時是不會導致 list 的迭代 器失效的&#xff0c;只有在刪除時才會失效&#xff0c;并且失效的…

deepSeek論文寫作提示詞指令大全(覆蓋選題、寫作、潤色到投稿全流程)

一、選題與框架設計 1、跨學科選題突破 指令:"結合[領域A]與[領域B]的前沿理論,生成5個交叉創新性論文選題,要求每個選題包含可行性評估。"(支持跨學科研究創新) 示例:"在人工智能與教育心理學領域生成選題,分析理論適用性與資源獲取難度。" 2、…

win11安裝WSL(創建用戶、更改或重置密碼)

文章目錄 win11安裝WSL設置 Linux 用戶名和密碼更改或重置密碼更新和升級軟件包WSL 命令互操作性WSL 的基本命令安裝列出可用的 Linux 發行版列出已安裝的 Linux 發行版將 WSL 版本設置為 1 或 2設置默認 WSL 版本設置默認 Linux 發行版將目錄更改為主頁通過 PowerShell 或 CMD…

Vue.js 與 Ajax (vue-resource) 的深入解析

Vue.js 與 Ajax (vue-resource) 的深入解析 引言 在Web開發中,前后端的交互是不可或缺的。Ajax(異步JavaScript和XML)技術允許我們在不重新加載整個頁面的情況下,與服務器交換數據和更新部分網頁內容。Vue.js 作為一種流行的前端框架,提供了多種方式來處理Ajax請求。其中…

第十三章-PHP MySQL擴展

第十三章-PHP與MySQL 一&#xff0c;連接數據庫 1. 使用 MySQLi&#xff08;面向對象方式&#xff09; <?php // 數據庫參數 $host localhost; $username root; $password ; $database test_db;// 創建連接 $conn new mysqli($host, $username, $password, $databa…

【文獻閱讀】全球干旱地區植被突變的普遍性和驅動因素

一、研究背景 全球干旱區&#xff08;drylands&#xff09;覆蓋了陸地面積的40%以上&#xff0c;承載了全球約三分之一人口&#xff0c;是生態系統脆弱性較高的區域。這些地區對氣候變化和人類干擾尤其敏感。近年來&#xff0c;干旱區發生了大量植被突變現象&#xff0c;即生態…

【Vue3-Bug】中路由加載頁面直接顯示空白

Vue3中路由加載頁面直接顯示空白 沒有子路由 路由定義不能重復&#xff0c;請自己查看數據在main.js(或者)mina.ts入口文件中&#xff0c;需要將router的注入到vue中的執行放在&#xff0c;vue掛在元素之前 // 順序不能變 app.use(router) app.mount(#app)在App.vue中 // 在…

影樓精修-露齒笑算法解析

注意&#xff0c;為避免侵權&#xff0c;本文圖片均為AIGC生成或網絡公開數據&#xff1b; 像素蛋糕-露齒笑 在介紹本文之前&#xff0c;先說一下&#xff0c;其實露齒笑特效&#xff0c;并非像素蛋糕首創&#xff0c;早在幾年前&#xff0c;face app就率先推出了這個效果&am…