Как вызвать функцию Score () из сценария TargetHit в сценарий UpdateUI? - PullRequest
0 голосов
/ 19 марта 2020

Просто быстрый вопрос о том, как вызвать функцию Score() из TargetHit script в UpdateUI? UpdateUI покажет счет в Canvas.

Ниже приведен фрагмент 2-х сценариев.

TargetHit Script

    void OnTriggerEnter(Collider collider) 
    {
        if (collider.gameObject.tag == "Green")
        {
            AddScoreGreen();
        }
        else if (collider.gameObject.tag == "Yellow")
        {
            AddScoreYellow();
        }
        else
        {
            NoScore();
        }
        Destroy(collider.gameObject);
    }

    public int AddScoreGreen()
    {
        return ScoreIncrease + 100;
    }

    public int AddScoreYellow()
    {
        return ScoreIncrease + 50;
    }

    public int NoScore()
    {
        return ScoreIncrease = 0;
    }
}

UpdateUI-скрипт

private readonly TargetHit targetHit;
// Update is called once per frame
void Update()
{
    scoreGreen.text = targetHit.GetComponent<TargetHit>().AddScoreGreen().ToString();
    playerLevelLabel.text = "Level 1";
    timerLabel.text = FormatTime(GameManager.Instance.TimePassed);        
}

private string FormatTime(float timeInSeconds)
{
    return string.Format("Time: " + "{0}:{1:00}", Mathf.FloorToInt(timeInSeconds / 60), Mathf.FloorToInt(timeInSeconds % 60));
}

ScoreGreen() метод остановил Unity с немедленным остановленным значком - нажатия и отсутствие ошибок из-за единицы.

заранее благодарим за помощь.

1 Ответ

0 голосов
/ 19 марта 2020

Первый Вы фактически не увеличиваете свой счет следующим образом:

 public int AddScoreGreen()
 {
     return ScoreIncrease + 100;
 }

Вы просто возвращаете ScoreIncrease с добавлением 100 к возвращаемому значению. ScoreIncrease не изменяется.

Вы, вероятно, хотите это:

public void AddScoreGreen()
{
    ScoreIncrease += 100;
}

Далее это кажется неправильным:

targetHit.GetComponent<TargetHit>()

Вы уже объявили переменную типа TargetHit выше:

private readonly TargetHit targetHit;

Сделать публикацию c:

public TargetHit targetHit;

А затем в Инспекторе перетащите Объект со сценарием в слот сценария «UpdateUI».

Тогда вы сможете вызвать его:

scoreGreen.text = targetHit.getScore();

. Для этого вам нужно реализовать функцию "getter":

public int getScore ()
{
    return ScoreIncrease;
}

И, возможно, переименовать ScoreIncrease в "Score_green" и добавить другие переменные для других цветов.

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