XNA 3D运动朝向玩家所在的位置

时间:2013-11-23 23:22:18

标签: c# 3d rotation xna

所以我有X,Y和Z变量以及lookAt.XlookAt.YlookAt.ZlookAt是玩家正在寻找的向量。 X,Y和Z是玩家所在的位置。我通过执行以下操作来添加轮换:

// Update rotation
if (key.IsKeyDown(Keys.Left))
    rotation += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (key.IsKeyDown(Keys.Right))
    rotation -= (float)gameTime.ElapsedGameTime.TotalSeconds;
if (key.IsKeyDown(Keys.Up) && Math.Cos(rotation2) <= 0.8f)
    rotation2 += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (key.IsKeyDown(Keys.Down) && Math.Cos(rotation2) >= -0.8f)
    rotation2 -= (float)gameTime.ElapsedGameTime.TotalSeconds;

// Calculate lookAt from rotation
lookAt.X = (float)Math.Cos(rotation);
lookAt.Y = (float)Math.Sin(rotation);
lookAt.Z = (float)Math.Cos(rotation2);

现在我要做的就是让玩家在他们看的地方移动,就像在第一人称射击游戏中一样。另外,我通过执行以下操作制作视图矩阵:

view = Matrix.CreateLookAt(new Vector3(X - 10, Y - 10, Z - 10), new Vector3(lookAt.X, lookAt.Y, lookAt.Z), Vector3.UnitZ);

如果有人需要任何额外的代码,请问。谢谢!

2 个答案:

答案 0 :(得分:1)

如果lookAt指向您所看到的方向,您只需Normalize它并使用该方向移动您的播放器。

答案 1 :(得分:0)

这是官方的答案,pinckerman说:

    "lookAt points in the direction you look at, can't you simply Normalize it and use that direction to move your player? – pinckerman 28 mins ago"

我试过这个,这是一个有效的答案。感谢他,我希望这会有所帮助。

相关问题