學習筆記 C 與lua互相呼叫

2021-08-18 03:06:25 字數 2567 閱讀 3384

1.輸出lua指令碼內容:

void start ()

2.自定義loader

void start () 

private byte myloader(ref string filepath)

3.載入變數

double a = luaenv.global.get("a");//獲取到lua裡面的全域性變數 a

print(a);

//1,通過class(struct)

//值拷貝,改變任意一者,不會改變對方並且耗費效能

//可以吧型別載入到gcoptimize生成降低開銷

person p = luaenv.global.get("person");

print(p.name + "-" + p.age + "-" + p.age2);

p.name = "sikiedu.com";

luaenv.dostring("print(person.name)");

//2,通過inte***ce

//引用方式,方法裡面第乙個引數是隱藏引數,傳遞自身物件

//需要在inte***ce前面加上特性 [csharpcalllua]

iperson p = luaenv.global.get("person");

print(p.name + "-" + p.age);

p.name = "sikiedu.com";

luaenv.dostring("print(person.name)");

p.eat(12, 34);// p.eat(p,12,34);

//3,通過dictionary、list

//輕量級 前提是table裡面value和key型別需要一致

dictionarydict = luaenv.global.get>("person");

foreach (string key in dict.keys)

listlist = luaenv.global.get>("person");

foreach (object o in list)

//4,通過luatable,不推薦使用

//不需要生成**,,但是很慢,比方式2慢乙個數量級,而且沒有型別檢查

luatable tab = luaenv.global.get("person");

print(tab.get("name"));

print(tab.get("age"));

print(tab.length);

class person

[csharpcalllua]

inte***ce iperson

int age

void eat(int a,int b);

}

4.訪問函式

//訪問lua中的全域性函式

action act1 = luaenv.global.get("add");

act1();

act1 = null;//有繫結,沒這一步沒法釋放env

//1、對映到delegate

//效能好,型別安全,但是要生成很多**

add add = luaenv.global.get("add");

int resa = 0; int resb = 0;

int res = add(34, 78, out resa, out resb);

print(res);

print(resa);

print(resb);

add = null;

//2、對映到luafunction

//優缺點與前者正好相反

luafunction func = luaenv.global.get("add");

object os= func.call(1, 2);//可以傳遞任意型別引數,返回值是陣列

foreach(object o in os)

luaenv.dispose();

}

lua寫入c#

--例項化物件

cs.unityengine.gameobject("ss");

--debug

print(cs.unityengine.time.deltatime);

--給靜態變數賦值

cs.unityengine.time.timescale=0.5

--方法,把cs.unityengine作為乙個變數存起來,簡單還節省記憶體

local gameobject=cs.unityengine.gameobject

camera=gameobject.find("maincamera")

//使用.需要把自身作為第乙個引數傳遞

cameraconmmpont=camera.getcomponent(camera."camera")

//使用:不需要

cameraconmmpont=camera:getcomponent(camera."camera")

Lua 和 C 互相呼叫

api有一系列的壓棧函式,為了將棧頂的lua值轉換成c值,我們為每種型別定義乙個對應的函式 void lua pushnil lua state l void lua pushboolean lua state l,int bool void lua pushnumber lua state l,d...

c和lua的互相呼叫

lua和c的互相呼叫 適用於mac os 一 c呼叫lua test.c include include include include lua state l int getadd int x,int y int main int argc,char argv add.lua function a...

Lua 指令碼語言 與 C的互相呼叫

lua訪問c 將c的函式包裝成lua環境認可的函式 將包裝好的函式註冊到lua環境中 lua呼叫c函式時,c函式從棧中獲取引數,並將計算結果壓入棧,並返回壓入棧的結果的數量 從lua指令碼中呼叫c 函式,函式必須定義lua cfunction型別。格式如下 int lua cfunction lua...