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

 

版权声明:本文为JackSamuel原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/JackSamuel/p/7155500.html