C# 围绕对象按其速度方向旋转

C# 围绕对象按其速度方向旋转,c#,unity3d,orbital-mechanics,C#,Unity3d,Orbital Mechanics,(适用于Unity 5.3.5f1) 现在我正在制作一个3D摄像机,它水平地围绕播放器旋转。玩家是一个刚体滚动球体。玩家可以自由地水平旋转轴,但当没有输入时,我希望旋转重置回速度方向 现在我所需要知道的就是如何将摄像机放置在球员的速度方向后面,通过将摄像机从先前的旋转位置绕着球员旋转 这是我要找的东西的简图: 当前要更新相机以环绕播放器,我在相机上使用此脚本(带注释): 任何帮助都将是伟大的 我建议您使用矢量3.向旋转() 获取当前从播放机指向相机的向量(transform.position-

(适用于Unity 5.3.5f1) 现在我正在制作一个3D摄像机,它水平地围绕播放器旋转。玩家是一个刚体滚动球体。玩家可以自由地水平旋转轴,但当没有输入时,我希望旋转重置回速度方向

现在我所需要知道的就是如何将摄像机放置在球员的速度方向后面,通过将摄像机从先前的旋转位置绕着球员旋转

这是我要找的东西的简图:

当前要更新相机以环绕播放器,我在相机上使用此脚本(带注释):


任何帮助都将是伟大的

我建议您使用
矢量3.向旋转
()

获取当前从播放机指向相机的向量(
transform.position-Player.transform.position
),并将其朝
-Player.GetComponent().velocity.normalized*desiredDistance
(指向播放机速度相反方向的向量,其大小与相机到播放机的所需距离相对应)。然后,您可以使用
Vector3.旋转方向
,通过相应地设置相机位置,围绕播放机旋转相机(平滑或立即)

比如:

transform.position = Player.transform.position + Vector3.RotateTowards(transform.position - Player.transform.position, -Player.GetComponent<Rigidbody>().velocity.normalized * desiredDistance, step, .0f);
transform.position=Player.transform.position+Vector3.旋转(transform.position-Player.transform.position,-Player.GetComponent().velocity.normalized*所需距离,步长,.0f);
如果角度以弧度为单位进行更新,请执行步骤。(注意:应避免每次更新都调用
GetComponent()
。最好将其存储在某个位置)


我希望我正确理解了您的问题,这有助于解释代码的最后3行(正如您所说,您只理解了部分内容):带有
四元数.AngleAxis*offset的行通过绕y轴移动水平相机角度旋转矢量偏移。下一行将变换位置转换为playerposition+offset(旋转的偏移矢量)最后一行旋转变换,使得transform.forward指向播放器。这很好!但是我是否可以将期望的距离设置为我的原始偏移量和原始旋转?我还需要它锁定在y轴上,而不是在播放器上方或下方旋转,只是像二维圆周运动一样围绕播放器旋转。更新我的c到目前为止,我想我用对了(@line 45):()。我也希望加速,但我认为这已经足够一条评论了。要将所需距离设置为原始偏移距离,只需将其值设置为
desiredDistance=offset.magnity
。旋转后将其设置为相等即可将相机y位置锁定到玩家y位置:
transform.position.y=Player、 transform.position.y
(不过只要玩家的速度与y轴平行,就不需要这样做)
transform.position = Player.transform.position + Vector3.RotateTowards(transform.position - Player.transform.position, -Player.GetComponent<Rigidbody>().velocity.normalized * desiredDistance, step, .0f);