Skip to main content

基于组件的逻辑层框架

image-20221012162859594

LGameInstance与脚本上下文

在编辑器中PIE或者独立运行游戏时,组件框架会自动创建LGameInstance,每一个LGameInstance会创建一个脚本上下文。脚本上下文用于管理和隔离多个游戏实例、编辑器之间的全局对象和脚本路径、协程。项目可以继承引擎的LGameInstance,并override LGameInstance:: PostInitScriptContext方法,在这个方法内设置全局变量。编辑器在加载了项目的DLL后,可以在项目设置的Game Instance Class设置中,设置使用哪个类型的LGameInstance(默认不设置的情况下,使用内置的LGameInstance)。

image-20221012162912618

LGameSubsystem

LGameSubsystem是一类生命周期与LGameInstance等长的子系统。项目可以继承自LGameSubsystem,组件框架会在适当的时机创建和销毁项目继承的LGameSubsystem。

my_game_sub_system.h

#ifndef _MY_GAME_SUB_SYSTEM_H
#define _MY_GAME_SUB_SYSTEM_H

#include "fx_component/subsystem/game_subsystem.h"

class MyGameSubSystem : public LGameSubsystem
{
DECLARE_LCLASS(MyGameSubSystem, LGameSubsystem, COMPILED_IN_FLAGS(0))

public:
virtual void Update(float seconds) override;
virtual bool CanUpdate() const override { return true; }
virtual bool CanUpdateInEditor() const override { return true; }
};
#endif//_MY_GAME_SUB_SYSTEM_H

my_game_sub_system.cpp

#include "my_game_sub_system.h"
#include "flexi/object/class.h"
#include "flexi/public/module.h"

IMPLEMENT_LCLASS(MyGameSubSystem)

DECLARE_ENTITY("", MyGameSubSystem, LGameSubsystem)

void MyGameSubSystem::Update(float seconds)
{

}

LScene

LScene是LLevel的容器,是全局效果和网络同步机制的载体。LScene中会有一个默认的LLevel对象,也可以通过流式关卡的机制加载更多的LLevel。

LSceneSubsystem

LSceneSubsystem是一类生命周期与LScene等长的子系统。项目可以继承自LSceneSubsystem,组件框架会在适当的时机创建和销毁项目继承的LSceneSubsystem。

LLevel

LLevel对象管理了众多的LGameObject,以及负责驱动LGameObject以及LComponent对象的更新。

LGameObject

LGameObject是LComponent集合,可以通过聚合多个LComponent实现各个不同的功能。

LComponent

LComponent是最基本的功能复用与组合的载体。

一些常用的组件:

名称描述
LTransformComponent变换组件
LModelComponent静态模型组件
LSkeletalMeshComponent骨骼动画组件
LSkinComponent蒙皮组件
LParticleComponent粒子组件
LTerrainComponent地形组件
LBrushComponent刷子组件
LBillboardComponent公告板组件
LArrowComponent箭头组件
LDirectLightComponent方向光组件
LDrawFrustumComponent绘制视锥体组件
LSpringArmComponent摇臂组件
LMovememtComponent移动组件
LVoxelTerrainComponent体素地形组件
LScriptComponent脚本组件

LPawn

LPawn是基本的可操作对象类,提供了基本的对象操作的方法、AI、行为树等。项目可以创建该对象或其派生类对象对其进行移动等行为操作。

LCharacter

LCharacter是基本的角色对象类,该对象会默认提供胶囊体、角色移动组件、骨架网格模型组件和箭头组件。项目可以创建该对象或其派生类对象作为游戏角色进行控制。

LController

LController是控制器类,用于对角色和可操作对象的控制。

LGameMode

LGameMode对象设置了游戏的基本规则,一个Level对应一个LGameMode。它通过设置不同的GameState,PlayerController,PlayerState,DefaultPawn,Spectator来构成不同的游戏规则。重载LGameMode基类或者使用预制件可以自定义LGameMode。通过设置LSceneSettings的“GameModeOverride”属性为Level设置不同的GameMode。

编辑器中设置如图:

image-20221012162941787

LPlayer

LPlayer是玩家类,项目使用该类创建游戏玩家,并可以通过玩家对象获取玩家控制器,对玩家角色进行控制。

LPlayerStart

LPlayerStart是玩家起始对象类,用于设定玩家的起始标记。