c# - 在 WorldSpace 中沿 2 个轴移动相机

标签 c# unity3d translate coordinate-transformation

我有一个相机,我想沿 2 个轴(x 和 z)移动。在局部空间我们有:

enter image description here

因为相机对象是旋转的,所以在世界空间中我们有:

enter image description here

我想要实现的是:通过用户输入沿 2 个轴移动相机 - 相机从上方观察平面并通过按下键盘按钮,用户可以在 4 个平面方向上沿平面滑动。这通过在局部空间中操作transform.position.xtransform.position.y 属性完美地工作。

但我有以下问题:用户还可以旋转相机对象。通过这样做,我无法再操纵局部空间变换,因为在某些旋转时“向上”开始意味着“向下”等等。

我尝试在世界空间中执行以下操作:

transform.Translate(transform.right * user_input, Space.World);

但这并没有达到我想要的效果,因为 transform.right 捕获了世界空间中的红色矢量。

我想做的是:沿局部空间中的红色和蓝色向量移动相机,但仍保留世界空间中的坐标。

如果有人对此提供一些意见,我将不胜感激。非常感谢!

最佳答案

你说的不是很清楚。

但是一个很常见的事情是:

只需拥有一个holder 对象。如果你愿意,也许可以把它想象成一辆“照相车”。始终保持那个“正方形”,并四处移动。然后,将相机作为该对象的子对象。

然后您可以旋转(或任何您正在做的事情)子对象。当你想要“纯”运动时,你可以移动“holder”对象。

在 Unity 中这样做非常普遍,几乎不可避免。

同样,我不知道您在问什么 :) 但希望这能解决问题。


还有一件事:您的意思可能是您希望用户四处移动对象,但是对象始终停留在地面上。如果这就是您的意思,一种方法是:在每一帧的末尾强制世界 z 位置为零(也就是说,通过在您的更新中添加一行代码)。这样做很常见,它会让你前进。或者,如果您使用的是 Rigidbody,您会很高兴地知道 Inspector 中确实有一个复选框选择器用于限制各个轴上的移动。

关于c# - 在 WorldSpace 中沿 2 个轴移动相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34770486/

相关文章:

ios - 使用 Asset Bundle 为 iOS 平台构建 Unity 游戏

c# - 统一激活和停用游戏对象

c# - 为什么我的对象不需要 ServiceKnownType?

c# - 将透明 PNG 转换为具有非黑色背景颜色的 JPG

c# - 在unity3D中使用C#发送邮件?

swift - 在 Swift 中递归更改字典中的某些键

css 将 div 翻译成它们的父级

python - 代码不从字典中删除所需的值

c# - 无法从Android应用程序接收Windows 10 UWP中的UDP广播

c# - DataGridTemplateColumn 的自定义控件