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

Локализация, вылетает ошибка NullReferenceException: Object reference not set to an instance of an object C#

Helupekka Group Ученик (84), на голосовании 4 месяца назад
Все нормально переводит но вылетает ошибка не пойму что такое уже 4 часа сижу помогите пожалуйста.

Пишет NullReferenceException: Object reference not set to an instance of an object

С 14 по 29 строку ругается

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

public class ChangeLang : MonoBehaviour
{
public Dropdown dr;//выпадающий список

void Start()
{
Proverka();
}
public void InputMenu(int value)
{
if(value == 0){
Loacalisation.Inst.langs="ru";
dr.value=0; // На это
}
if(value == 1){
Loacalisation.Inst.langs="en";
dr.value=1; // На это
}

}
void Proverka(){
if(Loacalisation.Inst.langs=="ru"){

dr.value=0; // На это
}
if(Loacalisation.Inst.langs=="en"){

dr.value=1; // На это
}

}
}
Голосование за лучший ответ
Татьяна Просветленный (36374) 5 месяцев назад
Ошибка NullReferenceException обычно возникает, когда вы пытаетесь получить доступ к объекту, который равен null. В данном случае, ошибка происходит в строках, где используется объект Loacalisation.Inst.

### Возможные причины и решения:

1. Объект dr (Dropdown) не установлен:
Убедитесь, что объект dr назначен в инспекторе Unity. Перетащите соответствующий объект в поле dr в инспекторе для данного скрипта.

2. Объект Loacalisation.Inst равен null:
Убедитесь, что перед использованием Loacalisation.Inst, он правильно инициализирован.
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeLang : MonoBehaviour
{
public Dropdown dr; // Выпадающий список

void Start()
{
Proverka();
}

// Метод для изменения языка
public void InputMenu(int value)
{
// Проверка на null объект
if(Loacalisation.Inst != null)
{
if (value == 0)
{
Loacalisation.Inst.langs = "ru";
dr.value = 0;
}
if (value == 1)
{
Loacalisation.Inst.langs = "en";
dr.value = 1;
}
}
else
{
Debug.LogError("Локализация не установлена (Loacalisation.Inst является null)");
}
}

// Проверка языка при старте
void Proverka()
{
// Проверка на null объект
if (Loacalisation.Inst != null)
{
if (Loacalisation.Inst.langs == "ru")
{
dr.value = 0;
}
if (Loacalisation.Inst.langs == "en")
{
dr.value = 1;
}
}
else
{
Debug.LogError("Локализация не установлена (Loacalisation.Inst является null)");
}
}
}
### Дополнительные шаги:

1. Проверка Loacalisation класса:
Убедитесь, что у вас правильное написание инициализации для Loacalisation.Inst. Возможно, опечатка в имени класса или неправильная инициализация.

2. Проверка инспектора Unity:
Убедитесь, что все необходимые объекты вручную назначены в инспекторе Unity.

### Поиск источника ошибки:

Добавьте в код несколько отладочных сообщений, чтобы точнее определить источник проблемы:
 if (Loacalisation.Inst == null) 
{
Debug.LogError("Loacalisation.Inst является null. Проверьте инициализацию.");
}
else
{
Debug.Log("Loacalisation.Inst существует");
}

if (dr == null)
{
Debug.LogError("dr (Dropdown) является null. Убедитесь, что объект назначен в инспекторе.");
}
else
{
Debug.Log("dr (Dropdown) назначен");
}
### Проверка инициализации Loacalisation:

Убедитесь, что внутри вашей реализации Loacalisation объект Inst правильно инициализирован:
 public class Loacalisation 
{
public static Loacalisation Inst { get; private set; }
public string langs;

private void Awake()
{
if (Inst == null)
{
Inst = this;
}
else
{
Destroy(gameObject); // Удаляет дублирующую копию
}
}
}
Helupekka GroupУченик (84) 5 месяцев назад
Хорошо сейчас попробую, спасибо вам большое за помощь!
Похожие вопросы