Exp*_*ger 1 c# translate unity-game-engine coordinate-transformation
我有一台相机,我想沿着2轴(x和z)移动.在当地空间,我们有:
而且由于相机物体旋转,在世界空间我们有:
我想要达到的目的是:通过用户输入沿2轴移动摄像机 - 摄像机从上方看平面,按键盘按钮,用户可以沿平面4个平面方向滑动.通过操作局部空间中的transform.position.x和transform.position.y属性,这非常有效.
我有以下问题:用户也可以旋转相机对象.通过这样做,我不能再操纵局部空间变换,因为在某些旋转"向上"开始意味着"向下"等.
我试过在世界空间中做以下事情:
transform.Translate(transform.right * user_input, Space.World);
Run Code Online (Sandbox Code Playgroud)
但是,由于transform.right在世界空间中抓住红色矢量,因此无法实现我的目标.
我想要做的是:沿着局部空间中的红色和蓝色向量移动相机,但仍保留世界空间中的坐标.
如果有人提供了一些意见,我将不胜感激.谢谢你!
你说的不是很清楚.
但一个很常见的事情是:
只需拥有一个持有人对象.如果你愿意,也许可以把它想象成"相机车".始终保持一个"正方形",并移动它.然后,让相机作为该对象的孩子.
然后,您可以旋转(或者您正在做的任何事情)子对象.当您想要"纯粹"动作时,可以移动"持有者"对象.
在Unity中执行此操作是极其常见的,几乎是不可避免的.
我再也不知道你在问什么:)但希望这能解决问题.
还有一件事:你可能意味着你希望用户移动物体,但物体总是停留在地面上.如果这就是你的意思,一种方法就是这样:只需在每一帧的末尾强制世界z位置为零(也就是说,在你的更新中添加一行代码).这样做很常见,它会让你前进.或者,如果你正在使用Rigidbody,你会很高兴地知道Inspector中有一个复选框选择器用于限制各轴上的移动.