在 swift 的 SceneKit 中尝试通过触摸移动角色

In SceneKit with swift trying to move character with a touch

我找不到最近而不是 objective c 中的答案。我将 SceneKit 与 swift 一起使用,并且我试图将我的角色节点移动到用户点击的位置。我尝试在触摸开始时使用命中结果,但我的楼层节点位于 (0, 0, 0),因此当它命中用户点击屏幕的大部分时间时它是无用的。我正要拿出我的旧微积分书,但后来我意识到当触摸位置总是相对于在场景中移动的屏幕位置时我不知道如何转换。如果有人可以给我 link 或提供一些建议,我将不胜感激。

要在视图和场景坐标之间进行转换,您可以使用场景渲染器的 projectPoint 和 unprojectPoint 方法,请参阅 https://developer.apple.com/reference/scenekit/scnscenerenderer

上的文档

它们可以让您在场景的 3D 坐标系和显示它的视图的 2D 坐标系之间任意转换点。

更新

您要做的是调用 unproject 函数两次,一次将 z 设置为零(使用 x/y 视图坐标),一次将其设置为 1。这将为您提供 3d 世界中的 2 个点,想象它们之间有一条线,您需要找出该线与您的地板平面相交的位置。那将是你需要的点。