【问题标题】:Move 3d object to mouse click position in unity将 3d 对象统一移动到鼠标单击位置
【发布时间】:2015-12-21 12:42:49
【问题描述】:

我创造了一个统一的场景。我将相机和 3d 统一立方体对象添加到场景中。要将对象移动到鼠标单击位置,我添加了光线投射并且它可以工作。

但我想使用我的模型。我有一个objmtl 文件。我将它们复制到Assets 文件夹。我使用下面的代码。对象移动但不准确我的点击位置。

        Plane plane = new Plane(Camera.main.transform.forward, transform.position);
        pos = Input.mousePosition;
        Ray ray = Camera.main.ScreenPointToRay(pos);
        float dist;
        if (plane.Raycast(ray, out dist))
        {
            Vector3 v = ray.GetPoint(dist);
            objectPos = v;
        }

        transform.position = objectPos;

模型的原点不是 (0,0,0)。我从一个大的 3d 模型中剪下这个对象。

我尝试转到(Screen.width/2, Screen.Height/2, 0.0f),结果如下

编辑

编辑 2

我将box collider 添加到对象中。但是对撞机的位置与物体不同。

【问题讨论】:

  • 也许您应该创建图像来显示期望行为和实际行为之间的差异。
  • @AntiHeadshot 我添加了一张图片。
  • 平面和物体在同一个Z平面上吗?你有一个透视相机,所以如果物体比平面更近,物体看起来会向外偏移,如果平面更近,那么物体看起来更靠近中心,那么它应该。
  • 物体和平面的z水平相同。因为我在运行时使用对象的 transfrom.posiiton 创建平面

标签: unity3d 3d transform raycasting


【解决方案1】:

在设置transform.position之前,您必须移动对象的空点或保存一个代表向量的变量,并将其添加到objectPos中

【讨论】:

  • transform.position 不为空。它统一定义并设置默认值。
  • @zumma 我没有说它是空的,你必须添加一个偏移量来适应网格中心的偏移量。或者将网格放在碰撞对象的子对象中,以便您可以在编辑器中移动它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
相关资源
最近更新 更多