使用(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.