Unreal Engine 4(虛幻UE4) GameplayAbilities插件入門教程(一)


本文系筆者的實習生分享會內容預備兼GameplayAbilities初學者教程。

 

本文適合已有四十天UE4開發經驗的初學者。

參考資料:https://wiki.unrealengine.com/GameplayAbilities_and_You#Introduction

 

簡介(用有道詞典機器翻譯得到的簡介,原文是上面的連接):

那么,什么是GameplayAbility ?

基本上,他們就像你在Dota或等價游戲中所擁有的能力。你可以投一個火球,這個火球擊中一個玩家,爆炸(造成一定數量的傷害),並將爆炸范圍內的每一個人都設置為火災(隨時間而造成的傷害)。與此同時,投火球的球員失去一些法力,並被冷卻。

你可以使用EpicGameplayAbility插件來完成所有這些事情。這個模塊很難讓你的頭腦清醒,但是一旦你知道它們有多么強大,以及如何恰當地利用它們,它們就能讓你的生活變得更加輕松。

但是為什么要在自己的系統上使用這個呢?

如果你的游戲需要一種強大的技能、淺黃色和屬性系統,可以很容易擴展和瘋狂的復制,那么游戲能力就會派上用場。這對於在多玩家RPG上使用很多技能/類或者甚至是MOBA的人來說是很神奇的,但是你可以在任何你想要的游戲中使用這個系統。主要的問題是它不是最容易理解的,相當大的,可能會在你的道路上有一點點距離,你離這個多玩家的RPG理想太遠了,所以不是每一場游戲都能得到相同的里程。

那聽起來像是個夢,但我在哪兒能得到它呢?

,首先,GameplayAbilities代碼模塊,用於被整合到UE4的來源,但由於當前版本(4.15,也就是說,來自未來的人)被移動到一個單獨的插件,交付與虛幻引擎,所以它可能不帶走空間在你的游戲如果不使用系統。這個系統實際上並不是一個內置的引擎功能,但實際上,它已經被從ParagonFortnite的開發者那里得到了,以供第三方享用。不幸的是,由於這些獨特的環境,整個模塊是相當混亂的,糟糕的(閱讀:幾乎沒有,你最好的選擇是代碼注釋,即使是只有一半的時間)文檔記錄,很少更新和清理。

也不是100%的藍圖,部分,但不是全部,由於很多系統濫用很多引擎詭計和魔法以及他們所做的工作,如果你從來沒有接觸過c++ UE4的上下文中,您可能想要回頭,也許做一個教程,因為本教程將讓糟糕的第一次學習體驗。

換句話說,這是一種完全的臀部疼痛的感覺,讓你的腦袋到處都是,但這就是本指南來幫助你的地方。Epic開發者戴夫·拉蒂(Dave Ratti)有一個例子,GitHub項目通過一些基本的例子來幫助你開始,但忽略了細線,並進行了廣泛的筆觸。然而,這個項目本身是相當隱蔽的,而且(當時)並沒有真正出現在谷歌或任何真正的關於游戲功能插件的搜索中,所以它沒有像一個全面的指南那樣有幫助。而且,現在游戲的標簽已經被默認地集成到編輯器中(一個系統的游戲能力本身在每個角落都可以使用,扮演游戲能力的骨干),設置從來沒有那么容易!

盡管如此,我們還是開始吧。

 

上述Github項目其實是沒有的,鏈接已失效。

 

第一步:

第二步:

第三步:

第四步:它會提示重啟,重啟即可。同時請注意VS方面需要build

說明:我做對了嗎?如果你看到了下面這兩個東西,就說明操作正確。

第五步:

選擇上面的GameplayAbilityBP藍圖,然后

第六步:打開剛剛新建的GAGameplayAbility)藍圖,然后helloWorld一下:

編譯保存(如果你連如何新建節點和編譯保存都不知道,請先去自學更加基礎的入門內容)。

 

第七步:這一步是為了注冊我們用到的插件。

VS雙擊這個文件:

修改代碼:

▼代碼開始

        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay"
            //原本代碼中只有這一行
            , "GameplayAbilities"
            //這一行是新增的,表示注冊GA插件
        });

▲代碼結束

第八步:

打開模板中自帶的Character文件:

 

第九步:

修改代碼如:

#include "CoreMinimal.h"
#include "GameFramework/Character.h"

#include "AbilitySystemInterface.h"
//改動1:添加頭文件

#include "GATutCharacter.generated.h"

UCLASS(config=Game)
class AGATutCharacter : public ACharacter
    ,public IAbilitySystemInterface
    //改動2:繼承此接口
{
    GENERATED_BODY()

    /** Camera boom positioning the camera behind the character */
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
    class USpringArmComponent* CameraBoom;

    /** Follow camera */
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
    class UCameraComponent* FollowCamera;

    //改動3:添加一個Abi組件
    //BlueprintReadOnly的內容其實是不允許寫在private區中的,如果寫在private區且要藍圖可讀,那么需要寫上meta=(AllowPrivateAccess="true")
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = GameplayAbilities, meta = (AllowPrivateAccess = "true"))
        class UAbilitySystemComponent* AbilitySystem;

由於代碼過長,所以中間的就不寫了,除了上面三處改動以外,還需要再public域中加入:

 

//改動4:添加一個返回此組件的方法

UAbilitySystemComponent* GetAbilitySystemComponent()const override;

說明:VS里面有很多爆紅,不要管!

 

最后一步:代碼編譯。如果編譯成功,那么本節的教程完成。目前還沒有helloWorld

 

原創聲明:本文系小江村兒的文傑原創,若有參考的資料必在本文中給出。

 

201771214:51:52

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM