gpt4 book ai didi

c# - 进行平滑碰撞的最佳、最简单方法?

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:34 26 4
gpt4 key购买 nike

所以现在我正在努力使我的游戏具有一些流畅且易于制作的碰撞。我想要做的是让游戏一次添加向量的每个维度,这样如果只有 X 值可以改变,那么它只会改变 X 值。示例代码如下。

代码注释:

  • 使用 C# 并添加了 XNA 库。
  • IsCollision 方法查看输入的两个模型是否在彼此内部。
  • 玩家模型只是一个盒子,地板只是一个地板。
  • X、Y 和 Z 是相机位置,lookAt Vector 是相机注视的位置。
  • 将范数向量添加到 X、Y、Z 和 lookAt 以创建运动。
  • 游戏是 3D 的。

代码:

//Forward movement
if (key.IsKeyDown(Keys.W) || pad1.ThumbSticks.Left.Y >= 0.2)
{
//Check X axis
playerCollisionMatrix = Matrix.CreateTranslation(new Vector3(X - 10, Y - 10, Z - 10) + (norm + new Vector3(Vector3.Normalize(lookAt).X, 0, 0) / 10));
if (!IsCollision(playerModel, playerCollisionMatrix, floor, floorMatrix)) norm += new Vector3(Vector3.Normalize(lookAt).X, 0, 0) / 10;
//Check Y axis
playerCollisionMatrix = Matrix.CreateTranslation(new Vector3(X - 10, Y - 10, Z - 10) + (norm + new Vector3(0, Vector3.Normalize(lookAt).Y, 0) / 10));
if (!IsCollision(playerModel, playerCollisionMatrix, floor, floorMatrix)) norm += new Vector3(0, Vector3.Normalize(lookAt).Y, 0) / 10;
//Check Z axis
playerCollisionMatrix = Matrix.CreateTranslation(new Vector3(X - 10, Y - 10, Z - 10) + (norm + new Vector3(0, 0,Vector3.Normalize(lookAt).Z) / 10));
if (!IsCollision(playerModel, playerCollisionMatrix, floor, floorMatrix)) norm += new Vector3(0, 0, Vector3.Normalize(lookAt).Z) / 10;
}

显然不止一个,每个方向一个。但我想知道的是,这是否是最好的方法,或者是否有其他更好的方法?

可应要求提供更多代码和信息。

最佳答案

好的,我不确定是否有任何其他方法可以做到这一点,但它可以按需工作。我唯一觉得有必要添加的是一种上坡的方式,但除此之外,这种方式非常有效!如果有人提出另一种更好的方法,请发帖并回答!否则,这就是方法!

关于c# - 进行平滑碰撞的最佳、最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com