|
xlua官方项目_U3DScripting分析
代码里都放了我的注释哪里不懂都可以评论问我
LuaBehaviour.cs 代码- using UnityEngine;using System.Collections;using System.Collections.Generic;using XLua;using System;namespace XLuaTest
- {//通过Injection来操控场景中的物体[System.Serializable]publicclassInjection{publicstring name;publicGameObjectvalue;}[LuaCallCSharp]//从lua调用c#的某个类,希望生成适配代码所以打这个标签publicclassLuaBehaviour:MonoBehaviour{publicTextAsset luaScript;//lua代码,因为unity不能识别lua文件所以用txt类型public Injection[] injections;internalstaticLuaEnv luaEnv =newLuaEnv();//项目所有的lua文件都只用这一个虚拟机标志internalstaticfloat lastGCTime =0;internalconstfloat GCInterval =1;//1 second privateAction luaStart;//对应lua代码里的start函数privateAction luaUpdate;//对应lua代码的update函数privateAction luaOnDestroy;//对应lua代码里的ondestroy函数privateLuaTable scriptEnv;voidAwake(){
- scriptEnv = luaEnv.NewTable();// 为每个脚本设置一个独立的环境,可一定程度上防止脚本间全局变量、函数冲突LuaTable meta = luaEnv.NewTable();
- meta.Set("__index", luaEnv.Global);//赋值lua代码里的全局函数
- scriptEnv.SetMetaTable(meta);
- meta.Dispose();
- scriptEnv.Set("self",this);//把c#的this对象赋值给lua的self,这样lua的self就能调用c#这个类的东西了foreach(var injection in injections)//把unity的对象传给lua文件{
- scriptEnv.Set(injection.name, injection.value);}
- luaEnv.DoString(luaScript.text,"LuaTestScript", scriptEnv);//表明是通过scriptEnv使用lua代码Action luaAwake = scriptEnv.Get<Action>("awake");//得到lua代码里的awake函数
- scriptEnv.Get("start",out luaStart);//作用和上面一样都是为了得到对应函数
- scriptEnv.Get("update",out luaUpdate);
- scriptEnv.Get("ondestroy",out luaOnDestroy);if(luaAwake !=null){luaAwake();}}// Use this for initializationvoidStart(){if(luaStart !=null){luaStart();}}// Update is called once per framevoidUpdate(){if(luaUpdate !=null){luaUpdate();}if(Time.time - LuaBehaviour.lastGCTime > GCInterval){
- luaEnv.Tick();
- LuaBehaviour.lastGCTime = Time.time;}}voidOnDestroy(){if(luaOnDestroy !=null){luaOnDestroy();}
- luaOnDestroy =null;
- luaUpdate =null;
- luaStart =null;
- scriptEnv.Dispose();
- injections =null;}}}
复制代码 ? LuaTestScript.lua.txt 代码- local speed =10local lightCpnt =nilfunctionstart()print("lua start...")print("injected object", lightObject)
- lightCpnt= lightObject:GetComponent(typeof(CS.UnityEngine.Light))--得到灯光对象endfunctionupdate()local r = CS.UnityEngine.Vector3.up * CS.UnityEngine.Time.deltaTime * speed
- self.transform:Rotate(r)--对脚本挂载的物体进行旋转
- lightCpnt.color = CS.UnityEngine.Color(CS.UnityEngine.Mathf.Sin(CS.UnityEngine.Time.time)/2+0.5,0,0,1)endfunctionondestroy()print("lua destroy")end
复制代码 <div id="marketingBox" class="marketing-box"><div class="marketing-content">
暑期编程PK赛
得CSDN机械键盘等精美礼品! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|