toLua中Lua呼叫C#:
[7]Lua指令碼呼叫C#中的class
準備工作:
1.呼叫lua指令碼
2.繫結LuaState虛擬機器,這樣在lua指令碼中才可以對C#指令碼進行訪問。
3.在lua中使用Debug列印資訊,需要在自定義CustomSetting指令碼中新增Debug,並生成wrap檔案。
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by TonyChang.
--- DateTime: 2024/5/14 6:55
---
print("----------------------toLua中呼叫c#指令碼-------------------------")
--呼叫Unity中的類
local object1 = UnityEngine.GameObject("object1")
local object2 = UnityEngine.GameObject("TonyChang")
GameObject = UnityEngine.GameObject
local object3 = GameObject("object3")
--類中的靜態物件可以使用 . 來呼叫
local TonyChang = GameObject.Find("TonyChang")
print(TonyChang.transform.position.x)
呼叫的C#自定義指令碼
Lua中呼叫自定義指令碼
與使用Debug列印資訊方式一樣,如果lua中要呼叫C#中的內容則需要在CustomSetting中新增類,要透過名稱空間.類名形式新增。之後仍需生成對應的wrap指令碼。如果有報錯,註釋掉相關內容即可!
下面在lua指令碼中的呼叫吧~
--使用Unity的Debug來列印
Debug = UnityEngine.Debug
Debug.Log("----------Hello-----------")
Vector3 = UnityEngine.Vector3
--使用 :呼叫成員方法
TonyChang.transform:Translate(Vector3.right)
Debug.Log(TonyChang.transform.position.x)
--呼叫繼承了MonoBehaviour的類
TonyChang:AddComponent(typeof(TestScripts.Test))
--呼叫沒有繼承MonoBehaviour的類
local JackStu = TestScripts.Student("Jack")
JackStu:Speak()
Lua中要呼叫的自定義類
using UnityEngine;
namespace TestScripts
{
public class Student
{
private string _name;
public Student(string name)
{
_name = name;
}
public void Speak()
{
Debug.Log("my name is " + _name);
}
}
public class Test : MonoBehaviour
{
private void Awake()
{
Debug.Log("Test.cs is running");
}
}
}
執行結果:
此處注意:在生成的Debug warp檔案時候會報錯產生,是因為wrap檔案中使用指標,將相關的程式碼註釋掉即可!
總結:在lua指令碼中呼叫:類中的靜態物件可以使用 . 來獲取,方法則使用 : 來呼叫,呼叫定義指令碼需要在配置資訊中新增,並重新生成wrap檔案。