【游戏引擎】C++自制游戏引擎 Lunar Game Engine

devtools/2024/9/24 11:09:20/

Lunar-Game Engine

仓库位置 Lunar Game Engine

Lunar GameEngie是几个渣渣业余写的基于C++的游戏引擎

相比于比较成熟的引擎,该引擎的特点如下

  • 结构,标准混乱
  • bug众多
  • 根本不能用!

最后的最后

To The Moon and Beyond!

简介

Luna Engine基于 C++ 和 Python,其中大部分核心功能是使用 C++ 编写的动态库,应用层使用Python作为业务逻辑的语言脚本,ImGui 作为UI,提供了 Vulkan 和 DirectX12 渲染后端。

编译

前置

Visual Studio: 2022

C++标准:C++ 20

Python版本:3.11

CMake版本:3.24

PyCharm:自选

拉取Git Submodule,执行build.bat

建议使用 vs2022 进行编译

Visual Studio 启动

C++ VS启动项目:app_editor

PyCharm 启动

Luna Editor支持Pycharm调试和启动,但是需要Visual Studio编译好

Pycharm 启动脚本:editor/pycharm_main.py

可选

引擎文件结构

  • assets (引擎内置资源/资源)
    • built-in/…
  • sdk (第三方库)
  • editor (编辑器代码)
  • log.txt (日志 ignored)
  • build (构建 ignored)
  • src (源码)
  • bin (build后的二进制和库 ignored)

项目结构

  • assets

工作目录

工作目录:Lunar-GameEngine/

对于资源文件,可以从引擎目录加载,也可以从项目目录加载,优先读写到项目目录

引擎架构

C++ 侧提供了引擎的Framework,除了部分功能私有的一些静态全局变量,整个引擎只拥有一个类型为LunaCore的变量sEngine

主要为库和模块,Python侧没有硬性的库概念

库 Library

项目分为 动态库,Luna Python库(导出luna模块到标准Python),启动App,Test

Luna目前分为Core/Render/Game三个动态库,后续会扩展更多库,库可以通过luna.load_library加载

模块 Module

模块是Luna细分的功能,每个加载的模块有自己的生命流程,和依赖模块。可以选择是否参与引擎的Tick,或者仅仅提供接口,比如

  • PlatformModule(平台相关接口,如IO,Window)
  • AssetModule(资源,加载管理模块)
  • EventModule(默认事件模块)
  • WindowModule(已删除,融合到PlatformModule)
  • RenderModule(渲染模块,内含渲染器和Device)
  • GameModule(游戏业务逻辑相关,如场景)
  • EditorModule(纯Python扩展的Module)

更新日志

目前提供的功能

  • Vulkan/DirectX12双device
  • Render FrameGraph和基础的PBR Pass,ShadowMap
  • 多View,多RenderScene
  • Python binding 和 doc生成
  • ImGui 及 ImGui的Python binding
  • LunaCore 以及Library,Module流程框架,支持Python侧扩展模块(EditorModule)
  • ECS系统
  • 简单的引擎+项目文件系统
  • 简单的反射和基于反射的自动序列化,反序列化
  • 简单的Python Editor框架(基于IMGUI和Editor)

2023.1 TODO

  • 新版内存生命周期管理

2022.12 Updates

  • 编辑器功能
  • 标准Python + luna.pyd库。支持Pycharm进行编写脚本,使用vcpkg管理三方库
  • 支持 Vulkan DirectX12 两个Device

Tips

编码规范

  • 文件名小写
    • xxx_xxx.cpp
    • xxx_xxx.h
    • xxx_xxx.hpp
  • 类名驼峰命名
    • class AbcDef
  • 方法驼峰命名
    • GetAAA()
    • DoBBB()
  • 变量名
    • aaBb 参数
    • mAaBb 成员
    • sAaBb 静态成员

注意

  • Luna的Editor和Game执行程序的入口是一个标准的python执行脚本文件流程,所以可以用系统的python + editor/main.py脚本启动,工作目录要设置引擎根目录
  • 不要用标准的assert(),使用LUNA_ASSERT,标准assert在Release版本下不执行,LUNA_ASSERT会log报错信息。
  • 使用luna的log
  • core模块提供了STATIC_INIT静态结构体初始化函数段功能,但是尽量不要用,函数段初始化顺序不一致。
  • include头文件请写全相对src的路径,方便重构
  • core提供了thread safe map,但是目前还是单线程
  • 反射模块主要是为了序列化和binding而写的,别的地方尽量不要用

http://www.ppmy.cn/devtools/116460.html

相关文章

【AI写代码】使用 ChatGPT 写 ila

给AI的指令: 帮我完成ila 的编写;这是变量: input [31:0] times_cnts ; input [7 :0] rtt_din ; input rtt_din_clk_p ; reg [31:0] sky_time_cnts_1; // 飞机的本地计时器 reg [31:0] sky_time_cnts_2;reg [31:0] sk…

Flowable7.0.1框架严重bug,流程跳转到指定节点导致流程中断

一、Bug描述 使用7.0.1版本的 moveActivityIdsToSingleActivityId 或 moveExecutionsToSingleActivityId实现节点跳转,程序不会报错,但是act_ru_task 没有生成新的任务,导致流程中断,这是相当严重的bug。 经过多次测试&#xff…

Debian安装mysql遇到的问题解决及yum源配置

文章目录 一、安装mysql遇到的问题解决二、Debain系统mysql8.0的安装以及远程连接三、彻底卸载软件四、Python 操作 mysql五、debian软件源source.list文件格式说明1. 第一部分2. 第二部分3. 第三部分4. 第四部分5. 关于源的混用问题6. 按需修改自己的sources.list7. 更新软件包…

推荐一款开源的Redis桌面客户端

TinyRDM 是一个现代化的、轻量级的跨平台 Redis 桌面客户端,能在 Mac、Windows 和 Linux 系统上使用。它有着现代化的设计风格,界面既简洁又清晰,操作起来方便又高效。不管是刚开始接触的新手,还是经验丰富的开发者,都…

go-admin-ui的菜单分割线设计思路和代码实现

在菜单管理添加分割线&#xff0c;类似这种&#xff1a; 思路&#xff1a;利用空间结构和数据特点来唯一区分出分割线&#xff0c;来划分业务区域 <template><div><h1>Split Line Controller</h1><ul><li v-for"route in displayedRout…

Flink系列知识之:Checkpoint原理

Flink系列知识之&#xff1a;Checkpoint原理 在介绍checkpoint的执行流程之前&#xff0c;需要先明白Flink中状态的存储机制&#xff0c;因为状态对于检查点的持续备份至关重要。 State Backends分类 下图显示了Flink中三个内置的状态存储种类。MemoryStateBackend和FsState…

【Linux】系统字符集无法修改,单独修改vim后的文件字符集

系统字符集无法修改&#xff0c;单独修改vim后的文件字符集 环境&#xff1a; 系统字符集 rootuos:~# locale LANGzh_CN.gb18030 LANGUAGEzh_CN LC_CTYPE"zh_CN.gb18030" LC_NUMERIC"zh_CN.gb18030" LC_TIME"zh_CN.gb18030" LC_COLLATE"…

HTML、CSS

初识web前端 web标准 Web标准也称为网页标准&#xff0c;由一系列的标准组成&#xff0c;大部分由W3C (World Wide Web Consortium&#xff0c;万维网联盟) 负责制定。三个组成部分: HTML: 负责网页的结构(页面元素和内容)。CSS: 负责网页的表现(页面元素的外观、位置等页面样…