本文系筆者的實習生分享會內容預備兼GameplayAbilities的初學者教程。
本文適合已有四十天UE4開發經驗的初學者。
參考資料:https://wiki.unrealengine.com/GameplayAbilities_and_You#Introduction
簡介(用有道詞典機器翻譯得到的簡介,原文是上面的連接):
那么,什么是GameplayAbility ?
基本上,他們就像你在Dota或等價游戲中所擁有的能力。你可以投一個火球,這個火球擊中一個玩家,爆炸(造成一定數量的傷害),並將爆炸范圍內的每一個人都設置為火災(隨時間而造成的傷害)。與此同時,投火球的球員失去一些法力,並被冷卻。
你可以使用Epic的GameplayAbility插件來完成所有這些事情。這個模塊很難讓你的頭腦清醒,但是一旦你知道它們有多么強大,以及如何恰當地利用它們,它們就能讓你的生活變得更加輕松。
但是為什么要在自己的系統上使用這個呢?
如果你的游戲需要一種強大的技能、淺黃色和屬性系統,可以很容易擴展和瘋狂的復制,那么游戲能力就會派上用場。這對於在多玩家RPG上使用很多技能/類或者甚至是MOBA的人來說是很神奇的,但是你可以在任何你想要的游戲中使用這個系統。主要的問題是它不是最容易理解的,相當大的,可能會在你的道路上有一點點距離,你離這個多玩家的RPG理想太遠了,所以不是每一場游戲都能得到相同的里程。
那聽起來像是個夢,但我在哪兒能得到它呢?
嗯,首先,GameplayAbilities代碼模塊,用於被整合到UE4的來源,但由於當前版本(4.15,也就是說,來自未來的人)被移動到一個單獨的插件,交付與虛幻引擎,所以它可能不帶走空間在你的游戲如果不使用系統。這個系統實際上並不是一個內置的引擎功能,但實際上,它已經被從Paragon和Fortnite的開發者那里得到了,以供第三方享用。不幸的是,由於這些獨特的環境,整個模塊是相當混亂的,糟糕的(閱讀:幾乎沒有,你最好的選擇是代碼注釋,即使是只有一半的時間)文檔記錄,很少更新和清理。
也不是100%的藍圖,部分,但不是全部,由於很多系統濫用很多引擎詭計和魔法以及他們所做的工作,如果你從來沒有接觸過c++ UE4的上下文中,您可能想要回頭,也許做一個教程,因為本教程將讓糟糕的第一次學習體驗。
換句話說,這是一種完全的“臀部疼痛”的感覺,讓你的腦袋到處都是,但這就是本指南來幫助你的地方。Epic開發者戴夫·拉蒂(Dave Ratti)有一個例子,GitHub項目通過一些基本的例子來幫助你開始,但忽略了細線,並進行了廣泛的筆觸。然而,這個項目本身是相當隱蔽的,而且(當時)並沒有真正出現在谷歌或任何真正的關於游戲功能插件的搜索中,所以它沒有像一個全面的指南那樣有幫助。而且,現在游戲的標簽已經被默認地集成到編輯器中(一個系統的游戲能力本身在每個角落都可以使用,扮演游戲能力的骨干),設置從來沒有那么容易!
盡管如此,我們還是開始吧。
上述Github項目其實是沒有的,鏈接已失效。
第一步:
第二步:
第三步:
第四步:它會提示重啟,重啟即可。同時請注意VS方面需要build:
說明:我做對了嗎?如果你看到了下面這兩個東西,就說明操作正確。
第五步:
選擇上面的GameplayAbilityBP藍圖,然后
第六步:打開剛剛新建的GA(GameplayAbility)藍圖,然后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。
原創聲明:本文系小江村兒的文傑原創,若有參考的資料必在本文中給出。
2017年7月12日14:51:52