有一个图片拼接的起来的预制件(可以想象为就是俄罗斯方块的那些物体)
每隔1秒下落,采用transform.Translate(0,-1,0) 进行自动下落,按左或按右就是左移或右移一格,然后还是会按每隔1秒下落,这些都正常。
但是按了旋转按键后,比如转90度,就是采用transform.Rotate(0,0,90)进行旋转,但是旋转之后,物体就不往下掉了,而是沿X轴在移动,且用print输出坐标也可以看出沿X轴再移动,但是Tanslate明明是沿Y轴下落,怀疑是沿Z轴转90度后,Y轴变X轴了,所以沿X轴动了,这要怎么解决呢?
在 Unity 中,旋转一个物体会改变其坐标系,导致旋转后的物体在进行 Translate 操作时的行为发生变化。
为了解决这个问题,可以使用 Transform.TransformDirection() 方法将世界坐标系中的移动向量转换为物体局部坐标系中的移动向量。这样,即使物体旋转了,Translate 仍然会沿着物体局部坐标系中的 Y 轴进行移动。
具体代码如下:
Vector3 moveDirection = new Vector3(0, -1, 0);
transform.Translate(transform.TransformDirection(moveDirection));
另外,也可以考虑在旋转物体后,再将物体的旋转角度归0,这样保证物体的坐标轴始终是正的。
transform.rotation = Quaternion.identity;
这样就能保证物体旋转后还是沿着Y轴移动.