熱更學習筆記--toLau中lua指令碼對C#中列舉和陣列的訪問

畅知發表於2024-05-16

[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

執行結果

image-20240515230826214

[9]Lua指令碼中呼叫C#中的陣列

呼叫的C#指令碼新增內容:

image-20240515235259197

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)

執行結果:

image-20240515235136442

注意:本兩次在CustomSetting中新增的型別,之後重新生成wrap檔案,在lua中才可以正常使用到。總之,使用toLua獲取C#指令碼中內容,則需要將指令碼新增自定檔案,並生成wrap檔案。

img

相關文章