安装

  1.下载最新版,将Assets目录里的所有内容复制到工程中,对于最终产品,可以删除例子,文档等内容,如果是开发阶段则无所谓。

  2.等待unity编译完毕,如果一切顺利的话,将出现SLua菜单,点击SLua菜单中All->Make命令,手动生成针对当前版本的U3d接口文件。

  3.每次更新SLua版本,务必记得All->Clear,然后All->Make,否则可能运行不正确。

LuaState状态机对象执行Lua字符串

using UnityEngine;
using System.Collections;
using SLua; public class AppDelegate : MonoBehaviour { private static LuaState ls_state = new LuaState(); void Start () {
ls_state.doString("print(\"SLua Hello!\")");
} }

使用LuaState状态机对象执行Lua脚本文件HelloLua.lua

  在Resources文件夹下添加HelloLua.lua文件  

print("Lua Script:HelloLua")  

  设置LuaState.loaderDelegate启动文件委托代理

using UnityEngine;
using System.Collections;
using SLua;
using System.IO; public class AppDelegate : MonoBehaviour { void Start () { //设置脚本启动代理
LuaState.loaderDelegate = ((string fn)=>{ //获取脚本启动代理
string file_path = Directory.GetCurrentDirectory() + "/Assets/Resources/" + fn; Debug.Log("file_path:" + file_path); return File.ReadAllBytes(file_path);
}); } }

  通过LuaState对象执行HelloLua.lua脚本

using UnityEngine;
using System.Collections;
using SLua;
using System.IO; public class AppDelegate : MonoBehaviour { void Start () { //设置脚本启动代理
LuaState.loaderDelegate = ((string fn)=>{ //获取脚本启动代理
string file_path = Directory.GetCurrentDirectory() + "/Assets/Resources/" + fn; Debug.Log("file_path:" + file_path); return File.ReadAllBytes(file_path);
}); //设置执行脚本
LuaState ls_state = new LuaState();
ls_state.doFile("HelloLua.lua");
} }

通过LuaState对象获取并执行HelloLua.lua脚本中的一个函数

  HelloLua.lua

function sum( v1, v2)

    return v1 + v2
end function mul( v1, v2) return v1 * v2
end

  AppDelegate.cs

using UnityEngine;
using System.Collections;
using SLua;
using System.IO;
using System;
using LuaInterface; public class AppDelegate : MonoBehaviour { //添加LuaState初始化时的回调函数特性函数
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
protected static int init(IntPtr L)
{
//设置初始化LuaObject对象
LuaObject.init(L);
return ;
} void Start () { //创建状态机对象
LuaState ls_state = new LuaState(); //设置脚本启动代理
LuaState.loaderDelegate = ((string fn)=>{ //获取脚本启动代理
string file_path = Directory.GetCurrentDirectory() + "/Assets/Resources/" + fn; Debug.Log("file_path:" + file_path); return File.ReadAllBytes(file_path);
}); //初始化LuaState状态机与c#的转换对象
LuaState.pcall(ls_state.L, init); //设置执行脚本
ls_state.doFile("HelloLua.lua"); //获取脚本中的mul函数
LuaFunction mul = ls_state.getFunction("mul"); //调用该函数并且接收返回值
double result = (double)mul.call(-, ); Debug.Log(result);
} }

   注:如出现`SLua.LuaState.pcall(System.IntPtr, LuaInterface.LuaCSFunction)' is inaccessible due to its protection level异常,进去看下pcall的定义,把internal修改为public即可。

自定义c#队形LOHuman.cs,在Hello.lua中

  LOHuman.cs

using LuaInterface;
using SLua;
using System;
using UnityEngine;
using System.Collections; [CustomLuaClassAttribute]
public class HHHuman : MonoBehaviour
{
//年龄成员
protected int age = ; //姓名成员
protected string name = ""; //添加Lua代码中的静态函数
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
[StaticExport]
static public int CreateHuman(IntPtr l)
{
HHHuman item = new HHHuman();
LuaObject.pushObject(l, item); return ;
} public string speak(string str)
{
string speakStr = "speak:";
if (str!=null)
speakStr += str;
return speakStr;
} public int Age
{
set;
get;
} public string Name
{
set;
get;
}
}

   通过点击菜单栏中的SLua->Custom->Clear将旧版本的自定义类删除。

  通过点击菜单栏中的SLua->Custom->Make重新制作适用于SLua的新的自定义类Lua_HHHuman.cs。

  默认存放目录Assets->SLua->LuaObject->Custom->。

  在HelloLua.lua脚本中,调用c#中的自定义类的静态函数CreateHuman()。

function main()

    local human = HHHuman.CreateHuman()

    print("human.Age: ",human.Age)
print("human.speak: ",human:speak("hi"))
end

  在AppDelegate.cs的Start函数中,调用HelloLua.lua脚本中的main函数

using UnityEngine;
using System.Collections;
using SLua;
using System.IO;
using System;
using LuaInterface; public class AppDelegate : MonoBehaviour { LuaSvr l;
void Start () { l = new LuaSvr();
l.start("HelloLua"); } }

SLua的更多相关文章

  1. ulua slua 下载地址

    ulua http://www.yanyulin.info/pages/2015/01/27193946190814.html   http://www.manew.com/blog-27966-25 ...

  2. Unity 官方 Demo: 2DPlatformer 的 SLua 版本。

    9月份时,趁着国庆阅兵的假期,将 Unity 官方 Demo: 2DPlatformer 移植了一个 SLua 版本,并放在了我的 GitHub 账号下:https://github.com/yauk ...

  3. SLua 中使用 Lua 5.3 的编译工程

    2016-03-05 更新: 之前编译的库,在 Android 下 Lua_Number 和 Lua_Integer 被编译为了32位,导致从 C# 到 Lua 过程中有64位到32位整型转换会出现溢 ...

  4. 在 slua 中使用更新的面向对象方案

    上一篇记录了我使用 Slua.Class 来实现面向对象扩展 C# 中得类,但实际使用中,更多地情况是直接在 lua 中定义基类然后扩展,于是触发了我重新思考下是否两种形式应该统一用一种,目前的方案中 ...

  5. SLua 中继承 C# 类接口 Slua.Class 的一个 Bug。

    由于目前要把大量的代码移植到 lua 中(真是够虐心的),面向对象肯定少不了,项目的代码都是这么设计的,于是就测试 Slua.Class 接口来扩展 C# 的类,发现有点问题,给作者提交了一个 Iss ...

  6. slua 中使用 lua5.3

    因为我们服务器极有可能要迁移到 skynet 上,它基于 lua5.3,而服务器和客户端会公用很多lua代码,所以在考虑在客户端 slua 中使用 lua5.3. 经过编译后,发现 slua 对 lu ...

  7. 使用Slua框架开发Unity项目的重要步骤

    下载与安装 下载地址 GitHub 安装过程1.下载最新版,这里, 解压缩,将Assets目录里的所有内容复制到你的工程中,对于最终产品,可以删除slua_src,例子,文档等内容,如果是开发阶段则无 ...

  8. Unity SLua 如何调用Unity中C#方法

    1.原理 就是通常在Lua框架中所说的,开放一个C#的web接口,或者叫做在Slua框架中注册函数. 2.作用 在Lua中调用C#中的方法,这个是在做热更新中很常用的一种方法,无论是slua,还是lu ...

  9. unity slua整合帅气的lua-pb解析protobuf

    了解到lua的一个protobuf库,接口帅气,比之前用过的一些lua protobuf库要好很多,深得我心.而且能保持更新,比其他库几年没更新要放心. lua-pb动态解析protobuf协议,无需 ...

随机推荐

  1. Java基础知识强化之IO流笔记68:Properties和IO流集合使用

    1. Properties和IO流集合使用 这里的集合必须是Properties集合:  public void load(Reader reader):把文件中的数据读取到集合中  public v ...

  2. (原创)openvswitch实验连载1-fedora 17下安装openvswitch

    1 软件安装 1.1测试环境和网络拓朴 大部分朋友估计也没有一个真实环境来完全整个的测试,所以我也是使用了在一台PC机上使用Vmware Workstation的方式来进行实验.总体结构是在PC机上安 ...

  3. Extjs3笔记 fbar

    在项目中会遇到在grid右下角显示合计之类的显示. 之前使用过的方式: 1.用width强制顶过去. 2.利用css来控制. 弊端: 利用第一种方式:导致调整窗口大小时会导致合计不能根据窗体的大小变化 ...

  4. Android中FTP服务器搭建入门

    http://www.2cto.com/kf/201501/374048.html http://blog.csdn.net/smile3670/article/details/44343617  有 ...

  5. Appium 解决中文输入问题

  6. ###《Effective STL》--Chapter6

    点击查看Evernote原文. #@author: gr #@date: 2014-09-27 #@email: forgerui@gmail.com Chapter6 函数子.函数子类.函数及其他 ...

  7. TortoiseSVN本地代码版本控制设置步骤。

    1.下载安装TortoiseSVN客户端. 2.在某个盘创建空的文件夹作为项目代码的版本库.在空的文件夹内部右键鼠标TortoiseSVN->Create repository here 3.在 ...

  8. Razor引擎学习:RenderBody,RenderPage和RenderSection

    ASP.NET MVC 3 已经正式发布了,现在估计许多人都在拼命学,我也不能例外,刚刚看到了一篇文章,介绍了三个非常有用的方法:RenderBody,RenderPage和RenderSection ...

  9. someExperience

    // 面试题1 var name = 'World'; (function () { if (typeof name==='undefined') { var name = 'jack'; conso ...

  10. CSS3几个速记标签2

    @font-face:CSS3允许使用自己的字体,用户会自动下载     语法:@font-face{font-family:---:src:url(---)}     如果要使用粗体,必须新添加另一 ...