在unity3d中,本人感觉用的最多的应该就是向量、矩阵的计算了。比起华丽的效果、精美的3d模型,这些计算也是不容小觑的。但是今天主要先不讲向量、矩阵的计算,而是要先把他们的意思搞清楚。
首先,在unity3d的世界中,有个世界坐标,可以把它想象成为我们真是的世界。它想我们真实的世界一样,是三维的。从左到右方向是x轴,从后到前是z轴,从下到上是y轴。
其次,每个物体也都会有自己的坐标,就如同存活在世界中的物体。当我们调整物体的坐标、角度时,物体会相对于世界发生坐标、角度上的变换。这个道理看似普通,但是当我真正遇到计算几个物体的相对位置的时候还是给我带来了很大的麻烦。当我们调整物体的坐标的时候,这个坐标是在世界坐标中的点;当我们调整物体的角度时,这个角度是相对于世界坐标的角度。
那么我们现在来练习一下:每个物体都会有transform这样一个属性,这个属性记录着物体的坐标(x值,y值,z值),物体的欧拉角即分别以x轴、y轴、z轴转动的角度,物体分别在x、y、z方向的缩放倍数。例如transform.eulerAngles.x表示以x为轴的旋转角度。在3d世界中,本人现在遇到的问题很多其实还是在2d世界中的问题。这时候考虑问题的角度就需要适当简化了。例如,如果我需要有个摄像机和一个物体,摄像机应该沿着一个方向动v,而物体是沿着这个方向以s型走的。那么,如何使得在物体走的过程中,摄像机能够按照物体在v方向的速度移动?
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
你想到了吗?
由于本人是个初学者,解决问题的方法可能不是很高明,不是最好的方法,但是可以用来帮助大家理解。我是这样解决的。当摄像机和物体都有了之后,那么只要知道物体当前的坐标在摄像机运动方向的投影就可以了。摄像机和物体的transform都有了,如何计算角度呢?摄像机camera,物体object。camera.eulerAngles.y代表摄像机的以y为轴的欧拉角度,确切的说,是以世界的y轴为参照的欧拉角度,object.eulerAngles.y同理是物体以世界y轴为参照的欧拉角度。那么由camera.eulerAngles.y-object.eulerAngles.y就可以得到相差的角度。剩下的就不难解决了吧。
在这里,本人最想说明的事,世界物体中的物体都有自己的坐标,这个坐标来标明物体自己,相对于世界的旋转、朝向。至于当转动物体、移动物体的时候,这些值还是相对于世界坐标的。希望我说的重点大家能够明白。不要把物体坐标和世界坐标搞混了。
这个是本人近几天来疑惑最大的地方。希望对你有帮助。