【问题标题】:Unity - move 3d object in an AR sceneUnity - 在 AR 场景中移动 3d 对象
【发布时间】:2015-04-29 14:36:02
【问题描述】:

我有一个 AR 场景,它有一个 AR 相机、一个图像目标和下面的 3d 对象。

我创建了一个.cs 文件并附加到 ARCamera。我想将 AR 对象移动到鼠标点击位置。我为此尝试了很多代码。但我没能成功。

我知道Input.mouseposition 返回屏幕位置。我转换为 ScreenToWorldPosition 并将 3d 对象放在这个位置。 3d 对象被移动,但不是鼠标点击位置。我不知道它被移动到哪里了。

如何移动到鼠标点击位置?我的代码在这里:

Camera cam;
Vector3 target = new Vector3(0.0f, 10f,0.5f);
// Use this for initialization
void Start () {
    if (cam == null)
        cam = Camera.main;
}
void Update()
{
    if (Input.GetMouseButtonDown(0)) {
        Debug.Log("MouseDown");

        Vector3 mousePos = Input.mousePosition;
        mousePos = cam.ScreenToWorldPoint(mousePos);
        GameObject.Find("Car1").gameObject.transform.position = mousePos;
    }                                                                
}

编辑 1 如果我在场景中添加一个平面,我只能在平面上移动到鼠标点击的位置。代码取自here。但飞机阻止显示 AR 摄像机视图。截图如下:

【问题讨论】:

标签: unity3d 3d augmented-reality gameobject


【解决方案1】:

不要使用ScreenToWorldPoint,您应该对飞机使用光线投射,请参阅此答案:https://stackoverflow.com/a/29754194/785171。

飞机应该附在你的 AR 标记上。

【讨论】:

  • 谢谢。有用。如果我不想更改对象大小,我该怎么做?我想移动对象但不想缩放。
【解决方案2】:

ScreenToWorldPoint 采用 Vector3,mousePosition 基本上是 Vector2(z 轴值为 0)。您需要将mousePosition.z 值设置为某个值,以便将其放置在可见位置。示例:

Vector3 mousePos = Input.mousePosition;
mousePos = cam.ScreenToWorldPoint(mousePos);
mousePos.z = 10;
GameObject.Find("Car1").gameObject.transform.position = mousePos;

这会将位置设置为距离相机 10 个单位。

【讨论】:

  • 我应该在调用此代码之前设置单位值吗?我试过这种方式,但是在鼠标点击的位置我看不到物体?
  • 我不明白你的意思,只需将 10 调整为适合你的场景的数字。如果您正在寻找它与相机的动态距离,则需要其他功能,但流程是相同的。您看不到 3D 对象的原因是它不在相机前面。
猜你喜欢
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2015-09-14
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多