以恒定距离从玩家前方获取位置

Get position from player forward at constant distance

在特定距离获取玩家前方位置的简单方法

     Vectro3 forward = player.transform.forward * distance;
     Vector3 newPlayerFronPosition= player.transform.position + new Vector3(forward.x, forward.y, forward.z);
     newPlayerFronPosition= new Vector3(newPlayerFronPosition.x, newPlayerFronPosition.y - 4f, newPlayerFronPosition.z);
     navigationCanvas.transform.position = newPlayerFronPosition;
     navigationCanvas.transform.rotation = camRotationToWatch.transform.rotation;

它实际上工作正常,但问题是当我的播放器向上或向下移动时,navCanvas 变得非常靠近我的播放器。如何始终保持特定距离??无论玩家在特定距离上方或下方看导航画布显示。(位置)

disatnceUICam = Vector3.Distance(newPlayerFronPosition, player.transform.position);

我还记录了距离,令人惊讶的是,当我向上或向下移动时,距离会发生变化。当我向上看时,它从 6 变为 12。

如果我的理解正确,并且您希望玩家前方的点在 X Z 平面上变换距玩家前方一定距离,您应该尝试这样的操作:

    Vector3 horizontalForward = new Vector3(
        player.transform.position.x + player.transform.forward.x,
        player.transform.position.y,
        player.transform.position.z + player.transform.forward.z
    ).normalized * distance;

我怀疑你所描述的情况正在发生,因为你的 'player' 变量的变换与你的游戏相机的方向有关。当相机向上看时,你的前锋的世界位置相对于相机发生变化。当您的相机变换围绕 X 轴旋转时,仅使用 X 和 Z 将产生不同的距离。也许这张图能更好地说明我的意思:

抱歉,斜边有点不靠谱,但你的想法对吗?