飞道的博客

Unity-Vector3打印结果不符合预期

229人阅读  评论(0)

近期在做游戏移植,把部分Unity的代码移植到laya上,发现laya上的表现跟Unity上有差异,

debug了一番,最终找到可疑点,代码实现大致是函数内使用三次Random.Range,随机出

三个值,做为Vector3的构造参数传入(new Vector3(值1,值2,值3)),然后返回Vector3,

在c#中通过Debug.LogError打印返回的Vector3,打印出来的结果不符合预期,于是写了段

测试代码,代码和运行结果如下图:

代码

结果

预期结果是-0.1到0.1之间的小数,实际打印出来的结果却不是

单独打印value1,value2,value3的值却是符合预期,

如果不知道有这回事,平时开发中很容易被输出的数据误导,

那这究竟是怎么回事?

 

首先,Vector3作为一个Struct,构造函数接收三个浮点类型的参数,内部实现应该是直接存起来而不会做任何修改,

为证实这一点,我们反编译下源代码看看(不懂的可看Unity--使用反编译软件ILSpy查看dll中的代码

通过查看源代码确实也是直接把参数存起来,那我们再看看Debug.LogError的实现

Debug.LogError接收object类型的参数,c#中object是所有类的基类,即继承树上最顶层的那个类

我们再看看object里有什么

object里有个虚函数ToString,Debug.LogError内部的实现通过调用ToString得到要输出的字符串

那我们回头再看看Vector3里的ToString实现

好家伙!把x,y,z三个值格式化输出了,F1表示保留小数点后一位

 

总结一下,在平时开发中,打印数值型的object时(如Vector3,Vector4等等),为保证准确性,最好单独把每个分量打印出来

 

 

 


转载:https://blog.csdn.net/zlQQhs/article/details/116761736
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场