从球员前进到恒定距离的位置

时间:2017-04-21 04:35:53

标签: c# unity3d unity5

让玩家在特定距离前排位置的简单方法

     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会出现在我的播放器附近。如何始终保持特定的距离。无论玩家在特定距离上看上面或下面的navcanvas显示。(位置)

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

我也记录了距离,令人惊讶的是,当我向上或向下移动时距离正在改变。当我仰视时,它从6变为12。

1 个答案:

答案 0 :(得分:1)

如果我理解你的正确,并且你想让你的玩家面前的一个点在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;

我怀疑你所描述的是什么,因为你的'玩家'变量的变换与你的游戏相机的方向有关。当相机向上看时,前方的世界位置会相对于相机发生变化。当您的相机变换围绕X轴旋转时,仅使用X和Z将产生变化的距离。也许这个图表将说明我的意思更好一点:

effect of y vector

对不起,斜边有点不稳定,但你明白了吗?