unity3d - Unity3d中如何控制主Camera的移动

问题描述 投票:0回答:2

我正在尝试使用 Unity3D 制作一个包含 AR(增强现实)模式的移动应用程序。所以我已经将我的移动设备与我的 unity3d 程序连接起来,并且相机工作正常。但是,当移动移动设备时,unity程序内的主摄像头不会移动与移动设备移动相同的轨道。有谁知道如何改变或控制unity3d中主相机的轨道吗?

unity-game-engine augmented-reality
2个回答
0
投票

发生这种情况的原因有多种。例如,这可能是由于非居中枢轴或坐标系造成的。

请问您使用的是哪种AR系统?顺便说一句,在工作中,我们最近有一个涉及 Unity3d 和 Metaio 的项目,要弯曲系统来做我们需要的事情是一场噩梦,特别是当我们需要基于局部坐标系进行大量对象定位时。

当您提到相机的轨道时,我想可能是相机的枢轴以某种方式偏移,并且相机围绕该偏移旋转。或者相机可能是由 AR 系统控制的实际游戏对象的子节点,在这种情况下,该父节点充当相机的枢轴。

在下图中,您可以看到相机远离该中心点,并且当它旋转时,它会基于该中心点进行旋转,换句话说,相机总是试图看着该中心点,它给人一种“”的感觉移动时“绕轨道运行”。

这是图片的链接(我还不能在这个论坛上发布图片-.-) https://i.stack.imgur.com/fIcY2.png


0
投票

要控制 Unity3D 中主摄像机的移动,您可以结合使用脚本编写和输入处理。这是一个简单的例子:

  1. 在 Unity 中创建一个新的 C# 脚本并将其附加到您的主相机 GameObject。

  2. 在脚本中,声明一些变量来控制相机移动:

public float movementSpeed = 5f;
public float rotationSpeed = 150f;
  1. 在脚本的 Update() 方法中,检查来自玩家的输入并相应地更新相机的位置和旋转:
void Update()
{
    // Move camera forward/backward
    float moveVertical = Input.GetAxis("Vertical");
    transform.Translate(Vector3.forward * moveVertical * movementSpeed * Time.deltaTime);

    // Move camera left/right
    float moveHorizontal = Input.GetAxis("Horizontal");
    transform.Translate(Vector3.right * moveHorizontal * movementSpeed * Time.deltaTime);

    // Rotate camera left/right
    float rotateCamera = Input.GetAxis("Rotation");
    transform.Rotate(Vector3.up * rotateCamera * rotationSpeed * Time.deltaTime);
}
  1. 在 Unity 编辑器中,选择主摄像机 GameObject 并添加一个 Rigidbody 组件(如果还没有)。这确保了可以使用物理属性来移动相机。

  2. 在 Unity 输入管理器中设置输入轴。转到编辑 -> 项目设置 -> 输入管理器。为“垂直”、“水平”和“旋转”创建新轴(或者根据需要修改现有轴)。

  3. 测试并调整脚本中的移动和旋转速度,直到您对相机进行所需的控制。

通过这些步骤,您现在应该可以在 Unity3D 中控制主摄像机的移动和旋转。

© www.soinside.com 2019 - 2024. All rights reserved.