
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关于作者
