enum中使用中文 unity_Unity中的枚举和标志

本文介绍了如何在Unity中使用C#的枚举来增强代码清晰度和准确性,特别是枚举在定义游戏状态效果时的作用。通过示例展示了如何创建枚举,以及如何利用枚举的位标志特性来组合和检查多个状态。还提到了枚举与位操作的关系,以及如何处理枚举标志在Unity Inspector中的显示问题。
摘要由CSDN通过智能技术生成

枚举和标志

今天的主题是枚举,它是C#语言中的一个很有帮助的工具,可以增强代码的清晰度以及准确性。

枚举一系列值

C#中最经常使用枚举的地方就是用来定义一系列可能值的时候。例如在制作一个角色类游戏中,角色有多个不同的状态效果。可以用一些基本的方式来定义玩家可能的状态效果:

此处我们用一个简单的if-else检测来查看应用的是哪个状态效果,哪个运行良好。但是如果你想应用一个状态效果,但是突然写成这样:

突然,就不会有什么状态效果了。我们会利用if-else栈检测来查看我们的变量是否被设置成一个非法值,但是如果使用枚举,则是一种更好的方式:

定义一个枚举

这次我们使用一个枚举来编写我们的状态效果:

这里我们定义了一个叫StatusEffect的枚举,通过给状态赋值,我们强制编译器只等于StatusEffect中的一个值,如果还像之前赋值:

游戏就不可能运行,编辑器会抛出一个错误,告诉你正在使用一个非法的枚举值,并指出你需要修复的确切的代码行。

在上述代码中,我没有制定状态的默认值,通常来说,一个枚举都是指定集合中的第一个值作为默认值的,因此在此例中,我已经说过,StatusEffect变量的任意默认值都是StatusEffect.None。

如果你发现Unity中有专门为UI自定义的枚举,那就更好了,当我打开Player组件的查看器时,看看发生什么了。

0Z25U933-0.png

一个干净整洁的下拉菜单用来选择定义的类型!

枚举位标志

StatusEffect枚举,如下:

通过如此,我们告知编译器将此枚举看做是位标记,表示每个不同的枚举值代表一个不同的位。这意味着我们必须通过给它们用2的幂来赋值,以此告知每个枚举值。另一种就是通过获取两个值的幂,然后通过移位来实现:

现在可以通过平常的位操作来控制这些枚举域了。如果你对位操作不熟悉,我会简单讲解下如何使用。

枚举标志和位操作符

现在我们的枚举值是通过System.Flags标记的,我们可以像之前一样,如下来做:

但如果玩家中毒或者行动缓慢怎么办?我们可以使用或|操作符来将多个状态值合并一起:

如果我们想移除一个状态效果,我们可以使用&操作符和取反~。

最后如果我们检测发现如果一个玩家在if语句中,我们可以使用&操作符来查看一个特定的位值:

扩展阅读

我不想此文全讲解位标志和位操作,因此我只是简要解释了下。但是如果你不了解位操作,我强烈建议你弄懂它们并制定如何使用。

我个人喜欢维基百科的这个网页:

同时,System.Flags标记的枚举不会直接在Unity的查看其中正确显示,它们不会让你选择设置某个标记的,之后以非标记的枚举类型显示。但庆幸的是,你可以自己写一个自定义的属性着色器来解决,之后我会在此文追加的!

快乐编码!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值