1、new C# 对象(创建游戏物体)
LuaCallCSharp.cs
cs
using UnityEngine;
using XLua;
public class LuaCallCSharp : MonoBehaviour
{
public LuaEnv env = null;
void Start()
{
LuaEnv env = new LuaEnv();
env.DoString("require'LuaCallCSharp'");
}
private void OnDisable()
{
if(env != null)
{
env.Dispose();
env = null;
}
}
}
LuaCallCSharp.lua.txt
Lua
CS.UnityEngine.GameObject()
运行结果:在unity中创建一个游戏对象,如果添加参数
例:CS.UnityEngine.GameObject("new by lua")
注意:
- lua里头没有new关键字;
- 所有C#相关的都放到CS下,包括构造函数,静态成员属性、方法;
2、访问C# 静态属性的方法
LuaCallCSharp.lua.txt
Lua
print(CS.UnityEngine.Time.deltaTime)
CS.UnityEngine.Time.timeScale=0.5
--如果其他不对camera进行访问 用local为局部变量
local camera = CS.UnityEngine.GameObject.Find("Main Camera")
camera.name="updata by lua"
运行结果:

节约性能方法:(对于经常访问的类)
先引用局部变量再引用
LuaCallCSharp.lua.txt
Lua
local gameobject = CS.UnityEngine.GameObject
local camera = gameobject.Find("Main Camera")
camera.name="updata by lua"
local light = gameobject.Find("Directional Light")
light.name="updata by lua_1"
运行结果:

3、访问C#成员属性的方法
调用成员属性时,使用 : 进行调用
LuaCallCSharp.lua.txt
Lua
local gameobject = CS.UnityEngine.GameObject
local camera = gameobject.Find("Main Camera")
--使用 : 直接将自身camera传入作为第一个参数
--相当于 local cameracom = camera.GetComponent(camera,"Camera")
local cameracom = camera:GetComponent("Camera")
gameobject.Destroy(cameracom)
输出结果:
