Unity3D -- 编辑器注入lua代码到游戏运行

本文介绍了一种在Unity编辑器中将特定关卡注入到游戏运行时的方法,通过Lua脚本传递关卡ID,实现了游戏试玩时直接加载指定关卡的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做项目时有一个要求是这样的:使用编辑器编辑的关卡到游戏运行,策划希望点击编辑器试玩时,游戏直接打开编辑器指定的关卡,但是编辑器编辑关卡是可以上传到服务器发布的关卡,游戏也是可以发布正常运行的游戏,这样就导致游戏不知道编辑器送过来的关卡ID,那么如何才能直接打开编辑器送过来的关卡呢。这个时候只能只用Unity注入lua代码到游戏端,告诉游戏我们送过来的关卡ID。

实现办法:在游戏端写一个模板结构,在游戏中直接调用,在Temp目录下创建一个TempConst.lua文件,并写入一下代码

local TempConst = {
    DefaultLvID = nil,    -- 默认关卡Id
}

return TempConst

游戏中直接调用代码
调用处:

local TempConst = require "Temp.TempConst"

local function enterLevelFunc()
    -- 其他代码
    if TempConst.DefaultLvID == nil then
        -- 自己设置关卡ID         
    else
        -- 调用编辑器指定关卡ID
        self:_enterPuzzle(TempConst.DefaultLvID)
    end 
    -- 其他代码
end

Unity端注入lua代码方法:

// 试玩
[UsedImplicitly]
public void PlayLevelAction() {
    var level = YEDataManager.Instance.EditingLevel;
    string levelFilePath;   // 注入关卡路径,自己设置
    string configFilePath;  // 注入配置路径,自己设置
    string excutablePath;   // 打包游戏存放路径
    if (!CreateLuaFiles(level, out levelFilePath, out configFilePath)) return;
//参数
    var args = new StringBuilder();
    //注入测试关卡
    args.AppendFormat("-inject {0} \"{1}\" ", "AutoGenerateConfigs.Level.120000", levelFilePath);
    //注入配置
    args.AppendFormat("-inject {0} \"{1}\" ", "Temp.TempConst", configFilePath);
    //启动游戏
    Process.Start(excutablePath,args.ToString()); 
    // AutoGenerateConfigs.Level.120000 游戏需要注入替换关卡的路径
    // Temp.TempConst 游戏需要注入替换配置的路径,我们上面创建的文件
}

private bool CreateLuaFiles(YELevel level, out string levelFilePath,out string configFilePath)
    {
        //创建关卡文件
        levelFilePath = ""; -- 设置注入关卡路径 
        if(File.Exists(levelFilePath))File.Delete(levelFilePath);
        YELuaFactory.WriteLuaFile(HEMiddleWare.ToGameConfig(level), levelFilePath);
        //创建配置文件
        configFilePath = ""; -- 设置注入配置文件路径
        if(File.Exists(configFilePath))File.Delete(configFilePath);
        File.WriteAllText(configFilePath, "local TempConst = {DefaultLvID = \"120000\"} return TempConst", Encoding.UTF8);
        return true;
    }

HEMiddleWare.ToGameConfig(level)是编辑器配置关卡的方法,该方法返回一个lua格式的关卡,并可以在游戏中执行。

"local TempConst = {DefaultLvID = \"120000\"} return TempConst"

是注入配置的lua代码,用于替换Temp.TempConst内容,至于DefaultLvID = \"120000\"是自己设置的关卡ID,可以自己设置。

Unity点击试玩时调用PlayLevelAction()方法,编辑器启动游戏,并将关卡,配置注入到游戏运行。该方法最主要的是注入思想,代码需要自己补齐才可以运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值