内容纲要

在Tolua中引用C#代码

  • 在Tolua中引用C#的类需要在CustomSetting.cs中添加需要导出的类或者委托,类加入到customTypeList列表,委托加入到customDelegateList列表

  • 通过设置saveDir变量更改导出目录,默认生成在Assets/Source/Generate/下,点击菜单Lua->Generate All,生成绑定文件

  • 在LuaConst.cs中配置开发lua文件目录luaDir以及tolua lua文件目录toluaDir

  • 但是在C#或者C++中函数调用中,默认都有个this指针存在,如果解决这个问题:

  • 一种解决方案为:

  • 有一个Manager负责管理这些需要被调用的脚本(Compent): //主要提供一个Dictionary

    public class GameObjectManager
    {
    private static GameObjectManager _instance;
    static GameObject m_GameManager;
    static Dictionary<string, object> m_Managers = new Dictionary<string, object>();
    }
  • 一个获取组件的static class,提供所有staic的方法:

    public static class LuaHelper
    {
    public static PanelManager GetPanelManager()
    {
        return GameObjectManager.Instance.GetManager<PanelManager>(ManagerName.PanelManager);
    }
    }
  • 然后就是具体实现我们功能的脚本:

    public class PanelManager : MonoBehaviour
    {
    public void CreatePanel(string name, LuaFunction func = null)
    {
    }
    }
  • 把上述的LuaHelper, PanelManager 加入到CustomSettings中, 然后重新生成相应的wraps文件

  • 在lua中调用:

    local panelMgr = LuaHelper.GetPanelManager()
    panelMgr:CreatePanel("UI", this.OnCreate);
  • 只要static类的static函数能用 . 的方式调用,表示不传入this指针

  • 其他函数要用 : 的方式调用,表示传入this指针,而C#脚本的this指针,一定要从C#中获取( LuaHelper.GetPanelManager())

  • 最后在打包成exe中遇到的问题:
    Lua脚本在Unity中放入Lua的文件夹,但是Unity编译打包是以场景作为基本单位,进行打包的,lua脚本默认不会被打包进去
    此时就需要把Lua脚本放入Resource目录下,如何在unity运行时加载lua脚本呢?

  • 打包成exe后,Debug的输出日志,根据官方文档是在C:\Users\username\AppData\LocalLow\CompanyName\ProductName\output_log.txt目录下,但是为什么没有这个文件?

发表评论