安装

  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. maven系列之二maven项目的创建和maven项目的结构

    maven系列之一简单介绍了maven的基本信息,安装和配置,大家对maven有一个大概的了解,但是在maven项目开发中远远不够,为了进一步了解maven,现在我们介绍maven项目的创建和mave ...

  2. MySQL入门笔记

    MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: ·          rpm包形式 ·          通用二进制 ...

  3. Android 自定义View修炼-高仿猎豹清理大师自定义内存开口圆环比例进度View

    一.概述 看见猎豹清理大师的内存开口圆环比例进度 挺有意思的,于是就是想自己实现下这样的效果,于是反编译了猎豹清理 大师的app看了下,原来是有两张图,于是脑子里就过了下思路,利用上下两张图,旋转上面 ...

  4. Java基础知识强化之IO流笔记67:Properties的特殊功能使用

    1. Properties的特殊功能 public Object setProperty(String key,String value):添加元素 public String getProperty ...

  5. SQL Server 中添加用户

    在对象资源管理器中点击安全性,选择登录名-新建登录名

  6. 转--object-C 与lua使用wax交互

    [51CTO独家译文]2011年6月的编程语言排行榜Lua语言一军突起,一举进入前十名.这与一年前苹果决定在iOS系统上使用Lua语言密不可分.但是,你了解如何用Lua语言在iOS上开发应用吗?51C ...

  7. 例3-12opencv设置ROI感兴趣区域

    前面说了一堆,也不知道啥用,感觉也没说清楚,可能确实需要一些例子来显性表示一下,或者他们在当初出版书籍针对的人群已经有了对图像的基本认识,然而自己还是没有建立起来,往后看看吧,希望能比较清楚的自己处理 ...

  8. Linux shell之数组

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  9. 【原】NGUI中的UIRoot脚本功能

    UIRoot是NGUI控件的根节点,使用是根据屏幕尺寸自动(或手动)调节节点下子控件的大小. 这个组件声明了在编辑模式下运行:[ExecuteInEditMode],在Inspector编辑修改属性值 ...

  10. The Shapes of CSS

    #square { width: 100px; height: 100px; background: red; } #rectangle { width: 200px; height: 100px; ...