【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开发流程

  1. 写C++插件
  2. 插件导出Lua脚本
  3. 创建一个Lua Sandbox,包含init,update,fini钩子
  4. Sandbox里安装和初始化插件
  5. 在sandbox_config.lua里注册一下Sandbox

C++写成插件,去钩引擎,不要直接为了Demo改引擎,会影响其他Demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值