Оценка единства не увеличивается

c# unity3d unity5

410 просмотра

2 ответа

37 Репутация автора

public static int score;        // The player's score.
Text text;                      // Reference to the Text component.
void Awake ()
{
    // Set up the reference.
    text = GetComponent <Text> ();  
    score = 0;
}
void Update ()
{
    // Set the displayed text to be the word "Score" followed by the score value.
    text.text = "Score: " + score;
}

Это класс менеджера очков, мне нужно увеличить свой счет, но счет всегда равен нулю

public void decrease() {
    if (current () > 1)
        tm.text = tm.text.Remove (tm.text.Length - 1);
    else {
        ScoreManager1.score+=scorevalue;
        Destroy (transform.parent.gameObject);
    }
}

И этот код является то , что увеличить счет
создать холст и wantto изменить счет принадлежит тексту холст текст холста есть scoremanager1сценарий

Автор: Mehmet Ateşçi Источник Размещён: 19.12.2015 04:49

Ответы (2)


0 плюса

141 Репутация автора

Для лучшей практики объектно-ориентированного программирования вы не должны публично выставлять свою переменную счета. Это потому, что вы теряете контроль над значением, которое может быть установлено. Например; если у вас есть открытый класс и вы устанавливаете его значение на что-то, в большинстве случаев вы захотите запретить значение null, поскольку все последующие действия в классе будут возвращать исключение NullReferenceException.

Однако для того, чего вы пытаетесь достичь, вы можете использовать класс с прикрепленным статическим методом. Как вы можете видеть ниже, оценка и текстовые значения хранятся статически, а значение текста принимается при пробуждении. Затем мы используем статический метод AddScore, чтобы установить значение оценки (ограничение его значения до 0 и максимальное значение целого числа), прежде чем устанавливать свойство text текстового поля.

public class ScoreManager : MonoBehaviour
{
    private static  int     m_score;
    private static  Text    m_text;

    public void Awake()
    {
        m_text  = GetComponent<Text>();
        AddScore(0);
    }

    public static void AddScore(int p_score)
    {
        m_score = Mathf.Clamp(m_score + p_score, 0, int.MaxValue);
        m_text.text = "Score: " + m_score;
    }
}

Точно так же вы можете добавить больше статических методов для SetScore, ResetScore и любых других необходимых вам функций.

Надеюсь, что это помогло некоторым людям, если вы хотите немного другой подход, вы также можете посмотреть на статические классы по сравнению с одиночными .

Автор: MrDiVolo Размещён: 29.02.2016 02:30

0 плюса

150 Репутация автора

Вы можете использовать PlayerPrefs, чтобы сохранить свои результаты. Playerprefs используется для сохранения данных (строки, целые числа и т. Д.) Во внутреннем устройстве. В вашей ситуации это должно быть так.

  public void Start(){

                PlayerPrefs.SetInt("Score", 0);
                // Set up the reference.
                m_text  = GetComponent<Text>();
                m_score = PlayerPrefs.GetInt("Score",0);
            }
  public static void AddScore(int p_score)
    {

        m_score = Mathf.Clamp(m_score + p_score, 0, int.MaxValue);
        m_text.text = "Score: " + m_score;
        PlayerPrefs.SetInt("Score", m_score);

    }
Автор: rrsantos Размещён: 21.05.2019 08:02
32x32