[Unity]枚举类型变量对应的序号和名字。get;set;方法,构造函数的使用

本文介绍了如何在Unity中显示枚举类型的序号和名称,通过4种代码实现方式,包括常规方法、使用get;set;属性以及构造函数。讨论了get;set;用于保护变量和构造函数在初始化时的作用,并探索了继承MonoBehaviour对Unity Inspector显示的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用(int)强制转换即可。


        Game g = Game.cc;
        //Debug.Log("   Game g:"+System.Enum.GetNames(g.GetType()).Length);
        Debug.Log("   Game g:" +(int)g);

public enum Game {aa,bb,cc }

-----------------------------以下都是废话

本文用 4种不同的 代码 来 实现 枚举类型 变量 显示 对应的序号。(使用了相关文章1的很多内容)

同时来探讨 get;set;方法 和 构造函数 的实际使用。


本文的这张大图,已经包含了全部内容。



1.1常规方法实现 显示枚举类型变量 对应的序号和名字


test.cs

using UnityEngine;

//这里的test必须 继承 MonoBehaviour,否则test[]数组 无法正常 工作
public class test : MonoBehaviour {

    public MyEnum name;//定义一个 MyEnum 枚举类型 的变量 名字 为 name的  MyEnum 枚举类型 的变量
    public int value;//

    public void initValue(MyEnum _name,int _value)
    {
        name = _name;
        value = _value;

    }


}
//定义 全局 枚举变量
public enum MyEnum { enum1,enum2,enum3}

TestManager.cs

using UnityEngine;

public class TestManager : MonoBehaviour {

    public test[] test_array;//定义一个 专门 存放 test 类型 的数组

    private void Start()
    {
        int numSlots = System.Enum.GetNames(typeof(MyEnum)).Length;
        test_array = new test[numSlots];

        DoSomething();
    }

    private void DoSomething()
    {
        for (int i = 0; i < test_array.Length; i++)
        {
            int indexNum = -1;
            MyEnum cp = MyEnum.enum1;
            //System.Enum.
            //string name in System.Enum.GetNames(typeof(CharacterProperty))
            foreach (MyEnum name in System.Enum.GetValues(typeof(CharacterProperty)))
            {
                indexNum = indexNum + 1;
                if (indexNum == i)
                {
                    cp = name;
                }
                // TODO:遍历操作    
            }
            test_array[i] = new test();
            test_array[i].initValue(cp, i);
            Debug.Log("name:" + test_array[i].name+"   value:" + test_array[i].value);
        }
    }
}

1.2使用 get;set;方法

get;set;方法限制 外部,其他的 脚本 随意 的 set设置 test.cs 的内部的变量,起到保护的作用,另一方面

其他的脚本 可以 随意的 get 获得到 test.cs 的这几个内部的变量。


test.cs改动

using UnityEngine;

//这里的test必须 继承 MonoBehaviour,否则test[]数组 无法正常 工作
public class test : MonoBehaviour {

    public MyEnum name
    {
        get;
        private set;
    }//定义一个 MyEnum 枚举类型 的变量 名字 为 name的  MyEnum 枚举类型 的变量
    public int value
    {
        get;
        private set;
    }

    public void initValue(MyEnum _name,int _value)
    {
        name = _name;
        value = _value;

    }


}
//定义 全局 枚举变量
public enum MyEnum { enum1,enum2,enum3}


TestManager.cs没有改动


2.1使用 构造函数 来代替initValue函数

使用 构造函数来 代替 initValue函数,从而使得 test变量初始化的时候就能够 对其 内部 的变量 的值 进行初始化。

不用再额外的调用 初始化函数。


test.cs

//using UnityEngine;

//test.cs不再继承 MonoBehaviour
public class test 
{

    public MyEnum name
    {
        get;
        private set;
    }//定义一个 MyEnum 枚举类型 的变量 名字 为 name的  MyEnum 枚举类型 的变量
    public int value
    {
        get;
        private set;
    }
    //构造函数
    public test()
    {
    }
    public test(MyEnum _name, int _value)//去掉了 函数initValue的功能,用 构造函数 来代替
    {
        name = _name;
        value = _value;
    }
    /* public void initValue(MyEnum _name,int _value)
     {
         name = _name;
         value = _value;
     }*/


}
//定义 全局 枚举变量
public enum MyEnum { enum1,enum2,enum3}



TestManager.cs

using UnityEngine;

public class TestManager : MonoBehaviour {

    public test[] test_array;//定义一个 专门 存放 test 类型 的数组

    private void Start()
    {
        int numSlots = System.Enum.GetNames(typeof(MyEnum)).Length;
        test_array = new test[numSlots];

        DoSomething();
    }

    private void DoSomething()
    {
        for (int i = 0; i < test_array.Length; i++)
        {
            int indexNum = -1;
            MyEnum cp = MyEnum.enum1;
            //System.Enum.
            //string name in System.Enum.GetNames(typeof(CharacterProperty))
            foreach (MyEnum name in System.Enum.GetValues(typeof(CharacterProperty)))
            {
                indexNum = indexNum + 1;
                if (indexNum == i)
                {
                    cp = name;
                }
                // TODO:遍历操作    
            }
            test_array[i] = new test(cp, i);
            //test_array[i] = new test();
            //test_array[i].initValue(cp, i);
            Debug.Log("name:" + test_array[i].name+"   value:" + test_array[i].value);
        }
    }
}

2.2通过试验观察test.cs 是否继承MonoBehaviour 的影响


test.cs

using UnityEngine;

//test.cs不再继承 MonoBehaviour
public class test : MonoBehaviour
{

    public MyEnum name
    {
        get;
        private set;
    }//定义一个 MyEnum 枚举类型 的变量 名字 为 name的  MyEnum 枚举类型 的变量
    public int value
    {
        get;
        private set;
    }
    //构造函数
    public test()
    {
    }
    public test(MyEnum _name, int _value)//去掉了 函数initValue的功能,用 构造函数 来代替
    {
        name = _name;
        value = _value;
    }
    /* public void initValue(MyEnum _name,int _value)
     {
         name = _name;
         value = _value;
     }*/


}
//定义 全局 枚举变量
public enum MyEnum { enum1,enum2,enum3}

TestManager.cs
using UnityEngine;

public class TestManager : MonoBehaviour {

    public test[] test_array;//定义一个 专门 存放 test 类型 的数组

    private void Start()
    {
        int numSlots = System.Enum.GetNames(typeof(MyEnum)).Length;
        test_array = new test[numSlots];

        DoSomething();
    }

    private void DoSomething()
    {
        for (int i = 0; i < test_array.Length; i++)
        {
            int indexNum = -1;
            MyEnum cp = MyEnum.enum1;
            //System.Enum.
            //string name in System.Enum.GetNames(typeof(CharacterProperty))
            foreach (MyEnum name in System.Enum.GetValues(typeof(CharacterProperty)))
            {
                indexNum = indexNum + 1;
                if (indexNum == i)
                {
                    cp = name;
                }
                // TODO:遍历操作    
            }
            test_array[i] = new test(cp, i);
            //test_array[i] = new test();
            //test_array[i].initValue(cp, i);
            Debug.Log("name:" + test_array[i].name+"   value:" + test_array[i].value);
        }
    }
}


结合2.1和2.2,来看,继承与否,对 TestManager.cs的test_array数组 在Unity 的 Inspector视图 的影响 仅限于 是否 显示。

的确能够说明 C# 的.cs 脚本 如果引用了 using UnityEngine;

.cs脚本 继承 MonoBehaviour

才能够 使得 数据 ,变量 能够 在 Unity 的 Inspector视图 下显示。对实际 的 运算 的结果 没有影响。

 




相关文章:

1.[Unity]全局枚举变量&获得枚举变量的成员数量&枚举遍历

2.

3.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值