NXLua框架介绍

框架介绍

由来

NXLua框架是由3D能力平台提供的AgentSystem改造而来,将其中的NLua改成使用XLua,并兼容保留了原本NLua的接口和类而出现的框架。为了兼容项目代码,保留下了NLua、AgentSystem命名空间下的大部分类和接口,只是将其中的代码实现替换成XLua。

框架能力

  1. 提供方便的C#与Lua的互操作性。
  2. 以Agent为逻辑单元为Lua层提供MonoBehavior生命周期事件,以及组件化的能力接口
  3. 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现
  4. 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc
  5. 可以生成中间适配代码,提高调用性能

使用教程

前提

该教程需要对C#和Lua的语法有一定的了解。
如果对C#或者Lua的语法不了解,可以先到下面的网站中学习了解一下:
C#教程:https://www.runoob.com/csharp/csharp-tutorial.html
Lua教程:https://www.runoob.com/lua/lua-tutorial.html

XLua使用介绍

XLua的使用教程请查看:https://www.showdoc.com.cn/VLab?page_id=6136401043616679

AgentSystem使用介绍

AgentSystem的使用教程请查看:https://www.showdoc.com.cn/VLab?page_id=6136704386586455

示例

通过class、struct映射lua传入的table

该示例用来展示如何将Lua传入的table的值映射到对应的class或是struct。

组件代码

using UnityEngine;
using AgentSystem;
namespace AgentSystemExtension {
    public struct TestStruct
    {
        public string code;
        public int id;
    }

    public class TestData
    {
        public string name = "";
        public int count = 0;
        public TestStruct content = new TestStruct() { code = "",id = 0};
    }

    public class AgentComponent_Example : AgentComponentBase
    {
        TestData test = new TestData();
        public void OnDataChange(TestData data)
        {
            Debug.LogFormat("name:{0}  count:{1}\ncontent:\ncode:{2}  id:{3}",
                data.name, data.count, data.content.code, data.content.id);
        }

        public TestData GetData()
        {
            return test;
        }
    }
}

lua层代码

    if not self.Example then 
        self:AddComponent("AgentSystemExtension.AgentComponent_Example")

    end
    self.Example:OnDataChange(
        {
            name = "hhh",
            count = 3,
            content = {
                code = "jiujingdeng",
                id = self.entityId
            }
        }
    )

运行结果