Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Visual Studio Нужна помощь

Vlad play Ученик (131), на голосовании 3 месяца назад
Ошибка NullReferenceException: Object reference not set to an instance of an object
MainMenu.Update () (at Assets/Scripts/MainMenu.cs:36) Код внизу
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class MainMenu : MonoBehaviour
{
[SerializeField] int money;
public int total_money;
public Text moneyText;

private void Start()
{
money = PlayerPrefs.GetInt("money");
total_money = PlayerPrefs.GetInt("total_money");
}

public void ButtonClick()
{
money++;
total_money++;
PlayerPrefs.SetInt("money", money);
PlayerPrefs.SetInt("total_money", total_money);
}

public void ToAchievements()
{
SceneManager.LoadScene(1);
}


// Update is called once per frame
void Update()
{
moneyText.text = money.ToString();
}
}
Голосование за лучший ответ
Лев Перфилов Просветленный (26061) 4 месяца назад
В инспекторе нужно выбрать для moneyText объект.
Анонов Знаток (435) 4 месяца назад
Данная ошибка означает, что к ссылке на объект не привязан экземпляр класса. То есть референс к классу текст с "именем" "moneyText" привязан к ничему. Он указывает на никакое (null) место в памяти, оттого и исключение.

Либо в инспекторе (или как оно там называется) перетаскиваешь объект, на который ссылается moneyText, либо непосредственно в коде вручную пишешь путь до твоего объекта.

И да, это ветка не про шарп, а про C/C++. Создавай в следующий раз тему в правильной ветке, и помощь придёт гораздо быстрее :).
Татьяна Просветленный (36374) 4 месяца назад
На основе предоставленного кода и сообщения об ошибке, проблема, скорее всего, заключается в том, что переменная moneyText не инициализирована. Ошибка NullReferenceException возникает, когда вы пытаетесь использовать объект, который равен null.
Убедитесь, что вы присвоили соответствующий Text компонент переменной moneyText в инспекторе Unity.
Если вы не хотите присваивать значение через инспектор, вы можете найти объект Text в коде. Добавьте следующий код в метод Start():
 private void Start()  
{
money = PlayerPrefs.GetInt("money");
total_money = PlayerPrefs.GetInt("total_money");

// Добавьте эту строку, чтобы найти Text компонент
moneyText = GameObject.Find("MoneyText").GetComponent();
}
Также рекомендуется добавить проверку на null перед использованием moneyText в методе Update():
 void Update()  
{
if (moneyText != null)
{
moneyText.text = money.ToString();
}
}
Если вы используете новую систему UI в Unity (TextMeshPro), убедитесь, что вы импортировали правильное пространство имен и используете правильный тип:
 using TMPro; 

public class MainMenu : MonoBehaviour
{
// ...
public TextMeshProUGUI moneyText;
// ...
}
Похожие вопросы