1.Vector3.normalized
unity里对它的解释是,如下图
2.Vector3.Normalize
unity里对它的解释是,如下图
它们的区别和共同点是:
共同点:实现规范化,让一个向量保持相同的方向,但它的长度为1.0,如果这个向量太小而不能被规范化,一个零向量将会被返回。
不同点:Vector3.normalized的作特点是当前向量是不改变的并且返回一个新的规范化的向量;Vector3.Normalize的特点是改变当前向量,也就是当前向量长度是1
下面来举例说明:
Vector3.normalized的特点是什么意思呢?
打开unity,创建脚本,主体内容如下
{ Vector3 temp = new Vector3(3f, 4f, 5f); Vector3 temp1 = temp.normalized; Debug.Log(temp.ToString()); Debug.Log(temp1.ToString()); }输出如下图:
经过计算temp1长度的平方=0.4*0.4+0.6*0.6+0.7*0.7=1.22,开根号后是1.104536102,这个数据接近于1,数据都是有误差的嘛,不等于1是正常的。由图可知,经过运算后temp,temp1的值变为
temp=(3.0,4.0,5.0),也就是不变
temp1=(0.4,0.6,0.7)
你可能还不理解,再看看Vector3.Normalize()这个函数,代码如下,
{ Vector3 temp = new Vector3(3f, 4f, 5f); Debug.Log(temp.ToString()); temp.Normalize(); Debug.Log(temp.ToString()); }输出如下图,
经过Normalize()函数后,temp的值改变了,变为了(0.4,0.6,0.7)。
经过上面的例子你应该明白它们的区别了吧。
大家还记得它们的共同点里有一句话“如果这个向量太小而不能被规范化,一个零向量将会被返回”,这句话我也举一个例子,
代码如下,因为这是共同点,两个都是一个情况,所以就以Vector3.Normalize()函数为例吧,
{ Vector3 temp = new Vector3(0.00000000001f, 0.000000000004f, 0.000000000005f); Debug.Log(temp.ToString()); temp.Normalize(); Debug.Log(temp.ToString()); }它的输出情况是
好了,介绍完毕。