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

Ошибка в Unity C#,Вопрос не закрыт!!!

Олег Миклин Знаток (258), закрыт 2 года назад
При запуске игры в Unity вылазит ошибка:
NullReferenceException: Object reference not set to an instance of an object
AcMenu.setAchievs () (at Assets/Button/AcMenu.cs:63)
AcMenu.Start () (at Assets/Button/AcMenu.cs:3

(Переписывал с этого видео https://www.youtube.com/watch?v=c1WGrDtW3QI пробовал сам- не могу)
Все компоненты присутсвуют и в инспекторе стоят

Вот скрипт:

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

public class AcMenu : MonoBehaviour
{
public int money;
public int total_money;
[SerializeField] bool isFirst;

public string[] arrayTitles;
public Sprite[] arraySprites;
public GameObject button;
public GameObject content;

private List<GameObject> list = new List<GameObject>();
private VerticalLayoutGroup _group;

// Start is called before the first frame update
void Start()
{
money = PlayerPrefs.GetInt("money");
total_money = PlayerPrefs.GetInt("total_money");
isFirst = PlayerPrefs.GetInt("isFirst") == 1 ? true : true;

RectTransform rectT = content.GetComponent<RectTransform>();
rectT.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f);
_group = GetComponent<VerticalLayoutGroup>();
setAchievs();

if (isFirst)
{
StartCoroutine(IdleFarm());
}
}

private void RemovedList()
{
foreach (var elem in list)
{
Destroy(elem);
}
list.Clear();
}

void setAchievs()
{
RectTransform rectT = content.GetComponent<RectTransform>();
rectT.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f);
RemovedList();
if (arrayTitles.Length > 0);
{
var pr1 = Instantiate(button, transform);
var h = pr1.GetComponent<RectTransform>().rect.height;
var tr = GetComponent<RectTransform>();
tr.sizeDelta = new Vector2(tr.rect.width, h * arrayTitles.Length);
Destroy(pr1);
for (var i = 0; i < arrayTitles.Length; i++)
{
var pr = Instantiate(button , transform);
pr.GetComponentInChildren<Text>().text = arrayTitles[i];
pr.GetComponentsInChildren<Image>()[1].sprite = arraySprites[i];
var i1 = i;
pr.GetComponent<Button>().onClick.AddListener(() => GetAchivement(i1));
list.Add(pr);
}
}
}

void GetAchivement(int id)
{
switch (id)
{
case 0:
Debug.Log(id);
break;
case 1:
Debug.Log(id);
money += 1000;
PlayerPrefs.SetInt("money", money);
break;
}
}

IEnumerator IdleFarm()
{
yield return new WaitForSeconds(1);
money++;
Debug.Log(money);
PlayerPrefs.SetInt("money", money);
StartCoroutine(IdleFarm());
}


public void ToMenu()
{
SceneManager.LoadScene(0);
}

// Update is called once per frame
void Update()
{

}
}
Лучший ответ
Олег Олегович Просветленный (22955) 2 года назад
if (arrayTitles.Length > 0); здесь ошибка
Олег МиклинЗнаток (258) 2 года назад
ошибка не исчезла
Олег Олегович Просветленный (22955) Можете проект в облако загрузить?
Олег МиклинЗнаток (258) 2 года назад
да попробую
Олег МиклинЗнаток (258) 2 года назад
нужно корневую папку грузить?
Олег Олегович Просветленный (22955) Да. Я пока не научился как правильно перекидывать проекты
Олег МиклинЗнаток (258) 2 года назад
https://drive.google.com/drive/folders/1CuLrIntTh6wpx-yCsmY091i4cCTCvZSe?usp=share_link
Закиньте в Program Files
И в юнити хаб нажмите Open и выбиретот папку Clicer
Олег МиклинЗнаток (258) 2 года назад
Все открыл доступ
Олег Олегович Просветленный (22955) Из-за того, что в видео версия юнити 2019, а у вас 2023, текст на кнопке реализован поразному Исправьте Text на TMPro.TMP_Text
 pr.GetComponentInChildren().text = arrayTitles[i]; 
зы. У меня 2020 версия юнити
Олег МиклинЗнаток (258) 2 года назад
спасибо попробую
Олег МиклинЗнаток (258) 2 года назад
работает
Остальные ответы
ima family Знаток (496) 2 года назад
Эта ошибка возникает, когда вы пытаетесь использовать объект, который не ссылается на экземпляр объекта. Возможно, вы не назначили значение полю movement в инспекторе или в скрипте. Попробуйте добавить ссылку на компонент Movement в инспекторе или в методе Start вашего скрипта Collide. Например:

void Start () { movement = GetComponent<Movement> (); }
Похожие вопросы