前言

GameplayEffectGAS框架中的重要性不言而喻, 内容非常多,,但是本身基本上只作为一个数据载体而存在,蓝图中也无法重写和执行任何事件.

本篇梳理一下GE的常用属性和基本概念, 实战部分我们在下一篇展开

基础定义

GE是属性修改的容器, 分为如下几个类型

Duration Type GameplayCue Event When to use
Instant Execute BaseValue的立即生效的处理,GameplayTags 不会被应用到, 即使在一帧之内
Duration Add & Remove CurrentValue持续修改.可以应用GameplayTags.持续事件在GE类中指定
Infinite Add & Remove 类似Duration,但是是永久的直到手动移除(如通过ASC)

DurationInfinite模式会出现Period选项

image-20201201143832164

如果ExecutePeriodicEffectOnApplication=true,那么每隔Period秒就执行

periodic inhibition policy刷新策略,如是否覆盖

如果Tag匹配或者不匹配, GE可以临时性的关闭或者开启,这移除操作不会移除GE,只是临时的移除GE的修改效果

如果要手动的直接应用GE的修改, 可以调用

1
UAbilitySystemComponent::ActiveGameplayEffects.SetActiveGameplayEffectLevel(FActiveGameplayEffectHandle ActiveHandle, int32 NewLevel)

GE的属性设置一般建议在编辑器用蓝图编辑, 理论上可以用cpp设定参数, 但是不直观也比较麻烦


阅读全文 »

前言

前文已经大概了解了GA的大致内容,本片结合项目来详细使用一下技能.

因为技能可以是通过按键直接触发, 我们在GA中多数是播放动画来表示技能执行的, 所以我们需要一个一个方便我们GA使用的播放动画的节点

GAS中有很多已经封装好的异步节点, 很多都是非常有用的,如下图(太多无法截全)

image-20201217142941527

其中有一个PlayMontageAndWait的节点, 可以用这个来播放动画蒙太奇, 然后通过动画通知来开启攻击能力, 攻击者(或者武器)触发攻击事件, 然后触发对应的GE来达到伤害的目的

那么我们重新捋一下, 我们在GA中播放动画, 然后外面的动画通知和检测我们不管, 我们还在GA这里监听某些Tag的事件, 响应以后我们在这里应用GE效果(ActionRPG的思路),这样是不是更简单直观一点

照着这个思路我们来做一下

阅读全文 »

前言

在第一篇初始化的时候简单讲解了技能的添加和使用, 但是没有对技能GameplayAbility(GA)做详细介绍,本片开始对GA中的主要功能注意剖析

注册/移除技能

之前我们通过配置的方式自动注册起始技能, 那么我们肯定需要动态的增加或者删除技能, 为了方便使用, 封装蓝图库

阅读全文 »

前言

这一篇单独创建几个非常有用的异步节点,如UAsyncTask_ListenAttributeChanged可以实时监听任意属性的更改情况,在初期我们用于临时UMG中,方便我们查询和debug;

可以使用继承自UBlueprintAsyncActionBase的基本异步类, 也可以使用GAS框架内的UAbilityTask来制作

image-20201214155057270

异步事件:属性监听

这个节点相对比较简单, 原理就是通过ASC中的GetGameplayAttributeValueChangeDelegate()绑定对应属性的代理,然后简单的派发异步节点中的代理, 这是GASD项目采用的方案,

阅读全文 »

前言

前一篇已经完成了初始化,角色可以在服务端和客户端正确触发技能,那么这一篇我们开始研究如何声明我们GAS框架内的属性

暗黑3属性图镇楼

image-20201217111712682
阅读全文 »

前言

引用官网的一段话介绍一下GAS系统

Gameplay技能系统 是一个高度灵活的框架,可用于构建你可能会在RPG或MOBA游戏中看到的技能和属性类型。你可以构建可供游戏中的角色使用的动作或被动技能,使这些动作导致各种属性累积或损耗的状态效果,实现约束这些动作使用的”冷却”计时器或资源消耗,更改技能等级及每个技能等级的技能效果,激活粒子或音效,等等。简单来说,此系统可帮助你在任何现代RPG或MOBA游戏中设计、实现及高效关联各种游戏中的技能,既包括跳跃等简单技能,也包括你喜欢的角色的复杂技能集。

此篇为GameplayAbilitySystem入门文档的开篇,

此系列文档会从零开始记录用UE4 GAS插件为基础, 尝试开发一个简单的ARPG游戏的案例

阅读全文 »

前言

模型的边缘高光应该是老生常谈的话题了, 不过还是有必要详细记录一下各种主流的两个实现方案, 同样的, 这个问题也经常在TA或者客户端面试中被问到

后期方案

先看效果动图

录制_2020_12_15_16_03_11_453

阅读全文 »

前言

对于很多情况下, 我们都希望我们可以在游戏运行状态下自定义UE4的按键映射, 目前的UE已经支持多数平台的按键在蓝图中实时的更改按键设置, 直接保存到 EngineInput.ini文件

写了一个案例插件,提供了几个解决方案的Demo和几个方便蓝图使用的库函数

RuntimeInputMapping

API

我们项目设置里的Input栏的内容其实是封装在一个UObjectUInputSettings中, 他其实就是一个配置类, 有一个静态方法可以直接获取该类

1
static UInputSettings* GetInputSettings();
阅读全文 »

使用静态博客有些日子了, 前阵子博客文件被手残折腾没了(还好文章有备份), 重新部署一下有点生疏了.

于是还是决定写一篇部署博客的文章重新记录一下部署流程

准备工作

  • 手动百度搜索node.js下载并安装
  • 下载并安装git
  • 注册github账户

关于git和github的使用在另外一篇博客里有详细说明,点击这里

  • 创建你的用户名.github.io的仓库,此仓库是用来保存博客文件的
    • 虽然非绝对必要但是强烈将以注册一个自己的域名,如阿里云;否则可能导致访问速度过慢或者无效
    • 在setting中的GitHubPages栏填写自己的域名

image-20201204094746007

安装Hexo

GitBash模式下输入安装hexo

1
$ npm install -g hexo

选择一个博客文件夹,输入如下代码初始化hexo环境

1
$ hexo init

初始化后在文件内会生成若干文件和文件夹,大致如下

image-20201204095336780

阅读全文 »

image-20201203141501722

image-20201203141518954

image-20201203141549721

需要打开源码版引擎,找到目录Engine\Extras\VisualStudioSnippets,里面有很多后缀是snippet的文件. 或者点击这里下载

如果是非源码版需要使用代码片段可以把这个文件夹复制对应的目录

  • VS导入UE代码片段

在VS中打开Tools(工具)-Code Snippets Manager(代码片段管理器)

image-20201203141902771

点击上图中的导入,找到之前所有snippet文件选择导入

然后在VS中按下组合键Ctrl+K然后Ctrl+X就可以选择所有代码片段了