断断续续学习和使用Unreal Engine已经近一年时间了。保管库里也已经免费蹭了100+个资源了。。。没有怎么使用,感觉非常对不起这些宝贵的素材。于是,打算开始仔细学习一个官方游戏工程,看Epic是如何组织游戏和资源,希望能熟练地使用UE,并快速地Prototyping,这样才能花更多的时间在设计上(原型制作应该算在设计游戏过程中,而不是游戏制作)。之前虽然用纯蓝图做了一个简单IO游戏的原型,基本掌握了虚幻的Gameplay Framwork、蓝图和蓝图网络编程,但完成工程后回看,自己的蓝图编程简直是个灾难。(这是我编程生涯中一直存在的问题。阅读《GameProgrammingPattern》,学习面向数据编程和ECS,都对我帮助很大,但现在的能力离我的期望还较远。我想,只能通过多阅读游戏项目和自己动手做原型才能加深我对游戏的理解。对原型制作有见解的看官,请不吝赐教!)
对于官方项目,我选择了ActionRPG。因为它资料最齐全(文档+视频)。话虽如此,其实资料也只是解析了其中的一部分。除此之外,ActionRPG中使用的Gameplay Ability System,我也很感兴趣。整个项目只有近30个.h文件。而且之前对Unreal C++编程也有一定的基础了,只要坚持应该可以顺利啃下来。
现在Epic已经全面更新了中文文档,大家可以去官网查看:
https://docs.unrealengine.com/zh-CN/Resources/SampleGames/ARPG/index.html
项目工程可以在Epic虚幻商城下载。
在这个系列中我会逐一分析每个代码文件,蓝图。动画、材质、粒子等,我应该也都会涉及。
希望到这个系列的结尾,我能从零开始构建一个自己的“ActionRPG”项目(当然,素材还是用别人的)。
PS:【争取每日一更】
Contents
1) Code
注:代码部分会有大量的代码和注释,视野可能会更局部,各部分之间的关联,会在其他部分说明。
Part I: Modules
一、TargetRule , ModuleRule
二、ActionRPGLoadingScreen.h/cpp & Slate
Part II: Gameplay Ability System[GAS] ( ActionRPG/Abilities)
三、RPGAbilitySystemComponent.h/cpp & AbilitySystemComponent
四、RPGGameplayAbility.h/cpp & GameplayAbility
五、RPGAttributeSet.h/cpp & AttributeSet
六、RPGTargetType.h/cpp & Targeting
七、RPGAbilityTask_PlayMontageAndWaitForEvent & AbilityTask
八、RPGDamageExecution.h/cpp & GameplayEffectExecutionCalculation
十五、RPGCharacterBase (GAS related)
代码部分的GAS就到这了。GAS部分还有很多内容,到蓝图的时候会补完。我们先把GAS暂时搁置,将目光转向道具和背包。(也能检验一段时间后回看自己所写是否简明。)
Part III: Item & Inventory ( ActionRPG/Items , InventoryInterface , AssetManager etc.)
应该要去思考:
- 背包系统的功能
- 如何定义背包的数据
- 明确待解决的问题(为解决问题而努力,而不是还原人脑中的抽象模型【OOD的思维误区】)
九、RPGItem.h/cpp & PrimaryDataAsset
十、RPGAssetManager.h/cpp & AssetManager
十一、RPGType.h
十二、RPGInventoryInterface.h & Interface
十三、RPGPlayerControllerBase.h/cpp & InventorySystem
十四、RPGSaveGame & SaveGame
还剩下RPGGameInstanceBase
和RPGBlueprintLibrary
,就不细讲了。其中RPGGameInstanceBase
负责游戏数据的存储和加载。RPGBlueprintLibrary
则是提供静态工具函数供蓝图调用。
2) Code Design
这一部分,我们再次回看代码,思考其结构。
十六、背包系统设计(尝试分析的一些思考)
在GAS这块,项目中RPGAbilityType.h
和RPGTargetType.h
自定义了些新的数据,打算在看完蓝图部分后再倒回来分析。
3) Blueprint
Part I : GAS
分析几个具体的技能实现:
十七、使用生命药水回复生命值(GA_PotionHealth)
十八、玩家战斧攻击(GA_PlayerAxeMelee)
十九、火球术(GA_PlayerSkillFireball)