我是编程新手,目前正在使用c#在Unity上开发无尽的运行游戏。 我一直坚持让自己的成绩系统正常工作。
玩家根据行进的距离收集分数。因此,在管理Update()
中的Score的脚本中,我有:
distance += Vector2.Distance(Player.transform.position, lastPosition);
lastPosition = Player.transform.position;
baseScore = distance;
那很好。
在此游戏中,您会因在一定距离内未撞到障碍而获得奖励,因此在我编写的玩家控制器脚本中:
public void Update()
{
distanceTraveled += Vector2.Distance(transform.position, lastPosition);
lastPosition = transform.position;
if (distanceTraveled >= 10)
{
NoHitCombo = NoHitCombo + 2;
distanceTraveled = 0;
}
[...]
}
和
public void OnTriggerEnter2D(Collider2D other)
if (other.gameObject.tag == "Obstacle")
{
NoHitCombo = 0;
distanceTraveled = 0;
}
因此,如果在NoHitCombo> 0的情况下我没有达到任何成绩,我的得分将增加* 2,* 4,* 6等。
例如:
开始时,我的得分越来越远。
NoHitCombo为2时,我想计算一个新值"Distance since NoHitCombo value has changed * NoHitCombo"
。如果它的4我想另一个值来计算距离* 4,依此类推。
我尝试在Update()
中写这样的smt:
Finalscore = baseScore * NoHitCombo;
但是这不起作用,因为我的分数随着NoHitCombo值的变化而变化。
我尝试使用if (nohitcombo > 0)
进行操作,但没有按预期工作。
我想我错过了完成拼图的东西,我尝试的一切都是错误的。 我无法解决这个问题。我可能确实需要存储乘数处于活动状态时的行进距离值,并且一旦它改变,就应该将该值添加到分数中
任何帮助将不胜感激 ps英语不是我的母语,对此感到抱歉!
答案 0 :(得分:1)
重新使用您已经获得的“自上一帧以来的距离”值
private void Update()
{
var distanceSinceLastFrame = Vector2.Distance(transform.position, lastPosition);
lastPosition = transform.position;
// ...
distanceTraveled += distanceSinceLastFrame;
if (distanceTraveled >= 10)
{
NoHitCombo = NoHitCombo + 2;
distanceTraveled = 0;
}
// ...
// if NoHitCombo is 0 use 1 instead
FinalScore += distanceSinceLastFrame * NoHitCombo == 0 ? 1 : NoHitCombo;
}
因此,您不必总是将FinalScore
设置为固定计算值,而是将distanceSinceLastFrame * NoHitCombo
添加到当前值。