按距离加分数



我目前学习unity3d,并开始创建一个无尽的游戏,我想通过玩家在+x轴上行进的距离来增加分数,所以我只想计算玩家在+x轴上行进了多远。。如何计算?

这是我的脚本

public class Score : MonoBehaviour
public float distance;
public Transform player;
private float score = 0f;
public Text scoreText;
void Awake()
{
distance = Vector3.Distance(player.position, transform.position);
}

void Update()
{
if (distance > player.transform.position.x)
{
score = distance ++;
scoreText.text = distance.ToString();
}
}

}

你可以用这样的东西开始。我把它设置为0.1距离以获得+1分,但这个数字当然可以是任何数字。

private const float DISTANCE_REQUIRED_FOR_1_POINT = 0.1f;
private Vector3 previousPlayerPosition;
private float distanceSinceLastScore;
public Transform player;
private float score = 0f;
public Text scoreText;
void Awake()
{
//At the start save the start position.
previousPlayerPosition = player.position;
}

void Update()
{
//Calculate the distance travvelled since last update.
distanceSinceLastScore += player.position.x - previousPlayerPosition.x;
//Set the previous position the current.
previousPlayerPosition = player.position;
int scoreToAdd = 0;
while (distanceSinceLastScore > DISTANCE_REQUIRED_FOR_1_POINT)
{
//Calculate how many points to add in this update. (Likely always 1 or none)
++scoreToAdd;
distanceSinceLastScore -= DISTANCE_REQUIRED_FOR_1_POINT;
}
if (scoreToAdd > 0)
{
score += scoreToAdd;//Add to the total score.           
scoreText.text = score.ToString();//refresh the text display.
}
}

老实说,您提供的关于游戏的信息很少。但我会尝试想出一些可能的场景和解决方案。

首先,你说这是一场无休止的比赛,然后我不知道你在计算球员和一分之间的距离。所以,你的代码对我来说没有多大意义,如果我遗漏了什么,请解释一下。

现在,你说你想根据玩家在+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语句,例如,如果角色被惊呆了,就不要增加分数。所以,一切都取决于你。

我希望这个答案能帮助你,并给你一个大致的想法。如果您有任何其他相关问题,请在评论中告诉我。

最新更新