老实说,您提供的有关游戏的信息很少。但我会尝试提出一些可能的方案和解决方案。
首先你说这是一场无休止的比赛,那么我不知道你在计算玩家和一个点之间的距离。所以,你的代码对我来说没有多大意义,如果我遗漏了什么,请解释一下。
现在,您说要根据玩家在 + x 轴上移动的距离来计算分数。所以,看看这段代码:
float previousPlayerX;
public Transform player;
private float score;
void Awake()
{
previousPlayerX= player.position.x;
score = 0;
}
void Update()
{
if (previousPlayerX < player.position.x)
{
score += player.position.x - previousPlayerX;
previousPlayerX = player.transform.position.x
}
}
只要玩家跑到+x,这段代码就会增加分数。如果玩家停止甚至转身,分数将不会更新。另外,请注意,如果您的起始位置为 0,那么您不需要减去两个位置来添加分数,您可以直接score = player.position.x
说它应该给您相同的结果。此外,我会在一个协程中实现这段代码,并有一点等待时间,以避免可能出现的错误。
现在,让我们考虑另一种情况。我不认为在无尽的奔跑游戏中角色不会无限,一般来说,角色对象是稳定的,你有点产生无尽流动的错觉。所以,假设你的角色的位置实际上并没有改变,但在游戏中,你的角色似乎在不停地奔跑。在这种情况下,您可能希望根据时间流逝增加分数。
private float score;
void Awake()
{
score = 0;
StartCoroutine(UpdateScore());
}
IEnumerator UpdateScore()
{
while(true)
{
score += 1;
yield return new WaitForSeconds(1);
}
}
正如您在第二个代码中看到的那样,我只是假设我的角色不停地运行,并且我只是将分数每秒增加 1。您可以每半秒执行一次,您可以通过乘以速度值来增加分数,或者您可以放置一个 if 语句并且如果角色被击晕则不要增加分数。所以,这一切都取决于你。
我希望这个答案对您有所帮助并给您一个总体思路。如果您还有其他与此相关的问题,请在评论中告诉我。