Как отобразить оценку на холсте с помощью Unity?

#c# #unity3d

#c# #unity3d

Вопрос:

Я не могу отобразить результат на своей winPanel в canvas.

Кодирование баллов и пользовательский интерфейс, которые отображаются на игровой сцене:-

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class getscore : MonoBehaviour

{
    public GameObject scoretext;

    private void Start()
    {
        scoretext.GetComponent<Text>().text = "0";
    }

    public void setscore(float scoretoadd)
    {
        float currentscore = float.Parse(scoretext.GetComponent<Text>().text);
        float newscore = currentscore   scoretoadd;
        scoretext.GetComponent<Text>().text = newscore.ToString("F0");
    }
}
 

введите описание изображения здесь

Затем я помещаю ту же кодировку в холст, где она должна отображать результат на моем холсте winPanel:-

введите описание изображения здесь

Вывод, где оценка отображается только на игровой сцене, но не отображается на моей winPanel в canvas:-

введите описание изображения здесь

Проблема сейчас в том, что… почему оценка не отображалась на моем холсте winPanel?

Комментарии:

1. Трудно сказать, поскольку вы не предоставили достаточно информации. Пожалуйста, также поделитесь кодом, вызывающим функцию ‘setscore’. Держу пари, что ваша переменная ‘newscore’ вычисляется неправильно. Его значение остается 0.

2. Использует ли ваша winPanel getscore скрипт?

3. попробуйте сначала отладить саму оценку Debug. Войдите в систему (newscrore) и посмотрите, каковы результаты. 2-й, ты уверен, что вызвал функцию setscore(), когда игра закончится?

4. Бишок: Я уже дал вам код setscore(); @Haytam да…

5. @OmarVector я не уверен, хммм …. ты можешь мне помочь, Омар?

Ответ №1:

Я рекомендую сохранять оценку в статическом формате с плавающей запятой, чтобы это было одно и то же число, независимо от того, откуда вы к нему обращаетесь:

 public class getscore : MonoBehaviour

{
    public GameObject scoretext;
    public static float score = 0;

    private void Start()
    {
        setscore(0);
    }

    public void setscore(float scoretoadd)
    {
        score  = scoretoadd;
        scoretext.GetComponent<Text>().text = score.ToString("F0");
    }
}
 

Не забудьте снова установить счет на 0 при перезагрузке уровня getscore.score = 0