Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法

其实作者自带的那个说明已经很详细了,不过为了赚点访问量,我还是自己也来个简单的使用说明,顺便最近自己用的多,复习一下.

对于Tolua插件,我的介绍是基于作者自带的框架工程之中的那10个样例来做的~~

具体样例的位置如下:

Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法_第1张图片

现在就让我们开始Tolua的学习吧!

案例1:

按照程序员的传统,学习一样新东西都是从一个最简单的HelloWorld开始,这里也不例外:

样例代码如下:

using UnityEngine;
using LuaInterface;

public class HelloWorld : MonoBehaviour
{
    void Awake()
    {
        LuaState lua = new LuaState();
        string hello =
            @"                
                print('hello tolua#')                
            ";

        lua.DoString(hello, "hello");
        lua.CheckTop();
        lua.Dispose();
        lua = null;
    }
}
运行效果图如下:

Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法_第2张图片

通过以上例子的学习,我们可以知道以下几点:

1:使用Tolua的相关类及方法都需要调用命名空间LuaInterface

2:调用lua脚本必须要先创建一个lua的虚拟机,而创建的步骤就是LuaState lua = new LuaState();, 创建一个LuaState型的对象,这个就是lua的虚拟机,后面的lua的与C#的交互全部依仗这个东西。
3:lua中直接运行一段lua脚本最简单的方法就是 lua.DoString, 该方法声明如下:

public object[] DoString(string chunk, string chunkName = "LuaState.DoString")
4:使用完lua虚拟机之后记得要销毁,具体操作如下:先进行lua虚拟机栈的判空,具体对应的就是 lua.CheckTop , 然后就是析构掉lua虚拟机,具体方法为 lua.Dispose


案例2:

核心代码其实就是如下几段:

        lua = new LuaState();
        lua.Start();
        //注意使用这个样例的时候记得调整lua虚拟机的文件加载路径,作者自带的那个可能有问题
        string fullPath = Application.dataPath + "/LuaFramework/ToLua/Examples/02_ScriptsFromFile";
        lua.AddSearchPath(fullPath);
 if (GUI.Button(new Rect(50, 50, 120, 45), "DoFile"))
        {
            strLog = "";
            lua.DoFile("ScriptsFromFile.lua");            
        }
        else if (GUI.Button(new Rect(50, 150, 120, 45), "Require"))
        {
            strLog = "";
            lua.Require("ScriptsFromFile");
        }

效果图如下:

Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法_第3张图片

整个案例中我们所要学会的主要的知识点如下:

1:调用lua.Start方法完成lua虚拟机的一些基础初始化,里卖弄的内容主要包括一些环境的配置和一些lua的基本库的加载,默认一般工程中创建该虚拟机时都要初始化

2:重要方法lua.AddSearchPath ,通过此方法添加lua文件的路径,只有添加了文件路径之后,在该路径上的lua文件才可以被读取

3:lua文件的2个加载方法,lua.DoFile lua.Require  ,参数为lua文件名,推荐使用Require,因为Require 读取文件是会检查该文件是否被加载过,如果被加载过,则直接返回一个索引,否则则加载并返回一个索引,而Dofile则是每次调用都会重新加载使用,相对来说对性能等的消耗都会大一些,而且感觉不利于一些后面代码的书写



今天先将这么多吧!后面的我会慢慢地再更~~~

你可能感兴趣的:(Unity游戏开发)