ToLua lua中协同程序的使用
private string luaString = @"
	
	function cor()
		print('coroutine start')
		coroutine.wait(5)  --等待几秒
		print('5s ago')

		print('frameCount:' .. Time.frameCount)
		coroutine.step()   --等待一帧
		print('frameCount:' .. Time.frameCount)

		local www = UnityEngine.WWW('http://www.baidu.com')
		coroutine.www(www)  --等待www响应
		local s = tolua.tolstring(www.bytes)
		print(s:sub(1,128))
	end

	local c = nil

	function testCor()
		c = coroutine.start(cor)  --开始协成
	end

	function stopCor()
		if c ~= nil then
			coroutine.stop(c)  --停止协成
		end
	end

";
	
private LuaState lua;
private LuaLooper looper;
private LuaFunction func;

// Use this for initialization
void Awake () {
	lua = new LuaState ();
	lua.Start ();
	// 不执行绑定无法使用Wrap的函数,就是GameObject等Unity的内置类
	LuaBinder.Bind (lua);
	// 添加了这个组件后,它会在c#每一帧驱动lua的协同完成所有的协同功能,这里的协同已经不单单是lua自身功能,而是tolua#模拟unity的所有的功能.
	looper = gameObject.AddComponent<LuaLooper> (); 
	looper.luaState = lua; //指定虚拟机

	lua.DoString(luaString);
	func = lua.GetFunction("testCor");
	func.Call ();

	LuaFunction stopFunc = lua ["stopCor"] as LuaFunction;
	stopFunc.Call ();
	stopFunc.Dispose ();
}

void Destroy(){
        //擦屁股操作
	func.Dispose ();
	looper.Destroy ();
	lua.CheckTop ();
	lua.Dispose ();
	func = null;
	looper = null;
	lua = null;
}



首页 我的博客
粤ICP备17103704号