С Новым годом! Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21

Не находит ссылку на объект

24.12.2020, 16:42. Показов 3979. Ответов 23

Студворк — интернет-сервис помощи студентам
Новичок в плане юнити, создаю на данный момент инвентарь, но возникла проблема при добавлении возможности удалить предмет с инвентаря и его респавна на сцене, юнити почему-то не может найти ссылку на объект, хотя она есть в классе этого объекта, ниже приведены сами скрипты, не ругайтесь на их "качество", сейчас только осваиваюсь и смотрю что и как работает.
Есть скрипт самого менеджера инвентаря, где прописана логика :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Inventory : MonoBehaviour {
    public List <Item> item = new List<Item>();
    public GameObject cellCount;
    public KeyCode InvOpen = KeyCode.I;
    void Start () {
        for (int i = 0; i < cellCount.transform.childCount; i++) {
            cellCount.transform.GetChild (i).GetComponent <CurItem> ().index = i;
        }
        for (int i = 0; i < cellCount.transform.childCount; i++) {
            item.Add (new Item ());
        }
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown (InvOpen)) {
            if (cellCount.activeSelf) {
                cellCount.SetActive (false);
                Cursor.lockState = CursorLockMode.Locked;
                Cursor.visible = false;
                Time.timeScale = 1;
            } else {
                cellCount.SetActive (true);
                Cursor.lockState = CursorLockMode.None;
                Cursor.visible = true;
                Time.timeScale = 0;
            }
        }
    }
    public void SeeItem (){
        for (int i = 0; i < item.Count; i++) {
                Transform cell = cellCount.transform.GetChild (i);
                Transform icon = cell.GetChild (0);
                Transform countItems = icon.GetChild (0);
                Text countTxt = countItems.GetComponent<Text> ();
                Image iconImg = icon.GetComponent<Image> ();
                
            if (item [i].id != 0) {
                iconImg.enabled = true;
                iconImg.sprite = Resources.Load<Sprite> (item [i].icona);
                if (item [i].countItem > 0) {
                    countTxt.text = item [i].countItem.ToString ();
                } 
            } if (item [i].id == 0) {
                countTxt.text = null;
                iconImg.enabled = false;
                iconImg.sprite = null;
            }
            }
        }
 
    public void TakeItem (Item curItem){
        if (curItem.isStack == true) {
            AddStackItem (curItem);
        } else {
            AddNoItem (curItem);
        }
    }
    public void AddStackItem (Item curItem) {
        for (int i = 0; i < item.Count; i++) {
            if (item[i].countItem < item[i].maxCount){
                if (item [i].id == curItem.id) {
                    item [i].countItem++;
                    SeeItem ();
                    Destroy (curItem.GetComponent<Item> ().gameObject);
                    return;
                }
            }
        }
        AddNoItem (curItem);
    }
 
    public void AddNoItem (Item curItem){
    for (int i = 0; i < item.Count; i++) {
            if (item [i].id == 0) {
            item [i] = curItem.GetComponent <Item> ();
            SeeItem ();
            Destroy (curItem.GetComponent<Item> ().gameObject);
            break;
        }
    }
}
}
А так же новый скрипт который должен удалять объект из коллекции и добавлять на сцену
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class CurItem : MonoBehaviour, IPointerClickHandler {
    public int index;
    GameObject IM;
    Inventory inventory;
    // Use this for initialization
    void Start () {
        IM = GameObject.FindGameObjectWithTag ("IM");
        inventory = IM.GetComponent <Inventory> ();
    }
 
    
    public void OnPointerClick (PointerEventData eventData){
        if (eventData.button == PointerEventData.InputButton.Right){
            Debug.Log (inventory.item [index].nameItem);
            GameObject dropItem = Instantiate(Resources.Load<GameObject>(inventory.item[index].prefaba));
            dropItem.transform.position = Camera.main.transform.position + Camera.main.transform.forward;
            inventory.item [index].countItem--;
            inventory.SeeItem ();
        }
    }
}
На каждом объекте висит скрипт Item в котором указаны параметры добавляемого предмета
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Item : MonoBehaviour {
 
    public int id;
    public string nameItem;
    [Multiline (5)]
    public string itemOps;
    public bool isStack;
    public int countItem = 0;
    public int maxCount;
    public string icona;
    public string prefaba;
    public float CarryWeight;
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2020, 16:42
Ответы с готовыми решениями:

Зачем при перегрузке оператора >> в параметр включать ссылку на объект, а не сам объект?
Зачем в параметры функции включать ссылку на объект: istream &amp;operator&gt;&gt;(istream &amp;stream, myclass &amp;ob) Почему не работает так:...

Как преобразовать ссылку на объект в указатель на этот объект?
Как преобразовать ссылку на объект в указатель на этот объект? Буду благодарен за помощь.

Webbrowser не находит ссылку
Всем привет! Я решил создать бота для сервиса накрутки vkrutilka.ru, но у меня возникла одна проблема... Когда я пытаюсь вытащить ссылку...

23
250 / 186 / 68
Регистрация: 04.03.2019
Сообщений: 1,010
24.12.2020, 17:02
так а где именно не находит?
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 18:37  [ТС]
В методе Instantiate

Добавлено через 4 минуты
Пробовал делать через public GameObject, все равно отказывается видеть
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
24.12.2020, 18:40
Цитата Сообщение от Wonder214 Посмотреть сообщение
хотя она есть в классе этого объекта
Ссылка в классе, класс на объекте, а объект отключен. Посмотри в инспекторе на объект
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 20:01  [ТС]
Пытался сделать просто через public GameObject, но все равно не хочет работать
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 20:09  [ТС]
Объект это префаб, ниже скрин.
Миниатюры
Не находит ссылку на объект  
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
24.12.2020, 20:25
И где там ссылка, не вижу. Вы как загружаете префабы из Resources?
здесь ошибка??
C#
1
iconImg.sprite = Resources.Load<Sprite> (item [i].icona);
Добавлено через 5 минут
sprite не должен быть префабом, он должен быть картинкой
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 20:28  [ТС]
Я же говорил, в методе Instantiate вот в этой строке:
GameObject dropItem = Instantiate(Resources.Load<GameObject>(i nventory.item[index].prefaba));
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 20:30  [ТС]
Вот конкретно какая ошибка вылезает при нажатии ПКМ на ячейку с объектом
Миниатюры
Не находит ссылку на объект  
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
24.12.2020, 20:33
Может быть объект не включен, только такои вариант
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 20:37  [ТС]
Скрипт инвентаря висит на игроке, скрипт удаления висит на ячейках, т.е. инвентарь в любом случае включен во время удаления, сам объект который должен создаться находиться в ресурсах с прописанным путём к префабу, я вот тоже голову ломаю почему оно не работает
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
24.12.2020, 20:40
C#
1
if (eventData.button == PointerEventData.InputButton.Right)
вот здесь у вас точно true? Попробуите
C#
1
inventory.item[index]GetComponent<Item>().prefaba
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 20:42  [ТС]
Да, сам поинтер срабатывает и код идет дальше после этого куска (дебаглогом проверял), но при создании не может найти объект
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
24.12.2020, 20:49
Бывает такое, что и не загружает по какой то ошибке inventory.item это массив скриптов или геимобджектов?
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 20:53  [ТС]
Изменил, результата нет

Добавлено через 1 минуту
Это коллекция предметов классa Item, который содержит в себе информацию о его характеристиках, в скрипте инвентаря выше можете посмотреть

Добавлено через 1 минуту
inventory это переменная через которую я получаю эту самую коллекцию
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
24.12.2020, 21:11
Цитата Сообщение от zhunshun Посмотреть сообщение
Бывает такое, что и не загружает
но то просто проверить
C#
1
Debug.Log(inventory.item[index].prefaba);
добавить туда посмотреть есть что инстантить или нет
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 21:21  [ТС]
Странно, если добавить сразу после условия лог, то он не выводит ничего
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
24.12.2020, 21:23
Wonder214, это null, скорее всего index не назначен
1
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 21:27  [ТС]
Сейчас проверил коллекцию, в ней ссылка отображается, индексы на ячейках тоже проверил все они распределены от 0 до последнего ребенка
0
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 21:29  [ТС]
Вот собственно
Миниатюры
Не находит ссылку на объект  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2020, 21:29
Помогаю со студенческими работами здесь

Почему код не находит ссылку?
Почему не находит ссылку вот мой контролерusing System; using System.Linq; using System.Web.Mvc; using store.Models; namespace...

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

Сценарий не находит объект (функцию)
Создание класса и инициализация экземпляров: &lt;?php class question { private...

Сериализовать ссылку на объект
кароч, представим, что есть некий объект класса X и есть ссылка на этот объект класса Y. Теперь задача. Нужно чтобы каким-то образом...

Вернуть ссылку на объект
есть ф-я, которая должна возвращать ссылку: class CValue { ..... }; ........ CValue&amp; COrders::operator(LPCTSTR Name) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru