这里我们来看Woopin的项目中UE基本gameplay框架的相关类:
- GameInstance
- GameState
- PlayerState
- PlayerController
MCGameInstance
空
MCGameStateBase
GameState类主要负责记录游戏的状态,同时存在于服务端和客户端。因此,与特定角色无关,游戏内通用的数据可以放在这里。
-
struct FAbilityTableRow
这个结构体定义了新的DataTable表的行结构。
-
struct FAbilityData
这个结构体存储了UI需要知道的关于Ability的数据。这里有两个properties,分别是Ability对应的类指针和图标纹理指针。
备注: CDO = Class Default Object -
AMCGameStateBase
终于到GameStateBase类了,这里主要是实现了将DataTable中的数据异步载入。(实际代码中,作者用了同步加载。。。。。。)
学到了一个字符串骚操作,利用printf动态生成字符串:
FString AMCGameStateBase::AbilityClassString = TEXT("BlueprintGeneratedClass'/Game/AbilitySystem/Blueprints/Abilities/GA_%s.GA_%s_C'"); //Name, Name
FString NewAbilityClassString = FString::Printf(*AbilityClassString, *ObjectRow->BaseName, *ObjectRow->BaseName);
备注:加载蓝图资源时,文件名要加后缀_C。关于资源加载可参考:
https://zhuanlan.zhihu.com/p/33303645
UE有一套资源管理系统,目前还没学习。
MCPlayerState
通常的RPG游戏中,一个玩家账户上可能会有多个角色,但同一时刻只能使用其中的一个角色。
-
当玩家切换角色时,委托会激活。PlayerController可以切换Pawn。
-
角色信息:角色名、等级、习得的技能、装备的技能
-
Gameplay System的AttributeSet和AbilitySystemComponent也放在了playerstate中。
MCPlayerController
在BeginPlay中,设置当前玩家使用的角色,并注册回调
BeginPlay
Controller改变角色时,需要更新角色信息。
Spawn角色并更新角色信息
UpdateCharacter
网友评论