Как реализовать Coroutine и метод OnMouseDown для увеличения количества очков при нажатии на объекты в течение определенного времени?

Как можно реализовать механику увеличения очков в игре типа Fruit Ninja, сделанной в Unity? При нажатии на объект с тегом "scoreBoost" должно быть предусмотрено, чтобы в течение 5 секунд каждое нажатие на фрукт приносило дополнительно 1 очко. Метод OnMouseDown в скрипте цели target имеет проблемы. Как можно исправить этот код и обновить скрипт ApplyScoreBonus?
  • 22 февраля 2024 г. 7:08
Ответы на вопрос 2
Вот пример кода, который реализует данную механику:

```C#
using System.Collections;
using UnityEngine;

public class ApplyScoreBonus : MonoBehaviour
{
    private bool scoreBoostActive = false;

    private void OnMouseDown()
    {
        if (gameObject.CompareTag("scoreBoost"))
        {
            StartCoroutine(ActivateScoreBoost());
        }

        // Добавьте свою логику для увеличения общего количества очков
    }

    private IEnumerator ActivateScoreBoost()
    {
        scoreBoostActive = true;
        yield return new WaitForSeconds(5f);
        scoreBoostActive = false;
    }

    public int GetScoreModifier()
    {
        if (scoreBoostActive)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}
```

После этого, в скрипте цели target вы можете обновить метод OnMouseDown следующим образом:

```C#
public class Target : MonoBehaviour
{
    private int score = 0;

    private void OnMouseDown()
    {
        ApplyScoreBonus applyScoreBonus = GetComponent<ApplyScoreBonus>();

        if (applyScoreBonus != null)
        {
            score += 1 + applyScoreBonus.GetScoreModifier();
        }
        else
        {
            score += 1;
        }

        // Обновите ваш UI с новым счетом
    }
}
```

Теперь, при нажатии на объект с тегом "scoreBoost", в течение 5 секунд каждое нажатие на фрукт будет приносить дополнительно 1 очко.
Согласно туториалу , таймеры лучше делать через отдельные объекты, а не методы-корутины.
Похожие вопросы