学习该知识点的参考教材:Unity API解析/陈宏泉编著.——北京:人民邮电出版社,2014.9
编辑脚本的环境:Visual Studio 2022
在学习该本教材的第五章Mathf类的内容,通过跟随教材上的代码了解不同UnityAPI的具体用法时,我发现了一个问题:在本书5.2.10板块Repeat方法:取模运算的相关知识点中,教材中给出的示例代码运行出的结果,与我在Unity引擎中实际运行出的结果不同,以下为教材与Unity的截图对比:
教材:
Unity及VS2022:
图1-1
图1-2
为了找到数值不同的原因,我通过跟踪Mathf.Repeat();方法找到了涉及到的所有方法,见图:
图1-3
图1-4
图1-5
其中,Floor函数为向下取整函数,其实现的功能例如:
print(math.floor(3.7)) # 输出: 3
print(math.floor(2)) # 输出: 2
print(math.floor(-2.3)) # 输出: -3
整合以上信息,以图1-1中的"t<0,l<0时:"的系列数值为例,经过“烂笔头”的计算:得出
Debug.Log("t>0,l>0时:" + Mathf.Clamp(-1.9f,0f,-5.3f));
其实,按照图1-5的命名逻辑,此时得出的结果已经违背了Clamp方法对实现相应功能的设想(个人认为Clamp方法存在需要完善的逻辑bug,解决方法:Clamp(float value,float a,float b){//将填入的a,b参数做对比,将较大值赋给max,较小值赋给min,其它照旧......}),但鉴于仅是思维冲突,实际可继续执行,所以此时value=-1.9f<min=0f,条件为真,则此时的value值为0,故图1-2中的第二条信息输出为0,其余Unity输出和教材处不同的数值同理。
以上就是标题所体现的全部内容,此外Mathf.PingPong()方法由于也涉及到了Repeat方法,部分结果可能也与书中存在偏差,本篇文章为个人理解,和大家分享,仅供参考。希望能对遇到相同问题的朋友有所帮助,拜~