引言
第一节跟练了一个简单的2D游戏案例,熟悉了一下UE cpp开发的框架和流程。这一节开始进入到3D实战项目,首先捋了一下框架:
pladmin·2024-11-03·103 次阅读
第一节跟练了一个简单的2D游戏案例,熟悉了一下UE cpp开发的框架和流程。这一节开始进入到3D实战项目,首先捋了一下框架:
游戏模式选择的是仿星琼铁道玩法,在探索模式下,控制角色在大地图中自由探索,当遇到npc时 可以对其进行攻击,从而过渡到战斗模式。在战斗模式下,创建一个独立的Actor来管理整个战斗过程(即战斗管理器BattleManager),该管理器首先需要创建场景,然后读取敌我两方队伍的战斗信息、属性,规划行动值和顺序等等。
玩家和敌人 有部分属性是重合的(速度、血量、攻击等等),但是也有一些敌人特有而玩家没有的属性,因此两者的存储数据结构也是有出入的。这里可以定义一个类来管理敌我两者的数据表。
在输入方面,同时支持键盘和鼠标进行操作,例如选择攻击人时,使用键盘是轮询方式,而鼠标是直接选中,因此也要分两个逻辑来编写。
每个角色有若干个角色动作,例如平a、大招的动作是分开的;同时不仅有敌我攻击交互,己方的人物也可以内部进行医疗、buff交互,这都属于战斗模式中所需要维护的系统。对于AI而言,他们会根据计算来判定到底要采取什么操作,以及操作对象是谁,因此也需要一个AI的avator或者agent来指挥ai的行动。
在战斗模式和探索模式之间,还有一个玩家配置阶段,在这个阶段玩家可以管理背包、查看信息,并对队伍进行详细配置。
最后是场景设计,这一块不打算放这篇文章说,后面会开UE美术的blog。
因为探索模式和战斗模式几乎可以说是两个独立的系统,因此需要分成两部分进行制作。探索模式下最基础的一些内容如下所示:
GameMode和PlayerController继承对应的基类即可,ExplorerPlayer和ExplorerEnemies都继承Character类。最后,在public文件夹下创建一个辅助库DebugHelper。
上面定义了若干个C++的类,但是为了便携使用,要对上述C++类逐个派生出对应的蓝图子类,最后将蓝图子类作为引擎真正直接使用的对象。
接下来是添加增强型输入系统:
这里记录一下输入系统的思路:
①从编辑器创建PlayerController的C++文件,叫做ALMPlayerController;在角色的Pawn类中,定义ALMPlayerController对象;
②在Pawn初始化时,将输入系统控制器模式设置为FInputModeGameOnly();
③在Pawn的SetupPlayerInputComponent函数中,给增强型输入组件 绑定输入回调函数;
④编写输入回调函数,一般是Triggered和Completed各一个回调;
⑤创建一个增强型输入上下文MappingContext,然后在Pawn的初始化函数中获取输入子系统UEnhancedInputLocalPlayerSubsystem后,为该子系统添加上述MappingContext对象。
Comments | NOTHING