在UnityEditor下热更Lua代码

在这里插入图片描述

 [MenuItem("Tools/Editor下更Lua _F6")]
 public static void ShowLua()
 {
     EditorWindow.GetWindow(typeof(RefreshLuaScripts), false, "Editor下更Lua", true);
 }
string mInputArea;
void OnGUI()
mInputArea = EditorGUILayout.TextArea(mInputArea, mStyle, GUILayout.Height(75));
 if (GUILayout.Button("脚本热更", GUILayout.Height(30)))
    {
        if (string.IsNullOrEmpty(mInputArea))
        {
            ShowNotification(new GUIContent("未输入"));
            return;
        }
        GUI.FocusControl("");//使 输入框失去焦点
        var luaNameStr = PlayerPrefs.GetString(LUANAMES);
        string newValue = mInputArea;
        if (string.IsNullOrEmpty(luaNameStr) == false)
        {
            if (luaNameStr.Contains(mInputArea) == false)
                newValue = mInputArea + ";" + luaNameStr;
            else
                newValue = luaNameStr;
        }
        if (luaNameStr.Contains(mInputArea) == false)
        {
            var setStr = newValue.Split(';');
            string tempStr = setStr[0];
            for (int i = 1; i < setStr.Length; i++)
            {
                if (i < 7 && tempStr.Contains(setStr[i]) == false)
                    tempStr = tempStr + ";" + setStr[i];
            }
            newValue = tempStr;
            PlayerPrefs.SetString(LUANAMES, newValue);
        }
        mPlayerPrefs = newValue.Split(';').ToList();
        LuaInterface.LuaState L = LuaClient.GetMainState();
        L.Call("HotLuaScriptInEditor", mInputArea, true);//传入Lua中
    }
}
命名个脚本 eg:cFunction.lua
--List 含有此item
function IsListHasContains(pList, pItem)
    if pList ~= nil then
        local count = #pList
        for i = 1, count do
            if pList[i] == pItem then
                return true
            end
        end
    end
    return false
end

function HotLuaScriptInEditor(str)
    local index = 0
    local scripts = string.split(str, ";")
    for file, _ in pairs(package.loaded) do
        local data = string.split(file, ".")
        if IsListHasContains(scripts, data[#data]) then
            package.loaded[file] = nil
            require(file)
            index = index + 1
        end
        if index == #scripts then
            break
        end
    end
    print("热更了")
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity代码是指在游戏运行过程中,实现对游戏逻辑的新而无需重新启动游戏的技术。 在传统的游戏开发中,当游戏发生变动时,通常需要重新编译和部署整个游戏程序才能够使新的修改生效。而使用Unity代码技术,可以实现在游戏运行时对游戏逻辑进行新,而无需重新编译和重新启动游戏。 Unity代码技术通常涉及使用脚本语言(例如C#或Lua)编写游戏的逻辑代码。这些脚本代码被独立于游戏引擎的其他部分进行编译和加载。在游戏运行过程中,当需要对游戏逻辑进行修改时,可以通过加载新的脚本文件来新游戏的逻辑。这样就可以实现游戏逻辑的灵活修改和新,而无需影响游戏的其他部分。 使用Unity代码技术可以给游戏开发带来很多优势。首先,它可以加快游戏开发的迭代速度,因为开发人员可以在游戏运行过程中对逻辑进行快速修改和测试,无需等待重新编译和启动的时间。其次,它也可以提供游戏新的便利性,因为新只需要部署新的脚本文件,而无需重新下载和安装整个游戏。 然而,Unity代码技术也存在一些挑战和限制。首先,由于代码通常使用脚本语言编写,相对于编译型语言可能会牺牲一些性能。其次,由于代码技术可能涉及到游戏逻辑的动态新,需要确保代码的安全性和稳定性,避免出现潜在的漏洞和错误。 总而言之,Unity代码是一种在游戏运行时实现游戏逻辑修改的技术。它可以加快游戏开发速度,提供游戏新的便利性,但也需要在安全性和稳定性方面进行考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值