Комбинированные очки в системе оценок - PullRequest
0 голосов
/ 16 января 2019

Я новичок в программировании и в настоящее время занимаюсь разработкой бесконечной игры на Unity с помощью c #. Я застрял в том, чтобы заставить мою систему оценок работать правильно.

Игрок набирает очки в зависимости от пройденного расстояния. Таким образом, в сценарии, который управляет счетом в Update(), у меня есть:

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():

Finalscore = baseScore * NoHitCombo; 

но это не работает, так как мой счет меняется вместе со значением NoHitCombo. я пробовал что-то с if (nohitcombo > 0), но ничего не работало, как предполагалось.

Мне кажется, я что-то упустил, чтобы завершить головоломку, все, что я пробовал, неправильно. Я не могу понять, чтобы решить это. Мне, вероятно, нужно сохранить значение пройденного расстояния, пока активен множитель, и как только он изменится, он должен добавить это значение к баллу

Любая помощь приветствуется ps английский не мой родной язык, извините за это!

1 Ответ

0 голосов
/ 16 января 2019

Как насчет повторного использования значения "расстояние с последнего кадра", которое вы уже получили, как

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 к текущему значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...