分数系统中的点组合乘数

时间:2019-01-16 14:57:12

标签: c# unity3d

我是编程新手,目前正在使用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英语不是我的母语,对此感到抱歉!

1 个答案:

答案 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添加到当前值。