Unreal Engine 4(虚幻UE4) GameplayAbilities插件入门教程(一)
本文系笔者的实习生分享会内容预备兼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