[Unity]枚举类型变量对应的序号和名字。get;set;方法,构造函数的使用
发布日期:2021-05-09 11:55:00 浏览次数:2 分类:技术文章

本文共 5983 字,大约阅读时间需要 19 分钟。

使用(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不再继承 MonoBehaviourpublic 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不再继承 MonoBehaviourpublic 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.

2.

3.

转载地址:https://blog.csdn.net/BuladeMian/article/details/79446909 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:[Unity]时间管理脚本Update函数只调用一次相关的函数
下一篇:[Unity]截图图片自动转换为2D精灵

发表评论

最新留言

感谢大佬
[***.8.128.20]2023年08月31日 10时08分54秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

莱特币,全线矿机逼近关机价……比特币机皇S9也“很难” 2019-03-07
拨乱反正:区块链行业是如何被“炒币”妖魔化的? 2019-03-07
谷歌的“量子霸权”会冲击加密世界吗? 2019-03-07
江卓尔:比特币涨到十万美元需要多少资金? 2019-03-07
区块链应用的5大方向,哪些公司正在做? 2019-03-07
70% ETH持有者亏损,回本之路漫漫,你还会坚持看多吗? 2019-03-07
央行数字货币DCEP和支付宝、微信、比特币有什么不同? 2019-03-07
工行内测数字钱包背后: 中国引领货币潮流3000年 2019-03-07
BCH的“定时炸弹”?“BCH减半”对于其来说是一场灾难 2019-03-07
长期不能落地的区块链突破口在这里 2019-03-07
嘉楠往事:浮沉八载,如今剑指美股 2019-03-07
度宇宙、网易星球、爱得钻……这些大的区块链项目能否借机重生? 2019-03-07
过去两三年 互联网科技公司的掌舵人这样看区块链 2019-03-07
七家党媒一周发布65篇区块链报道:新华社发文最多 人民日报系最关注数据和产业... 2019-03-07
乌镇•政策风口下,区块链投资大佬告诉你,机会在哪里? 2019-03-07
支撑比特币价值的东西是什么? 2019-03-07
玲听2020跨年演讲:用100页PPT找到“区块链的确定感” 2019-03-07
调查:平均年薪超15万美金,美国区块链开发待遇这么高? 2019-03-07
平安壹账通陆一帆:通过牺牲区块链价值来达到隐私保护,无价值无意义 2019-03-07
展望2020 | Coinbase:加密货币这10年都经历了什么? 2019-03-07