Unity - 在 AR 场景中移动 3d 对象

Unity - move 3d object in an AR scene

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

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

我知道 Input.mouseposition returns 屏幕位置。我转换为 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 相机视图。截图如下:

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

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

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

与其玩 ScreenToWorldPoint,不如对平面使用光线投射,请参阅此答案:

飞机应该连接到您的 AR 标记。