[8]Lua指令碼呼叫C#中的列舉學習
--呼叫列舉型別
print("----------------------toLua中呼叫C#中列舉型別-------------------------")
PrimitiveType = UnityEngine.PrimitiveType
local cubeObj = GameObject.CreatePrimitive(PrimitiveType.Cube)
--使用自定義列舉
local tc = TestScripts.OUTSTANDING_STUDENTS.TonyChang
print("優秀學生代表----" .. tostring(tc) .. "排名" .. tc:ToInt())
local fl = TestScripts.OUTSTANDING_STUDENTS.IntToEnum(2)
print("數值轉列舉" .. tostring(fl))
print("列舉值一樣二者可以判等嗎?")
local us = TestScripts.OUTSTANDING_STUDENTS.UrusWong
local us2 = TestScripts.OUTSTANDING_STUDENTS.UrusWong
if us == us2 then
print("一樣")
else
print("不一樣")
end
呼叫的C#指令碼新增內容
#region 列舉
//在TestScripts名稱空間下新增列舉型別
public enum OUTSTANDING_STUDENTS
{
TonyChang,
UrusWong,
FrankLee,
JackChow
}
#endregion
執行結果
[9]Lua指令碼中呼叫C#中的陣列
呼叫的C#指令碼新增內容:
Lua指令碼中訪問陣列:
因為Array陣列是在前文中的測試指令碼TestScripts.Student類中宣告建立的,所以開頭先例項化Student物件。
使用Lua訪問C#中陣列時,可以透過層級結構獲取到對應類的陣列索引,按照C#中array資料結構型別來訪問,
注意索引最大值,可以透過迭代器遍歷訪問,也可以將其轉換為lua中的table,再遍歷訪問。
最後我們嘗試再Lua中使用C#的array陣列結構來建立使用陣列
local student = TestScripts.Student("tony")
print("----------------------訪問C#中陣列--------------------")
print("array的長度" .. student.array.Length)
print("array[0]=".. tostring(student.array[0]))
print("5 在array中的索引是" .. tostring(student.array:IndexOf(5)))
--按照C#中array陣列長度進行遍歷訪問
--所以長度要減一 才為最後一個索引
for i = 1, student.array.Length - 1 do
print("array[" .. i .. "] = " .. student.array[i])
end
--使用迭代器遍歷
local iter = student.array:GetEnumerator()
while iter:MoveNext() do
print("iter:" .. iter.Current)
end
--轉成table再遍歷
local aTable = student.array:ToTable()
for j=1,#aTable do
print("aTable: " .. tostring(aTable[j]))
end
--在lua中使用C#中的Array建立陣列
--奇葩
local createArray = System.Array.CreateInstance(typeof(System.Int32), 10)
print("createArray.Length = " .. createArray.Length)
local createArray = System.Array.CreateInstance(typeof(System.Int32), 10)
createArray[0] = 9999
print("createArray[0] = " .. createArray[0])
print("createArray" .. createArray)
執行結果:
注意:本兩次在CustomSetting中新增的型別,之後重新生成wrap檔案,在lua中才可以正常使用到。總之,使用toLua獲取C#指令碼中內容,則需要將指令碼新增自定檔案,並生成wrap檔案。