8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
1

Не могу передать данные об объекте

05.04.2016, 14:58. Показов 1519. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На сцене есть несколько объектов, на которых весит скрипт с данными для каждого объекта. Из другого скрипта я пытаюсь забрать эти самые данные, чтобы с ними работать, но этого у меня не получается. Я понимаю, что нужно создать ссылку на объект и работать с ним, но я явно что-то не до понимаю. В чём соль?

скрипт CustomToooltip, в котором находятся данные
C#
1
2
3
    public string text = "no tooltip"; // сокращенный текст
    public string local = "no local";
    public string _id = "no _id";
TooltipManager, в этом скрипте производится работа с теми данными, которые нужно передать.

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
void OnGUI()
    {
        //-----------поле редактирования тултипа-----------
        if (ButtonMode.flag)//редакт статик
        {
            if (CustomTooltip.click)//редакт статик
            {
 
                //localTmp = loadValue.local;
                //textTmp = loadValue.text;
 
                GUI.Box(new Rect(10, 100, 250, 150), "toolTip редакор");
                GUI.BeginGroup(new Rect(10, 100, 250, 150), ""); //Открытие группы
                
                //Подписи к полям ввода текста
                GUI.Label(new Rect(10, 50, 250, 150), "язык:");
                GUI.Label(new Rect(10, 70, 250, 150), "подсказка:");
 
                //Поля ввода текста "Язык" и "тултип"
                localTmp = GUI.TextField(new Rect(80, 50, 150, 20), localTmp);
                textTmp = GUI.TextField(new Rect(80, 70, 150, 20), textTmp);
                
 
                //Кнопки
                if (GUI.Button(new Rect(80, 100, 75, 20), "сохранить"))
                {
                    TooltipXml qwerty = new TooltipXml();
                    //qwerty.EditElementXmlToolTip(_id, text, local, fullPath);
 
                    CustomTooltip.click = false;
                    print("# Save:" + textTmp + "  # --- *to xml*");
                }
                
                if (GUI.Button(new Rect(155, 100, 75, 20), "отмена"))
                {
                    CustomTooltip.click = false;
                    print("# closed #");
                    
                    TooltipXml tmp = new TooltipXml();
                    //text = tmp.LoadElementTooltip(_id, fullPath);
                    //local = tmp.LoadElementLang(_id, fullPath);
                }
                GUI.EndGroup(); //Закрытие группы
            }
        }//end if (ButtonMode.flag)
Мне нужно забрать поле "text" из CustomTooltip и передать в TooltipManager в поле "textTmp"

В CustomTooltip пытался создать метод где передаю данные. Что я делаю не так?
C#
1
2
3
4
5
6
    public void ReferToObject()
    {
        TooltipManager tmpObj = new TooltipManager();
        tmpObj.textTmp = this.text;
        tmpObj.localTmp = this.local;
    }
0
Лучшие ответы (1)
05.04.2016, 14:58
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2016, 14:58
Ответы с готовыми решениями:

Не могу передать данные (reportViewer)
1)Создал дата сет 2)Привязал к нему Report Data 3)Собственно сам код private void Vetspr() { ...

Не могу передать данные в контроллер
После входа приложение должно перенаправлять пользователя на страницу с его данными return...

Не могу передать данные через pipe
Здравствуйте. Проблема заключается в непонимании работы пайпа до конца. Вроде создал, смог ли присвоить - не знаю Отношение -...

12
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
05.04.2016, 15:10 2
CustomTooltip ct = iCanFindGO.GetComponent<CustomTooltip>();
И работайте с данными скрипта

Добавлено через 1 минуту
iCanFindGO - объект со скриптом CustomTooltip
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
05.04.2016, 15:20  [ТС] 3
Cr0c, Cr0c, что за фича такая "iCanFindGO" или это шутка такая, а я не понял?

Добавлено через 27 секунд
Cr0c, А, спасибо.

Добавлено через 7 минут
Cr0c, Дугой вопрос, как именно тогда взять тот самый объект? Что требовать от скрипта? iCanFindGO его тогда заменить на "this"?

Если, на пример создаём метод, в котором будут передаваться данные. Тогда создаём его в CustomTooltip и вызываем в другом скрипте?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
05.04.2016, 15:44 4
Naomis, this - ссылка на текущий экземпляр скрипта (того, в котором этот this и написан).
Взять можно почти десятком видов способов. Вопрос в том, что именно нужно? Выделенный объект, произвольный объект, все подряд перебрать надо?
0
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
05.04.2016, 16:16  [ТС] 5
Cr0c, Взять объект на который тыкают.

CustomTooltip
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
    public string text = "no tooltip"; // сокращенный текст
    public string local = "no local";
    public string _id = "no _id";
 
 
    private string fullPath = Path.GetFullPath(TooltipManager.XmlPath);
 
    //----------GUI-----------
    public static bool click = false;
    private bool flagTooltip = false;
 
    private float length;
 
    public void ReferToObject()
    {
        CustomTooltip ct = this.GetComponent<CustomTooltip>();
        TooltipManager tmpObj = new TooltipManager();//--------
        tmpObj.textTmp = ct.text;
        tmpObj.localTmp = ct.local;
        
    }
 
void OnMouseDown()
    {
        
        if(ButtonMode.flag)
        {
            print("click!");
            click = true;
            //ReferToObject();
 
        }
        else
        {
            //click = false;
            print("what?");
 
        }
    }
А в TooltipManager поставить данные в поле при вызове окна. Объектов несколько, следовательно и данные от них разных.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
05.04.2016, 16:48 6
Менеджер у Вас - монобех, его же нельзя new делать, это компонент. Почему не в новом UI делаете?
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
05.04.2016, 17:26  [ТС] 7
TooltipManager
C#
1
2
3
4
5
    public void ReferToObject(CustomTooltip gameObject, string textTooltip)
    {
        textTooltip = gameObject.GetComponent<CustomTooltip>().text;
 
    }
CustomTooltip
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void OnMouseDown()
    {
        
        if(ButtonMode.flag)
        {
            print("click!");
            click = true;
 
            TooltipManager tm = new TooltipManager();
            tm.ReferToObject( this, tm.textTmp );
 
        }
        else
        {
            //click = false;
            print("what?");
 
        }
    }
Делаю по другому, дебажил и gameObject в методе видел, что было "кликнуто", но результат тот же. Что не так?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
05.04.2016, 17:46 8
Если в менеджере OnGui - это наследник монобеха, а его можно AddComponent, а new нельзя делать. И почему нельзя один менеджер на все тултипы сделать? Создавать кучу экземпляров...
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
05.04.2016, 18:53  [ТС] 9
Cr0c, тогда получается, что будет открываться много-много окон для редактирования, что плохо. Как нужно использовать Addcomponent?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
05.04.2016, 19:34 10
Naomis, для добавления новому го тултипа?
C#
1
newGO.AddComponent<CustomTooltip>();
Что мешает в менеджере (или кто там за управление отвечает) отслеживать клик мышкой, рейкастить его при необходимости включать канвас с редактором и вносить в него данные выделенного го?
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
08.04.2016, 14:02  [ТС] 11
Cr0c, пытаюсь взять данные у объекта через рейкаст, в ответ получаю NullReferenceException
Prolog
1
2
3
NullReferenceException: Object reference not set to an instance of an object
TooltipManager.SelectObjectByMousePos (UnityEngine.GameObject SelectedObject) (at Assets/Scripts/TooltipManager.cs:82)
TooltipManager.Update () (at Assets/Scripts/TooltipManager.cs:72)
делаю через метод вызываемый в update
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
    void Update () 
    {
        if (Input.GetMouseButtonDown(0))
        {
            SelectObjectByMousePos(SelectedObject);
            Debug.Log(SelectedObject);
            
 
        }
    }
private void SelectObjectByMousePos(GameObject SelectedObject)
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, Constants.cMaxRayCastDistance))
        {
            // get game object
            GameObject rayCastedGO = hit.collider.gameObject;
 
            // select object
            SelectedObject = rayCastedGO;
        }
    }
Ругается на эту строчку:
C#
1
 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
В чем фича?

Добавлено через 3 минуты
Разобрался. дело было в теге "main".

Добавлено через 1 минуту
Другая проблема, рейкаст возвращает null. Что здесь не так?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
08.04.2016, 14:22 12
Лучший ответ Сообщение было отмечено Naomis как решение

Решение

Naomis, рейкаст возвращает true/false - попал не попал в коллайдер. А уже в Raycasthit будет всё остальное. Если рейкаст не попал никуда, код после него не выполняется, а значит всё верно, Raycasthit пустой, у него null везде стоит. И что за бред в функции? Почему void вместо GameObject?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    void Update () 
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject go = SelectObjectByMousePos();
            Debug.Log(go.name);
        }
    }
private GameObject SelectObjectByMousePos()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, Constants.cMaxRayCastDistance))
        {
            return hit.collider.gameObject; // если рейкаст попал
        }
 return null; // если не попал
    }
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
08.04.2016, 15:09  [ТС] 13
Удалось! Благодарю!
0
08.04.2016, 15:09
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2016, 15:09
Помогаю со студенческими работами здесь

$_POST не могу передать данные из формы
$_GET работает а $_POST нет, все написанно в одном файле что делать незнаю не передаться и все тут. &lt;?php $q = $_POST; ...

Не могу передать данные в другую Activity
В первой Activity: String table_exam = &quot;position as PS &quot; + &quot;inner join set_exam as SE on PS.id = SE.idposit &quot; + &quot;inner join...

Не могу передать данные из формы в форму
Доброго времени суток) Передаю данные из формы 1: FormNewOrder fno = new FormNewOrder(); fno.Pasc = this.numericUpDown2.Text; ...

JDBC не могу передать данные из клиента на сервер
здравствуйте все. у меня вопрос такой; 1. В Эклипсе создаю веб-динамик проект с Apache Tomcat. 2. Строю модуль который будет вводить...

Ajax. Никак не могу передать данные с использованием post
Удивительно, вроде всё правильно, а не работает... =/ Никак не могу передать данные с использованием post... Ajax: ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Отличия между let и var в JavaScript
hw_wired 12.02.2025
Работа с переменными - один из основных моментов при написании программ на JavaScript. От правильного объявления и использования переменных зависит не только читаемость кода, но и его надежность, а. . .
Подключение файла JavaScript в других файлах JavaScript
hw_wired 12.02.2025
Самый современный и рекомендуемый способ подключения JavaScript-файлов - использование системы модулей ES6 с ключевыми словами 'import' и 'export'. Этот подход позволяет явно указывать зависимости. . .
Отмена изменений, не внесенных в индекс Git
hw_wired 12.02.2025
Управление изменениями в Git - одна из важнейших задач при разработке программного обеспечения. В процессе работы часто возникают ситуации, когда нужно отменить внесенные изменения, которые еще не. . .
Что такое px, dip, dp, and sp в Android
hw_wired 12.02.2025
При разработке мобильных приложений для Android одним из ключевых вызовов становится адаптация интерфейса под различные устройства. А ведь их действительно немало - от компактных смартфонов до. . .
Отличия POST и PUT в HTTP
hw_wired 12.02.2025
В основе современного интернета лежит протокол HTTP, который определяет правила взаимодействия между клиентами и серверами. Этот протокол предоставляет набор методов, позволяющих клиентам выполнять. . .
Перемещение последних коммитов в новую ветку Git
hw_wired 12.02.2025
В процессе разработки иногда возникает ситуация, когда последние изменения в основной ветке нужно переместить в отдельную ветку разработки. Может оказаться, что вы внесли несколько коммитов в ветку. . .
GraphQL в Go (Golang)
stackoverflow 11.02.2025
В веб-разработке традиционные REST API постепенно уступают место более гибким и эффективным решениям. GraphQL - мощное средство для создания гибких API, которое позволяет клиентам запрашивать именно. . .
GraphQL и TypeScript
stackoverflow 11.02.2025
В мире современной веб-разработки GraphQL прочно занял место одного из самых перспективных подходов к созданию API. Этот язык запросов, созданный для оптимизации взаимодействия между клиентом и. . .
Переход на Composition API в Vue.js
stackoverflow 11.02.2025
Фронтенд разработчики, работающие с Vue. js, часто сталкиваются с проблемой организации логики в компонентах при использовании классического Options API. Знаете ли вы, что происходит, когда ваш. . .
Архитектура и внутреннее устройство современных процессоров
stackoverflow 11.02.2025
От первых электронных вычислительных машин, занимавших целые комнаты, до современных многоядерных процессоров размером с почтовую марку - путь развития вычислительной техники поражает воображение. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru