【Unity框架】XLua中Lua代码注入C#代码操作

这篇具有很好参考价值的文章主要介绍了【Unity框架】XLua中Lua代码注入C#代码操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、干净的基于XLua的框架下载地址

1.游戏框架下载地址:https://github.com/kof123w/gitWorkSpace/tree/main/XLua
2.XLua官方与教程地址:https://github.com/Tencent/xLua

二、使用步骤

1.操作步骤

I.宏定义:添加 HOTFIX_ENABLE 到 Edit > Project Settings > Player > Other Settings > Scripting Define Symbols

II.生成代码:执行 ‘XLua > Generate Code’ 菜单,等待Unity编译完成

III.注入:执行 ‘XLua > Hotfix Inject In Editor’ 菜单。注入成功会打印 ‘hotfix inject finish!’ 或者 ‘had injected!’

注意)unity2021.3的版本布局以及被修改了,Scripting Define Symbols菜单在下图这里:
【Unity框架】XLua中Lua代码注入C#代码操作

2.脚本添加

1.在游戏逻辑代码文件夹创建脚本HotFixTest.cs:

这里需要说明以下,所有我们需要对C#代码的类进行Lua代码注入的时候都需要给对应的类添加一个[Hotfix]的特性,对应的需要进行Lua代码注入方法需要添加特性[LuaCallSharp],如以下代码所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

[Hotfix]
public class HotFixTest : MonoBehaviour
{
    void Start()
    {
        hotFixTest();
    } 

    [LuaCallCSharp]
    public void hotFixTest()
    {
        Debug.Log("我是C#代码的输出");
    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 300, 80), "Hotfix"))
        {
            LuaManager.Instance.GetLuaEnv().DoString(@"hotFixTest.hotHotFixTest()");
            hotFixTest();
        } 
    } 
}

2.在游戏脚本管理代码文件夹创建脚本HotFixTest.cs:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CSharpManager:UnitySingleton<CSharpManager>
{
    private GameObject mainCamera; 

    public override void Awake()
    {
        //父类单例管理
        base.Awake();

        //初始化摄像机
        initCamera();

        //子类扩展添加脚本注册
        this.gameObject.AddComponent<HotFixTest>();
    }

    /// <summary>
    /// 初始化摄像机
    /// </summary>
    private void initCamera() {
        GameObject go = new GameObject();
        go.AddComponent<Camera>();
        go.AddComponent<AudioListener>();
        go.name = "mainCamera";
        mainCamera = go;
    }

    /// <summary>
    /// 外界获取摄像机代码
    /// </summary> 
    public Camera GetMainCamera() {
        return mainCamera.GetComponent<Camera>();
    }
}

3.在游戏启动脚本中对CSharpManager.cs进行初始化:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameStarter : UnitySingleton<GameStarter>
{
    public override void Awake()
    {
        base.Awake();

        //初始化游戏框架
        this.gameObject.AddComponent<LuaManager>();
        this.gameObject.AddComponent<CSharpManager>();
        //资源管理于初始化 
    }

    private void Start()
    {
        //进入游戏
        this.StartCoroutine(this.GameStart()); 
    }


    /// <summary>
    /// 检查热更新携程
    /// </summary> 
    IEnumerator checkHotUpdate() {
        yield return 0;
    }

    IEnumerator GameStart() {
        yield return this.StartCoroutine(this.checkHotUpdate());

        //进入Lua虚拟机代码,运行lua代码 
        LuaManager.Instance.runLuaScript();
    }
}

4.在Lua脚本的游戏逻辑下添加一个HotFixTest.lua脚本:

hotFixTest = {}

hotFixTest.hotHotFixTest = function()
   --参数1为对应的ccharp类,参数2为对应的方法名,参数3为修改后的函数体
   xlua.hotfix(CS.HotFixTest,'hotFixTest',function(self)
       print("我是lua打印出来的")
   end)
end

--这里主要释放掉修改的方法的注入
hotFixTest.disposeHotFixTest = function()
   xlua.hotfix(CS.HotFixTest,'hotFixTest',nil) 
end

5.还需要再Lua脚本的Main.lua脚本中添加对HotFixTest.lua的请求和初始化


main = {}

main.awake = function()
    print("this mian awake function");
end


main.update = function()
   print("this mian update  function")
end

require('Game/HotFixTest')  --初始化HotFixTest.lua脚本

三、运行结构

1.按钮没有点击前:

【Unity框架】XLua中Lua代码注入C#代码操作

2.按钮点击之后

【Unity框架】XLua中Lua代码注入C#代码操作

二、源码下载地址

https://github.com/kof123w/gitWorkSpace/tree/main/XLua文章来源地址https://www.toymoban.com/news/detail-479775.html

到了这里,关于【Unity框架】XLua中Lua代码注入C#代码操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用XLua在Unity中获取lua全局变量和函数

    1、Lua脚本  入口脚本 测试脚本 2、C#脚本 (1)获取全局变量 执行结果 (2)获取全局函数

    2024年02月07日
    浏览(43)
  • Unity中如何使用Rider调试C#和lua代码

    工作中经常需要调试lua代码,之前使用VS调试C#代码,使用Intellij Idea来调试lua代码,这样其实比较麻烦,所以查了一下,可以直接使用Rider来统一的调试C#和lua代码 Rider下载:Rider官网下载,根据需要选择对应的版本,建议使用Rider2020.1.0,参考链接 打开Unity,在preference中设置为

    2023年04月13日
    浏览(44)
  • 关于Unity在Xlua调用Lua脚本函数时报错This type must add to CSharpCallLua 解决办法

    使用委托来获取xlua中的function是不行的 报错脚本示范 即使全部接口打好标签并且在编辑器中把兼容等级改为4.X 打包出去还是会出问题 建议在lua脚本中建立一个空的table 再把方法塞进去 比如 然后在c#端 就可以正常运作这个方法了

    2024年02月12日
    浏览(61)
  • [游戏开发][Unity] Xlua与C#互相调用规则

    静态方法无需获取类对象,获取到类直接执行 例1: 例2 调用非静态方法一定要获取到具体的C#类对象!!! 例1:获取单例对象并调用非静态方法,Singleton是单例的一种写法,网上源码很多 下面是Lua调用C#的代码,我这是模拟Xlua的工程,以类的方式实现交互 看Log日志发现:

    2024年02月07日
    浏览(73)
  • XLua中lua读写cs对象的原理

    XLua在C#维护了两个数据结构,ObjectPool和ReverseMap。 首次传递一个C#对象obj到Lua时,对象被加入到ObjectPool中,并为它创建一个唯一标识objId,建立obj和objId的双向映射。 如果该对象的类型是第一次传到Lua,还会为类型创建一个元表typeMetatable。 把typeMetatable注册到Lua的全局表中,这

    2024年02月08日
    浏览(42)
  • 【Lua in Unity】详解与和C#互相调用示例

    目录 Lua在Unity中的主要作用 如何创建 Lua与C#互相调用 C#和Lua的使用场景区分 完整示例 游戏逻辑编写:Lua可以作为一种脚本语言,用于游戏中的逻辑编写,例如定义游戏角色的行为、AI逻辑,处理游戏的战斗逻辑和流程控制,等等。可以将Lua代码通过Unity的API来实现与引擎的交

    2024年02月11日
    浏览(55)
  • unity的C#学习——不安全代码(声明不安全代码块:实现C/C++指针的创建与相关操作)

    不安全代码(Unsafe code)是指 使用了指针变量的代码块 ,或者 执行需要访问非托管代码(unmanaged code)的操作 。 指针 是一个变量,其值为另一个变量的地址,即内存位置的直接地址。在C#中,不安全代码必须使用 unsafe 修饰符标记,并需要在编译时启用 AllowUnsafeCode 选项。

    2024年02月09日
    浏览(39)
  • idea调试unity里面的lua代码

    本人一名java后端开发,看到前端同事调试lua代码无脑print,甚为鄙视,百度加实操写一份调试unity的lua脚本文档 1.安装lua lua官网下载页面 最终下载页面 2.idea安装插件 emmylua 3.idea打开unity的lua脚本 idea-file-open 选择相应目录 idea-file-project structure-sdks选择+号 4.配置启动参数 5.复制

    2024年02月10日
    浏览(40)
  • VsCode使用EmmyLua插件调试Unity工程Lua代码

    一、VSCode安装EmmyLua  二、添加配置文件 三、设置配置文件 执行完第二步会弹出添加好的launch.json配置文件,这个文件只需要修改“ideConnectDebugger” = false,其他一般不用修改。    四、添加Lua断点调试入口 luaEnv变量必须为全局唯一 路径标红的地方配上你的正确路径名 var p

    2024年02月13日
    浏览(50)
  • XLua框架使用

    1、XLua集成RapidJson与protobuf:跳转链接 2、XLua常用库集成(lua-protobuf、LuaSocket、RapidJson、LPeg):跳转链接 3、集成第三方库常遇到的问题         A、mac上sh编译脚本运行一次后要关闭命令行窗口,否则有缓存,修改 cmakelist 不生效         B、lua-rapidjson git 上排名最前的那个编

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包