【ZeloEngine】沙箱机制
【ZeloEngine】沙箱机制
沙箱,沙盒,Sandbox
沙盒游戏是指开放世界游戏,比如MineCraft,玩家可以在里面自由地游玩
程序的Sandbox,是指引擎提供一个干净的环境,供程序员自由地写业务逻辑
本文讨论的Sandbox,比较接近Demo,Mod,插件的概念
动机
引擎的最终目的是做游戏,这个过程中会产出很多Demo
通过Sandbox,将Demo和引擎分割开,不断的开发新Demo,并把Demo中通用的部分向引擎迁移,形成一个开发循环
结论
- 干净的切换Demo,每个Demo是独立的引擎实例
- 独立的Demo目录,C++,Lua和资源目录
- 自带Lua热更
思路
早期我想直接用插件机制去做Sandbox,结果做了两三个Demo就不行了,插件切换切不干净,出了问题很难定位,尤其是渲染问题
其实Godot的就差不多(可以去steam下一个玩一下)
其实这个流程应该设计为:
- 一个Project Hub,显示Demo列表,用于启动选择Demo
- 打开Demo后关掉Project hub
- 启动引擎
用一个队列维护引擎实例,实例之间用文件传递Demo ID
打开Demo时写入ID,push实例,然后关掉自己
队列自动取出实例开始启动
顺带发现,这个自带热更,其实和重启引擎是一样的,但是更快
int main() {
Zelo::ProjectHub().start();
while (!Zelo::G::s_EngineList.empty()) {
auto &engine = Zelo::G::s_EngineList.front();
engine->start();
Zelo::G::s_EngineList.pop_front();
}
return 0;
}
Sandbox开发流程
- 写C++插件
- 插件导出Lua脚本
- 创建一个Lua Sandbox,包含init,update,fini钩子
- Sandbox里安装和初始化插件
- 在sandbox_config.lua里注册一下Sandbox
C++写成插件,去钩引擎,不要直接为了Demo改引擎,会影响其他Demo
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!