Unity的小记
今日的愚蠢
最近我都在使用unity的射线检测。可是我每次的使用都会有bug。在万般无奈之下,我只能使用平替。今天难得有空,我就将这个问题好好想了一番。当我明白自己的问题所在时,我感觉到了一份愚蠢。
射线检测函数有着许多的重载。参数Vector3 origin是决定射线起始的位置。参数Vector3 direction是表示射线从origin位置然后沿这指定的direction发射。参数float maxDistance表示这射线长度。参数int layerMask表示射线只会判断这个layer。而我在使用的时候将放置maxDistance的地方放了layerMask。这就是我最近出bug的原因。今天要不是我朋友帮我找到,我想可能我还要花上几个小时去寻找。
今日的收获
今日我也算有点收获。朋友突然说了关于Unity的layer问题。Unity的中的layer层是按二进制位来存储的。因为int只有32位,所以Unity中的layer只能设置32个。比如当我们定义了一个layer名叫“First”,然后在Unity的第8个layer上。当我们使用LayerMask.NameToLayer时返回的值为256。而256就是2的8次方。巧的是First就是layer的第8个。这就是因为Unity使用二进制位对layer进行存储。我们还是说射线检测。这里我们再设一个层为“Second”,它是Unity的第9个layer。如果我们要用射线检测这个两个层。那么我们可以在射线检测函数中的LayerMask中写入768。768的二进制表示为1100000000。这还是二进制表示。
今日句读:每一天都要选择原谅自己。你是人,有缺点,最重要的是你值得被爱。(艾莉森 . 马莉)