首页 文章

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

提问于
浏览
0

我有一个AR场景,其中有一个AR摄像头,一个图像目标和下面的3d对象 .

enter image description here

我创建了一个 .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;
    }                                                                
}

EDIT 1 如果我向场景添加平面,我可以移动到仅在平面上鼠标点击的位置 . 代码取自here . 但飞机阻止显示AR摄像机视图 . 截图如下:

enter image description here

2 回答

  • 0

    您应该使用针对飞机的光线投射,而不是使用 ScreenToWorldPoint ,请参阅以下答案:https://stackoverflow.com/a/29754194/785171 .

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

  • 0

    ScreenToWorldPoint 需要 Vector3mousePosition 基本上是 Vector2 (具有0 z轴值) . 您需要将 mousePosition.z 值设置为某个位置才能将其置于可查看的位置 . 例:

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

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

相关问题