最近開始學習了xLua,踩了不少的坑,此後也會不斷更新,廢話少說,如下:
1.在Lua中引用自定義的類的函數
例:
CS.JoyStickHandler():SetVector3(tmp_Direction.x,0,tmp_Direction.y)
這是在做虛拟搖杆時要用到一個new Vector3(x,y,z),就自己在JoyatickHandler類中寫了一個setVector3(x,y,z)函數,如上所述,在調用自定義的類時也是先CS,然後自己定義的類後面要加上一個(),再去調用該類的函數。
2.在lua中調用C#的靜态函數和非靜态函數
Animator=CS.UnityEngine.GameObject.Find("Player"):GetComponent(typeof(CS.UnityEngine.Animator))
Find()是GameObject類中的靜态函數,在lua中調用用"."
GetComponent()函數是GameObject類中的非靜态函數,在lua中調用用":"
在用lua寫代碼時要牢記這兩點,不然就會習慣性的向寫C#代碼一樣都用"."去調用函數,進而重複性的出現這個錯誤。
3.xLua中調用别的lua檔案中的内容
我在網上找了很多資料,都是說用require,然而對于lua檔案的路徑并沒有一并說明,我在使用require時仍然出現了找不到該子產品的錯
require "PlayerBehaviour"
根據錯誤提示大家應該也就明白在這些路徑下并沒有找到指定的lua檔案,是以就是在提示要把lua檔案放在這些檔案夾下面,如:我放在了StreamingAssets檔案夾下面的lua檔案中
require "lua/PlayerBehaviour"
在lua檔案的一開始聲明一下檔案路徑,就可以成功調用該lua檔案中的内容了
4.雖然定義的變量中找到了Unity場景中的指定GameObject,但是由這個GameObject去找其元件會報空
player=CS.UnityEngine.GameObject.Find("Player").gameObject, Animator=player:GetComponent(typeof(CS.UnityEngine.Animator)),
是以在這個表中改為了
player=CS.UnityEngine.GameObject.Find("Player"), Animator=CS.UnityEngine.GameObject.Find("Player"):GetComponent(typeof(CS.UnityEngine.Animator)),
這樣就成功的都找到了指定的物體群組件
暫時遇到了這些問題,後續會更新記錄
3_23
5.xlua中不能強轉C#中的比如gameobject類型
在C#腳本中寫了一個轉換的函數
public GameObject TypeChange(object _object) { return (GameObject)_object; }
然後在lua中調用,實作的功能是執行個體化一個gameobject
CS.luaBehaviour():TypeChange(CS.UnityEngine.Object.Instantiate(CS.UnityEngine.GameObject.Find("Small")))
6.xlua中不能像平常我們用C#,不可以使用+=、-=操作符
7.xlua中不能像平時C#寫條件邏輯一樣非false,例
local isBool=false
if ~isBool then
print("1")
end
像這種就會報錯,說嘗試将bool值當位運算