安装

  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. 用eclipse javaEE编程时,不管什么程序都会出现这个错误[SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:bookstore' did not find

    用eclipse javaEE编程时,不管什么程序都会出现这个错误[SetContextPropertiesRule]{Context} Setting property 'source' to 'o ...

  2. 《编写高质量代码—改善java程序的151个建议》知识整理一

    1.用偶判断,不用奇判断 案例:在代码i%2==1?"奇数":"偶数" (java中的求余算法相当于:divided-divided/divisor*divis ...

  3. Convert Date between LocalDateTime

    http://blog.progs.be/542/date-to-java-time Java8 has new date and time classes to “replace” the old ...

  4. Hibernate - 使用注解完成映射

    除了使用XML配置来映射对象和数据库表,还可以使用注解来完成持久化.使用注解需要导入Hibernate Annotations扩展包 @Entity -加在类的前面,将类声明为持久化类. -javax ...

  5. [Search]swf 转mp4,未成功

    Need help to convert SWF to something else.. 知道recordmydesktop 和 xvidcap 两个录像软件. 在尝试了自己的净土 下面的 ADSha ...

  6. <你不知道的JavaScript>读书笔记

    近几天看了一本不错的 JavaScript 的书,是 Kyle Simpson 写的 <You Don't know JS>.这本书是 Kyle Simpson 在 Github 上的开源 ...

  7. JAXB - Annotations, Top-level Elements: XmlRootElement

    A class that describes an XML element that is to be a top-level element, i.e., one that can function ...

  8. 常用meta整理【转载】

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 we ...

  9. 通过公网连接云数据库Memcache--ECS Windows篇

    目前云数据库Memcache是需要通过ECS的内网进行连接访问,如果用户本地需要通过公网访问云数据库Memcache,可以在ECS Windows云服务器中通过netsh进行端口映射实现. 一.搭建要 ...

  10. C/C++雷区之内存管理

    C++雷区之内存管理 伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程 ...