12.Lua调用C#的枚举

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

×

喜欢就点赞,疼爱就打赏