基于组件的逻辑层框架
LGameInstance与脚本上下文
在编辑器中PIE或者独立运行游戏时,组件框架会自动创建LGameInstance,每一个LGameInstance会创建一个脚本上下文。脚本上下文用于管理和隔离多个游戏实例、编辑器之间的全局对象和脚本路径、协程。项目可以继承引擎的LGameInstance,并override LGameInstance:: PostInitScriptContext方法,在这个方法内设置全局变量。编辑器在加载了项目的DLL后,可以在项目设置的Game Instance Class设置中,设置使用哪个类型的LGameInstance(默认不设置的情况下,使用内置的LGameInstance)。
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。
编辑器中设置如图:
LPlayer
LPlayer是玩家类,项目使用该类创建游戏玩家,并可以通过玩家对象获取玩家控制器,对玩家角色进行控制。
LPlayerStart
LPlayerStart是玩家起始对象类,用于设定玩家的起始标记。