uLua官方 案例

1、HelloWorld

using LuaInterface;
public class HelloWorld : MonoBehaviour {
 void Start () {
        LuaState l = new LuaState();
  // 在C#下使用Lua
        l.DoString("print('hello world 世界')");
 }
}

2、CreateGameObject

using LuaInterface;
public class CreateGameObject : MonoBehaviour {
	//Lua脚本  Lua下使用c#
    private string script = @"
            luanet.load_assembly('UnityEngine')   //首先需要加载一个assembly包含指定类型
            GameObject = luanet.import_type('UnityEngine.GameObject')//来获得指定类型引用
			//使用引用
            local newGameObj = GameObject('NewObj')
            newGameObj:AddComponent('ParticleSystem')
        ";
	// 在C#下使用Lua
	void Start () {
        LuaState l = new LuaState();
        l.DoString(script);     //执行Lua脚本
	}
}

3、AccessingLuaVariables

using LuaInterface;
public class AccessingLuaVariables : MonoBehaviour {
    private string script = @"
		//Lua脚本  Lua下使用c#
            luanet.load_assembly('UnityEngine')			//首先需要加载一个assembly包含指定类型
            GameObject = luanet.import_type('UnityEngine.GameObject')  //来获得指定类型引用
            particles = {}
            for i = 1, Objs2Spawn, 1 do
                local newGameObj = GameObject('NewObj' .. tostring(i))
                local ps = newGameObj:AddComponent('ParticleSystem')
                ps:Stop()
                table.insert(particles, ps)
            end
            var2read = 42
        ";
	// 在C#下使用Lua
	void Start () {
        LuaState l = new LuaState();
        // Assign to global scope variables as if they're keys in a dictionary (they are really)
        l["Objs2Spawn"] = 5;
        l.DoString(script);
        // 从全局范围读取
        print("Read from lua: " + l["var2read"].ToString());
        // 得到lua table作为LuaTable对象
        LuaTable particles = (LuaTable)l["particles"];
        // 典型遍历 table中的值
        foreach( ParticleSystem ps in particles.Values )
        {
            ps.Play();
        }
	}
}

4、ScriptsFromFile

Lua的脚本文件04_ScriptsFromFile.lua:

--Lua脚本  Lua下使用c#
print("This is a script from a file 世界")

C#文件:

using LuaInterface;
public class ScriptsFromFile : MonoBehaviour {
    public TextAsset scriptFile;
	void Start () {
        LuaState l = new LuaState();
		//C# 运行Lua脚本
		l.DoString(scriptFile.text);
	}
}

5、CallLuaFunction

using LuaInterface;
public class CallLuaFunction : MonoBehaviour {
	//Lua脚本  Lua下使用c#
    private string script = @"
            function luaFunc(message)
                print(message)
                return 42
            end
        ";
	void Start () {
        LuaState l = new LuaState();
        //C# 运行Lua脚本
        l.DoString(script);
        // 得到函数对象
        LuaFunction f = l.GetFunction("luaFunc");
		// 调用它
        object[] r = f.Call("I called a lua function!");
		// Lua 函数能够有 variable 变量返回值,因此我们将他们存储那些作为 C# 对象数组,和在这个案例的打印第一个元素 42
        print(r[0]);
	}
}

6、LuaCoroutines

using LuaInterface;
public class LuaCoroutines : MonoBehaviour {
	// 这个例子将打印 斐波那契 数列(当前数=前两个数的和) 1~10位,每次迭代是1秒间隔
	//Lua脚本  Lua下使用c#
    private string script = @"
            luanet.load_assembly('UnityEngine')   --首先需要加载一个assembly包含指定类型
            local Time = luanet.import_type('UnityEngine.Time')   --来获得指定类型引用
            -- 这yields在每一帧中,全局的游戏时间是仍然低于所需的戳的timestamp
            function waitSeconds(t)
                local timeStamp = Time.time + t
                while Time.time < timeStamp do
                    coroutine.yield()
                end
            end
            function fib(n)
                local a, b = 0, 1
                while n > 0 do
                    a, b = b, a + b
                    n = n - 1
                end

                return a
            end
            function myFunc()
                print('Coroutine started')
                local i = 0
                for i = 0, 10, 1 do
                    print(fib(i))
                    waitSeconds(1)
                end
                print('Coroutine ended')
            end
        ";
    private LuaThread co = null;     //Lua线程
	void Start () {
        LuaState l = new LuaState();
		// //C# 运行Lua脚本
        l.DoString(script);
        // 获得 函数对象
        LuaFunction f = l.GetFunction("myFunc");
		// 创建一个暂停的 lua coroutine协同对象从父状态和函数
        co = new LuaThread(l, f);
		//协程需要在每个帧恢复,因为它在每个帧yield,或者您可以只恢复它在 C# 中的条件相反
        co.Start();
	}
	void Update () {
        if( !co.IsDead() )
        {
            co.Resume();   //恢复
        }
        else
        {
            print("Coroutine has exited.");
			//为了摧毁协同 (但不是在 lua 的函数中,只是协同 stack 实例) 只允许 C# 来清理被包装的对象
            co = null;
        }
	}
}
时间: 2024-10-12 16:42:27

uLua官方 案例的相关文章

Unity 官方案例 Roll a ball

终于找到免费科学上网的方法了,虽然 速度一般,但对于学习unity官方视频来说还行. 废话不多的说,这次学习官方案例 Roll a ball,就是控制小球在平台上吃食物,这么一个简单的游戏.对于unity的一些基本操作,我就不在博客中介绍了,所以还请各位朋友先学会unity的基本操作,几乎只需要知道unity的面板有几块,分别操作什么,怎么创建物体,脚本,以及给物体添加组件,就可以学习本博客了. 好,现在开始.先创建一个3D项目,名字就叫做 Roll a ball, 在Assert 目录下创建几

mutiprocessing 同步类型,如锁,条件和队列官方案例:

官方文档:https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing 1. 同步类型,如锁,条件和队列官方案例: # # A test file for the `multiprocessing` package # # Copyright (c) 2006-2008, R Oudkerk # All rights reserved. # import time, sys, random from Q

Oozie_03运行官方案例【20161116】

3.1官方的案例 (1)Oozie根目录下找到 oozie-examples.tar.gz (2)解压tar -zxvf oozie-examples.tar.gz  生成example文件夹 [[email protected] oozie-4.0.0-cdh5.3.6]$ tar -zxvf oozie-examples.tar.gz (3)拷贝(2)新生成的examples到HDFS的用户家目录下 [[email protected] hadoop-2.5.0-cdh5.3.6]$ bin

Unity官方案例进阶--Roll a ball

经过上一次的学习,我又想改进一下这款 Roll a ball 游戏,首先这款游戏只有胜利没有失败,所以我想定义一个条件来控制它的输赢,因此我想到了如下的方案: **使我们的玩家控制 Player 在规定时间内达到一定的分数就胜利,反之则失败** 任务目标 这里只是大概的目标内容,还有一些细节会在后面完成的时候体现出来. 完成 PickUp 的随机刷新出现,每隔3秒刷新一个 做一个倒计时器用于显示游戏剩余时间 控制分数和时间,若玩家在规定时间内达到分数则显示 You Win!字样,Player 禁

docker三剑客之docker-compose(记官方案例)

简介 Compose项目来源于之前的fig项目,使用python语言编写,与docker/swarm配合度很高. Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器.? Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的

ADF_Oracle示例系列01_Jdeveloper 11g官方案例汇总(汇总)

2015-01-23 Created By BaoXinjian 一.摘要 本 Oracle 示例系列提供了关于如何使用 Oracle JDeveloper 执行各种常见任务的分步指导.这些简明教程使您能够获得宝贵的实际操作经验,然后您可以将这些课程作为您实施的基础. 二.入门 1. JDeveloper IDE 简介 学习链接:http://www.cnblogs.com/eastsea/p/4244999.html 2. 使用 Oracle ADF 开发富 Web 应用程序 学习链接:htt

Spring-boot官方案例分析之data-jpa

package sample.data.jpa; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.s

微信JS SDK Demo 官方案例

转自:http://my.oschina.net/superkangning/blog/367484 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 此文档面向网页开发者介绍微信JS-SDK如何使用及相关注意事项. 一:html代码部分 ? 1 2 3 4 5 6 7 8 9

微信JS SDK Demo 官方案例[转]

摘要: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 此文档面向网页开发者介绍微信JS-SDK如何使用及相关注意事项. 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.