【问题标题】:How would I keep track of the Player and AI's positions for a racing game? [closed]我将如何跟踪赛车游戏中玩家和 AI 的位置? [关闭]
【发布时间】:2021-01-09 03:48:53
【问题描述】:

总结:

所以,正如问题所暗示的那样,我正在尝试开发一款赛车游戏。虽然,我需要创建一个系统来跟踪玩家和 AI 所处的位置。位置如第一、第二、第三等。

我的尝试:

起初我打算使用 Jimmy Vegas 在他的一个教程中制作的系统来开发赛车游戏,但该系统仅适用于两辆车和一个封闭的赛道/赛道。我的游戏是一款越野赛车游戏,这意味着赛道是开放的,玩家可以在那里建立自己的捷径,并且没有墙壁会限制玩家在地图上漫游的能力。这使得 Jimmy Vegas 的系统对我的赛车游戏类型毫无用处。我试图弄乱代码以找到仍然使用他的系统的方法,但我担心它不会起作用。任何帮助将不胜感激!

【问题讨论】:

  • 你会如何用一句话来概括你的问题?提示:“如何编写工作脚本?”不是有效的问题...
  • 我修改了问题,希望对您有所帮助。
  • 我是从 Reopen Votes 队列中来到这里的,虽然到目前为止还不是问题专家,但我不得不说我很难解决你的问题。如果一场比赛没有赛道,这意味着它需要将起点和终点作为单独的点(否则玩家可能会转身越过终点线)。这反过来又意味着玩家的进步可以简单地衡量为距离完成的距离。这有意义吗?所以要比较两个玩家,你会用他们当前的直线距离除以总直线距离吗?
  • @MikeSzyndel 我最终放弃了这个项目,但我的意思是赛道没有封闭,仍然有检查站,但赛道的越野部分已经完成崎岖的地形会减慢玩家的速度。因此,以牺牲速度为代价,玩家可以通过使用快捷方式将两个检查点之间的距离缩短为二。基本上不会有障碍物阻止玩家驾驶道路/赛道。
  • 好的,所以我认为在这种情况下我的想法仍然有效。玩家(或 AI)到终点/圈结束的距离是检查点之间直线距离的总和。但是,如果轨道可以将玩家带离下一个检查点,这确实会崩溃。我猜那是 2 人以上的赛车游戏有赛道......

标签: c# unity3d racing


【解决方案1】:

可能的解决方案

我不会为此编写代码,因为它过于特定于实现,但这里有一些清单伪代码。

使用以下公式计算两个玩家之间的相对位置:

  1. 首先按圈数比较。
  2. 如果圈数相同,则按检查站进行比较。
  3. 如果检查点相同,则使用距离函数与下一个检查点进行比较。这个函数可能就像欧几里得距离一样简单,但我建议您使用任何用于 AI 寻路的函数。

如果您想要所有玩家的绝对位置,请创建一个数组,并使用圈数对其进行排序,然后使用检查点打破平局,最后根据距离打破平局。

即使是每帧运行这个一百实体的比赛也不应该有任何问题。

【讨论】:

  • 谢谢,这对我有很大帮助。我会调查这些。谢谢,我知道为什么有人对你的答案投了反对票。
  • 虽然是一个快速的问题,所以根据你所说的,我应该创建一个使用类似这样的脚本:var heading = checkpoint.position - racer.position;然后应该根据该航向的大小来检查哪个赛车手最近。谁最接近谁将被视为第一名。虽然,我将如何对数组进行排序以确定其他位置?
  • "虽然,我将如何准确地对数组进行排序以确定其他位置?"对我来说有点太模糊了,无法理解您的意思。您根据它们与检查点的距离对它们进行排序。这种排序应该是最后的决胜局,即比较具有相同圈数和通过相同数量检查点的赛车手。
  • 哦,我明白了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2014-06-11
相关资源
最近更新 更多