При запуске игры в 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
Олег Олегович
Просветленный
(22955)
Из-за того, что в видео версия юнити 2019, а у вас 2023, текст на кнопке реализован поразному
Исправьте Text на TMPro.TMP_Text
Эта ошибка возникает, когда вы пытаетесь использовать объект, который не ссылается на экземпляр объекта. Возможно, вы не назначили значение полю movement в инспекторе или в скрипте. Попробуйте добавить ссылку на компонент Movement в инспекторе или в методе Start вашего скрипта Collide. Например:
void Start () { movement = GetComponent<Movement> (); }
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()
{
}
}