1.加載文件:
新建lua腳本:Testo1:
-用遞歸實現階乘
function Fac(n)
if n<=1 then
return n
end
return n* Fac(n-1)
end
在另一個lua腳本里面:--注意:1.加載文件時,保證兩個文件在同一路徑下
--2.require的特點是加載一次
-- a = require("Test01")
-- print("require result="..tostring(a))
-- if a then
-- print("5!"..Fac(5))
-- end
-- a = loadfile("Test01.lua")
-- print("loadfile result = "..tostring(a)) --loadfile result = function: 0x7fa0f0c07420
-- print("5! = "..Fac(5)) --報錯
--dofile和loadfile:
--dofile:讀入代碼文件,並編譯執行,每調用一次dofile都會重新編譯執行一次
--loadfile:將整個模塊當做一個函數返回,並不執行代碼
--dofile是對loadfile的一次包裝
a = dofile("Test01.lua")
print("dofile result = "..tostring(a))
print("5! = "..Fac(5))
2.協程function SayHi(msg)
for i=1,10 do
print(msg..i)
--print(coroutine.status(co))
coroutine.yield() --協程掛起
print("執行到這裏了")
-- print(coroutine.status(co))
end
end
-- SayHi("lanou")
--coroutine.create:表示創建一個協程
--1.創建協程(協同程序)
co = coroutine.create(SayHi)
-- print(co) --thread: 0x7f8e32407618 當前協程句柄,地址
--2.查看協程的狀態,coroutine.status
--running:如果在協程的函數中調用status,傳入協程自身的句柄,那麼執行到這裏纔會返回running
--suspended:如果協程還未結束,即自身調用yield或者協程還未開始執行,就會返回suspended
--dead:如果一些協程執行過程中出現錯誤,或者執行正常結束,那麼就睡處於dead狀態
print(coroutine.status(co).."first") --suspended 表示掛起的意思
--3.開啓協程
isRunning = coroutine.resume(co,"laowang")
coroutine.resume(co,"laowang")
coroutine.resume(co,"laowang")
--4.查看協程是否在執行
print(isRunning) --true
print(coroutine.status(co)) --dead(執行結束)
3.繼承-- beauty = {name = ""}
--beauty相當於類,name相當於屬性
-- function beauty.talk( ... )
-- print("今天又有人遲到了")
-- beauty.name = "老王"
-- end
-- beauty.talk()
-- print(beauty.name)
-- function beauty.init(self, na)
-- print("隔壁馬上就要開辦了")
-- self.name = na
-- end
--用對象接收
-- girl = beauty
-- print(beauty.name)
-- beauty = nil
-- girl.name = "小紅"
-- girl.init(girl, "小李")
-- print(girl.name)
--繼承(模擬繼承)
--男人類
man = {name = "man",age = 25}
--兒童類
child = {}
--聲明一個繼承空間
man.__index = man
--實現繼承,child 類繼承man類
setmetatable(child,man)
print(child.name) --man
young = {}
setmetatable(young,man)
young.age = 12
child.age = 5
print("youngAge = "..young.age.." childAge = "..child.age) --youngAge = 12 childAge = 5
4.C#腳本里面lua腳本內容1>
方法一:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LuaInterface; //引用命名空間
/*
*在C#中使用lua代碼或者lua文件時,要用到luastate類型
*luaState想大於lua代碼的運行環境,只有在這個環境下,lua代碼纔會被執行
*/
public class HelloLuaTest : MonoBehaviour {
//1.創建lua對象
LuaState lua;
//方法1:直接是lua代碼的字符串
string luaStr = "print('HellOLua')";
void Start()
{
//方法1
// NormalMethod (luaStr);
}
/// <summary>
/// 方法1
/// </summary>
/// <param name="str">String.存放的lua代碼</param>
void NormalMethod(string str)
{
//使用前必須初始化lua環境對象
lua = new LuaState ();
//開啓lua運行環境
lua.Start ();
//執行一段lua代碼
lua.LuaDoString (str);
//執行完以後,釋放lua環境
lua.Dispose ();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LuaInterface; //引用命名空間
/*
*在C#中使用lua代碼或者lua文件時,要用到luastate類型
*luaState想大於lua代碼的運行環境,只有在這個環境下,lua代碼纔會被執行
*/
public class HelloLuaTest : MonoBehaviour {
//1.創建lua對象
LuaState lua;
//方法2:使用TextAsset.
public TextAsset luaStrText;
void Start()
{
方法2
NormalMethod (luaStrText.text);
}
/// <summary>
/// 方法2
/// </summary>
/// <param name="str">String.存放的lua代碼</param>
void NormalMethod(string str)
{
//使用前必須初始化lua環境對象
lua = new LuaState ();
//開啓lua運行環境
lua.Start ();
//執行一段lua代碼
lua.LuaDoString (str);
//執行完以後,釋放lua環境
lua.Dispose ();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LuaInterface; //引用命名空間
/*
*在C#中使用lua代碼或者lua文件時,要用到luastate類型
*luaState想大於lua代碼的運行環境,只有在這個環境下,lua代碼纔會被執行
*/
public class HelloLuaTest : MonoBehaviour {
//1.創建lua對象
LuaState lua;
void Start()
{
//方法3
string url = "http://10.90.87.219/reqirelua.lua";
StartCoroutine (LoadLuaStr(url));
}
//方法3
IEnumerator LoadLuaStr(string url)
{
WWW www = new WWW (url);
yield return www;
string luaStr = www.text;
//初始化lua,運行環境'
lua = new LuaState ();
lua.Start ();
//執行lua代碼
lua.DoString (www.text);
//訪問lua中變量
Debug.Log (lua ["num"]);
//訪問lua中的方法
// LuaFunction func = lua.GetFunction ("helloFunc");
// //開啓,採用受保護的方法來調用,好處:傳遞參數,運行時,其他的代碼想要調用的時候,需要本次執行完以後,纔可以,
// func.BeginPCall ();
// //給方法傳遞參數
// func.Push ("星期五");
// func.PCall ();
// func.EndPCall ();
// lua.Dispose ();
//
LuaTable table = lua.GetTable ("meta");
Debug.Log (table ["name"]);
}
}