天天看點

初學xLua踩坑記錄

最近開始學習了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"

初學xLua踩坑記錄

根據錯誤提示大家應該也就明白在這些路徑下并沒有找到指定的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)),

初學xLua踩坑記錄

是以在這個表中改為了

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值當位運算

繼續閱讀