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

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

24.12.2020, 16:42. Показов 4001. Ответов 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
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 21
24.12.2020, 21:42  [ТС]
Студворк — интернет-сервис помощи студентам
Решил проблему, оказалось до жути забавно, осенило буквально случайно, просто у меня в inventory тег был не на том объекте, однако спасибо за помощь
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
24.12.2020, 22:27
Так понимаю что вот тут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 ()); // new Item () засунули а индекс еи не назначили
        }
//попробуите
for (int i = 0; i < cellCount.transform.childCount; i++) {
Item it = new Item();
it.id = i;
            item.Add (it); 
        }
    }
Добавлено через 40 минут
Нет понел нельз создавать Item потому ошибка, у вас пустои массив items
0
250 / 186 / 68
Регистрация: 04.03.2019
Сообщений: 1,010
25.12.2020, 00:24
Цитата Сообщение от Wonder214 Посмотреть сообщение
GameObject dropItem = Instantiate(Resources.Load<GameObject>(i nventory.item[index].prefaba));
эмм... или я спать хочу или я не понимаю этой строки
inventory.item[index].prefaba это у вас путь ?

попробуйте просто
C#
1
GameObject dropItem = Instantiate(inventory.item[index].prefaba);
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
25.12.2020, 09:10
MuaddibFremen, inventory.item - пустой, заполняется неправильно, а в переменной prefaba у него должна быть строка "Prefas/prefabName" как он может инстантиировать строку правельно он и пишет Resource.Load("строка") потом добавляет ее на сцену. Только в массиве ничего нет(Item - монобех его нельзя создавать с помощью кл.слова new. Он привязан к объекту, и до их ссылок не достучишься пока не добавишь объект на сцену. замкнутый круг) . Надо в Invertory создать массив и там же хранить все строки, оттуда и доставать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2020, 09:10
Помогаю со студенческими работами здесь

Почему код не находит ссылку?
Почему не находит ссылку вот мой контролер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) { ...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru