12.Lua调用CSharp-枚举
12.1 知识点
准备工作
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson13_Lua调用CSharp_枚举");
定义好的枚举
--使用C#枚举的固定套路 命名空间.枚举名.枚举成员
--枚举的调用规则 和 类的调用规则是一样的
--枚举也支持命名空间的别名
--如果报错 需要在CustomSetting中去加上 然后生成代码
--别名
PrimitiveType = UnityEngine.PrimitiveType
GameObject = UnityEngine.GameObject
--通过原始模型枚举实例化立方体
local cube = GameObject.CreatePrimitive(PrimitiveType.Cube)
自定义枚举
在C#脚本自定义枚举
public enum E_StateEnum
{
State1,
State2,
State3,
}
在Lua脚本使用
--自定义枚举使用方法和定义好的一样 只是注意命名空间即可
--如果报错 需要在CustomSetting中去加上 然后生成代码
E_StateEnum = E_StateEnum
local state1 = E_StateEnum.State1
--userdata类型 保留了语言中的数据类型
print(state1)--userdata:0x26132FA0138
userdata
是一种 Lua 中的数据类型,通常用来表示由 C 或 C++ 代码创建的对象或数据结构。在 Lua 中,userdata
类型的值是不可直接访问或修改的,但可以通过 Lua 中的元方法(metamethods)实现对其行为的定义和操作。
在这种情况下,userdata
类型表示了从 C# 或其他外部语言传递给 Lua 的对象或数据,例如通过调用 Lua 的 C API 或 Lua 绑定库(如 XLua)来创建的对象。在Lua中,userdata
通常被用来表示外部对象的引用或句柄,以便在 Lua 中操作这些对象。
print(state1)
显示的内容 userdata:0x26132FA0138
表示 state1
是一个 userdata
类型的值,其内部存储的是一个对象或数据的引用。
枚举转换
local state2 = E_StateEnum.State2
--枚举转字符串
print(tostring(state2))--State2
--枚举转数字
print(state2:ToInt())--1
--数字转枚举
print(E_StateEnum.IntToEnum(2))--userdata:0x26132FC4760
print(tostring(E_StateEnum.IntToEnum(2)))--State3
--和xlua的区别是 没有提供字符串转枚举
--枚举比较
local state31 = E_StateEnum.state3
local state32 = E_StateEnum.state3
if state31==state32 then
print("枚举相等")
end
12.2 知识点代码
Lesson12_Lua调用CSharp_枚举.lua
print('我是Lua脚本 Lesson12_Lua调用CSharp_枚举')
print("**********知识点一 定义好的枚举************")
--使用C#枚举的固定套路 命名空间.枚举名.枚举成员
--枚举的调用规则 和 类的调用规则是一样的
--枚举也支持命名空间的别名
--如果报错 需要在CustomSetting中去加上 然后生成代码
--别名
PrimitiveType = UnityEngine.PrimitiveType
GameObject = UnityEngine.GameObject
--通过原始模型枚举实例化立方体
local cube = GameObject.CreatePrimitive(PrimitiveType.Cube)
print("**********知识点二 自定义枚举************")
--自定义枚举使用方法和定义好的一样 只是注意命名空间即可
--如果报错 需要在CustomSetting中去加上 然后生成代码
E_StateEnum = E_StateEnum
local state1 = E_StateEnum.State1
--userdata类型 保留了语言中的数据类型
print(state1)--userdata:0x26132FA0138
print("**********知识点三 枚举转换************")
local state2 = E_StateEnum.State2
--枚举转字符串
print(tostring(state2))--State2
--枚举转数字
print(state2:ToInt())--1
--数字转枚举
print(E_StateEnum.IntToEnum(2))--userdata:0x26132FC4760
print(tostring(E_StateEnum.IntToEnum(2)))--State3
--和xlua的区别是 没有提供字符串转枚举
--枚举比较
local state31 = E_StateEnum.state3
local state32 = E_StateEnum.state3
if state31==state32 then
print("枚举相等")
end
Lesson12_Lua调用CSharp_枚举
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson12_Lua调用CSharp_枚举 : MonoBehaviour
{
void Start()
{
LuaManager.Instance.Init();
LuaManager.Instance.Require("Lesson12_Lua调用CSharp_枚举");
}
}
public enum E_StateEnum
{
State1,
State2,
State3,
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com