您现在的位置是:首页 >技术杂谈 >Unity 位运算介绍及使用网站首页技术杂谈

Unity 位运算介绍及使用

我寄人间雪满头丶 2023-05-30 20:00:02
简介Unity 位运算介绍及使用

介绍

位运算是指对二进制数的位(bit)进行操作的运算符,可以实现一些高效的逻辑和数学运算。Unity中常用的位运算符有以下几种:

与(&):只有两个位都是1,结果才是1;
或(|):只要两个位有一个是1,结果就是1;
非(~):如果位为0,结果是1,如果位为1,结果是0;
异或(^):两个操作数的位中,相同则结果为0,不同则结果为1;
左移(<<):左移表示乘以2,左移多少位表示乘以2的几次幂;
右移(>>):右移表示除以2,右移多少位表示除以2的几次幂;
无符号右移(>>>):无论左侧操作数的类型如何,高顺序空位位置始终设置为零。

使用

位运算的例子有很多,列举一些常见的:

1.判断一个数是否是偶数:可以用 a & 1 == 0 来判断,如果为真,说明 a 的最低位是 0,即 a 是偶数;如果为假,说明 a 的最低位是 1,即 a 是奇数。
2.交换两个数的值:可以用异或运算来实现,例如 a = a ^ b; b = a ^ b; a = a ^ b; 就可以使 a 和 b 的值互换,不需要额外的变量。
3.翻转一个数的某些位:可以用异或运算和掩码来实现,例如 a = a ^ mask; 就可以使 a 和 mask 相同位置的位取反,mask 中为 1 的位表示要翻转的位,为 0 的位表示保持不变。
4.设置一个数的某些位为 1:可以用或运算和掩码来实现,例如 a = a | mask; 就可以使 a 和 mask 相同位置的位为 1,mask 中为 1 的位表示要设置为 1 的位,为 0 的位表示保持不变。
5.清除一个数的某些位为 0:可以用与运算和掩码来实现,例如 a = a & mask; 就可以使 a 和 mask 相同位置的位为 0,mask 中为 0 的位表示要清除为 0 的位,为 1 的位表示保持不变。

Unity中使用

Unity中使用位运算的一个常见场景是处理Layer层。Layer层是用int32来表示的,每一位代表一个层。例如,第0位代表Default层,第8位代表Water层。如果想要设置一个物体或相机只显示或忽略某些层,就可以用位运算符来实现。例如:

LayerMask mask = 1 << 8; //开启Water层
LayerMask mask = 1 << 0 | 1 << 8; //开启Default层和Water层
LayerMask mask = ~ (1 << 8); //关闭Water层
LayerMask mask = ~ (1 << 0 | 1 << 8); //关闭Default层和Water层
camera.cullingMask |= 1 << LayerMask.NameToLayer (“Npc”); //打开Npc层
camera.cullingMask &= ~ (1 << LayerMask.NameToLayer (“Npc”)); //关闭Npc层
camera.cullingMask ^= 1 << LayerMask.NameToLayer (“Npc”); //开关Npc层

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。