Войти
UnityФорумПрограммирование

GetComponent<SpriteRenderer>() в редакторе работает, на телефоне нет. (2 стр)

Страницы: 1 2 3 Следующая »
#15
11:14, 27 апр. 2021
meekobold
Ты продолжаешь путать Sprite и SpriteRenderer, это разные вещи в юнити

Компонент SpriteRenderer обладает "настройкой" sprite, так что по контексту всё верно сделано, потому и работает.

#16
(Правка: 11:28) 11:18, 27 апр. 2021
FourGen
Единственный рассинхрон пока нашел только в FindGameObjectsWithTag

Это обуславливается тем, что данный и аналогичные методы возвращают ссылку на первый встреченный в иерархии объект с заданным тэгом, а у вас таких объектов много, и в данный момент (по контексту) вам нужна ссылка на другой объект.
#17
(Правка: 16:30) 16:29, 27 апр. 2021

>MSA2

вам нужна ссылка на другой объект

Нет мне не нужна ссылка на другой объект, это я просто для примера привел. Если такую функцию вызываешь, я так понимаю предполагается найти все объекты. Просто я не сразу понял, что надо их еще отсортировать как надо, а то они перемешаны.

Ты продолжаешь путать Sprite и SpriteRenderer, это разные вещи в юнити

Это я уже понял, я просто не могу сформулировать мыслю правильно.

1) Берем в эдиторе мышкой Sprite
2) Перетаскиваем его на сцену
3) Получается GameObject у которого есть компонент SpriteRenderer и свойство Sprite
4) Вопрос, куда делся Sprite?

Wolfraider
Честно сказать, ничего не понял. Но данные проверять надо естественно по умолчанию все, но я проверяю локально, если начать делать потоки для этого и прогонять все через чего-то боюсь не осилю синхронизацию даже близко. У меня все данные собраны в одном месте, локальные не имеют принципиального значения до того как будут помещены в основные. Просто тут в связи с тем, что массив передавался криво он не инициализировал второстепенный локальный массив, и при попытке обращения к нему, например, посмотреть его размерность, оно склинивало, и не показывало ошибки так как вылетало до вывода этой самой ошибки. Это просто все отсутствие  инструмента для отладки его надо поставить и думаю такие мелочи пропадут.

не создаются через new

Да да, с этими new будь это какой нибудь нормальный язык, уже давно бы такие дикие утечки были бы. Ни Dispose ни CloseHandle, вообще халява... питон не видел, но по мне так тут в С# пиши, как хочешь.

Вынес из всего этого, что надо ставить отладочный инструмент какой-нибудь, а так же проверять заполнение массивов и всего что с индексами, даже если они типа должны быть заполнены.


Вроде доделал базовый вариант. Спасибо за помощь.

#18
17:59, 27 апр. 2021

FourGen
> 1) Берем в эдиторе мышкой Sprite
> 2) Перетаскиваем его на сцену
> 3) Получается GameObject у которого есть компонент SpriteRenderer и свойство
> Sprite
> 4) Вопрос, куда делся Sprite?
Никуда не делся, остался в ассетах. В сцене копии спрайта нет, SpriteRenderer.sprite - это ссылка на объект Sprite. В сохранённом файле сцены эта ссылка записана в виде уникального идентификатора (у каждой сущности в проекте он записан в файле .meta)

Если ты удалишь после этого Sprite из проекта, то в сцене у тебя останется "пустой" SpriteRenderer, который ничего не рисует, потому что у него .sprite == null

#19
18:26, 27 апр. 2021
meekobold
Если ты удалишь после этого Sprite из проекта, то в сцене у тебя останется "пустой" SpriteRenderer, который ничего не рисует, потому что у него .sprite == null

Возможно, что спрайт в проекте, а ссылка на него добавлена вручную в инспекторе, а при запуске скриптов при попытке присваивания она просто обнуляется.
#20
(Правка: 19:41) 19:05, 27 апр. 2021

meekobold
>MSA2

Вы не понимаете, что я имею в виду. Для меня не логично это. Если добавил спрайт то он должен быть спрайтом. Вы уже давно с Unity и смотрите на это как на данность, а я пол дня не мог понять почему положив спрайт на сцену, я не могу в переменную с типом Sprite присвоить этот самый спрайт.
Сейчас разобрался, да оно правильно все сделано, но для меня не логично.
Вопрос не в том, что я не понимаю, как с ним взаимодействовать. Вопрос в том, сколько таких моментов еще в этом Unity. В туториалах говорится  все, что угодно, кроме подобных моментов. Вот хоть ко нибудь сказал бы в каком нибудь видео, что после добавления на сцену у объекта будет другой тип, а сам объект может стать каким-то там свойством. Было бы неплохо.

>Wolfraider

возникли их копии-сущности

Они не могут возникнуть в виду того, что надо контролировать все объекты, понимать в какой переменной, что записано, как туда попало и откуда, и что будет когда оно пропадет там то или там то, а так же когда оно должно пропасть. Я не сторонник того, что при взаимодействии с объектом на экране, я не понимаю, где оно у меня записано. Я сделал модуль для этого. То есть при клике на любой объект на экране, я четко могу сказать в какой переменной записана ссылка на этот объект, как называется и у меня естественно при этом есть прямой доступ к этой переменной, а не к анонимизированному GameObject. (я спрашивал об этом ранее про иконки в инвенторе, но мне сказали не париться и работать с гемобжектами)

а можно I2=Object(A).I1 и далее Object(B).I1=I2
Object(A) Это структура у которой есть параметр I1 с типом int? Не понял записи. (я не знаю многих базовых понятий)
Так же не понял назначение этого? Почему напрямую не обратиться? Вот если бы было бы задача одновременно читать и получать данные асинхронно, тогда да, был бы поток, в который стекались бы все данные, все бы в нем проверялось бы, и потом по необходимости можно было бы туда обратиться и считать что нужно, но у меня все выполняется в псевдо-потоке, то есть асинхронно - синхронно, каламбур получился. То есть одновременно нет доступа к одним и тем же данным из разных мест.
здесь и поля с одинаковыми паттерными-шаблонными-названиями

Вот с этим у меня к сожалению беда. Названия у меня такие, что бы я понимал что там лежит и может быть вплоть до целого предложения, но так же если делается копия такой переменной ее копия называется идентично.
но непонятно и неверно это вовсе не одно и тоже

Согласен, но почему я должен устраивать истереку? Я не хочу никого обидеть, но мне просто по-барабану, кто кем меня посчитает, и я не боюсь показаться лохом там, где я действительно таким являюсь, я предпочту понять и разобраться, тем более когда мне это надо.
Сообщение 5379360 не найдено
#21
(Правка: 0:34) 0:20, 28 апр. 2021

Сорри, все равно не понимаю о чем речь... вы говорите явно на непонятном мне языке.
К полям объектов я обращаться умею.
из знакомых слов увидел только циклы и рекрусия

  • рекурсией не пользуюсь.

  • obj есть формат, я в fbx все перегоняю.

    Я знаю 4 команды if, for, while, case этого вполне достаточно, что бы сделать все что угодно.

    почему в поле Sprite
    не влез по рекрусии еще один спрайт .. если арт-объект то влезть должна серия *.gif

    Какая связь между рекурсией, спрайтом его влезанием куда-то и файлом gif? Это метафора какая-то?
    GameObj.MagicObject.magic_artefact.ID2=GameObj.MagicObject.magic_artefact.ID1

    Ну если у объекта есть 2 поля с одинаковым типом данных, почему их нельзя присвоить друг другу? Что в этом такого?
    Это получается ровно то же самое, что и:
    public struct tmp
        {
         int ID1;
         int ID2;
        }
    
    public tmp test;
    
    test.ID1 = test.ID2;
    Что имеется в виду вы о чем?

    Беглый поиск по запросу "Аспекты / Аспекты Полей" выдает что-то типа такого
    Ссылка
    но это явно не то.

    #22
    0:30, 28 апр. 2021
    FourGen
    Ну если у объекта есть 2 поля с одинаковым типом данных, почему их нельзя присвоить друг другу? Что в этом такого?
    Присвоить не получится если это не поле, а свойство.
    #23
    0:44, 28 апр. 2021

    >MSA2

    Присвоить не получится если это не поле, а свойство.

    тогда для начала надо разобраться в терминологии...

    У меня подход такой: есть такая-то фигня... из этой фигни мне надо получить эту фигню и присвоить в эту фигню, что бы эта фигня делала такую-то фигню )))
    Как оно правильно называется я без понятия.

    Вот, например, есть какой-то объект типа GameObject
    У него есть компонент SpriteRenderer
    У этого компонента есть свойство Sprite
    Я правильно говорю?
    Если да, то о каком тогда "поле" идет речь и если Sprite у примера выше это свойство, то почему я не смогу одно другому присвоить если в нем ссылка на конкретный объект с конкретным типом?

    test1.transform.GetChild(0).gameObject.GetComponent<SpriteRenderer>().sprite = test2.transform.GetChild(0).gameObject.GetComponent<SpriteRenderer>().sprite;
    не заменит спрайт?

    #24
    (Правка: 2:12) 1:22, 28 апр. 2021

    FourGen
    > не заменит спрайт?
    Заменит, но, вы наверное хотите только картинку поменять. А это по-моему sprite.texture, щас гляну точно. Да, так и есть, https://docs.unity3d.com/ScriptReference/Sprite-texture.html
    Хотя я помню просто поменять текстуру были проблемы. Меняйте целиком, раз у вас всё хорошо.

    FourGen
    > есть свойство Sprite
    Свойство может быть у воды, прозрачная, с примесями. В данном случае, это объект, который висит на GameObject (на самом деле всё где то в памяти висит, а нам лишь дают ссылку, но это не принципиально). Я к тому, что не каждый gameObject содержит sprite, то есть это не свойство. Просто надо запомнить, в терминологию лезть вовсе не обязательно. Называйте как удобнее, главное чтобы потом сами не запутались в том, как с ними работать.

    Напомните мне завтра, я помогу с кодом. Да, и опишите что вам надо, чтобы я подготовился)

    #25
    (Правка: 9:22) 7:57, 28 апр. 2021

    >Salamandr

    Да, и опишите что вам надо

    Так вроде ничего не надо. Оно работает все нормально.

    MSA2 > Присвоить не получится если это не поле, а свойство.
    Wolfraider > а можно I2=Object(A).I1 и далее Object(B).I1=I2

    Просто пытаюсь понять, где свойство, где поле (и что это), и что имелось в виду у Wolfraider (Странно , пропали сообщения от него)
    Я так понимаю, что просто неправильно называю вещи, от сюда вылезло это непонимание.
    (Я просто сказал, что для меня не логично, когда перетаскиваем на сцену спрайт, а получается из него GameObject и спрайт становится свойством SpriteRenderer)
    Так вот вероятно я не правильно употребил: становится свойством SpriteRenderer, мне пытаются это объяснить. Вот я и хочу уже коль начал, доразобраться что не так и о чем речь?

    Вот где это свойство которое не присвоить? тип данных например?

    *

    sprite.texture

    Действтельно есть еще texture. Что-то я совсем запутался.
    Картинка у которой есть т, что ее отрисовывает, в этом есть сама картинка и у этой картинки есть еще тексутра, которая судя по всему является той же картинкой...

    Вот для пример может скажете как правильно что называется?
    test1.transform.GetChild(0).gameObject.GetComponent<SpriteRenderer>().sprite.texture

    test1 - объект
    transform - Компонент? Свойство? Поле? Как оно правильно называется?
    GetChild(0) - Функция получения по индексу дочернего объекта из родителя (test1 в данном случае)
    gameObject - я так понимаю это привидение типов. Что это компонент? свойство? поле?
    GetComponent<SpriteRenderer>() - Функция получения компонента? Свойства? Поля? из объекта.
    sprite - Это объект? Компонент? Cвойство? (сам файл?? ну там ZZZ.png?)
    texture - Это я уже не понимаю что такое, если есть штука выше.

    #26
    9:16, 28 апр. 2021

    FourGen
    > (Я просто сказал, что для меня не логично, когда перетаскиваем на сцену спрайт,
    > а получается из него GameObject и спрайт становится свойством SpriteRenderer)
    Сам по себе объект типа Sprite не может в сцене находиться, это ассет - объект с данными, причём достаточно пассивный. Он ничего не знает про сцену, не умеет сам себя отрисовывать.
    В сцене живут только GameObject'ы и компоненты на них. Sprite не наследуется от компоненты, поэтому его нельзя просто добавить в сцену.
    В юнити добавлен костыль - когда ты перетаскиваешь Sprite в сцену, редактор сам создаёт за тебя gameobject, вешает на него SpriteRenderer, и пробрасывает в него ссылку на твой спрайт. Потому что это самый просто способ отрисовать спрайт в сцене.
    FourGen
    > test1.transform.GetChild(0).gameObject.GetComponent<SpriteRenderer>().sprite =
    > test2.transform.GetChild(0).gameObject.GetComponent<SpriteRenderer>().sprite;
    Это правильно и должно работать (хоть и концептуально не совсем верно в твоём случае) )

    Про свойства и поля можешь почитать что-нибудь про C# properties vs fields
    На пальцах: property - это синтаксический сахар, чтобы вместо явных вызовов

    someObject.SetProperty(value);
    value = someObject.GetProperty();
    можно было писать
    someObject.propery = value;
    value = someObject.property;

    sprite.texture не трогайте пока, это не те проперти, которых вы ищете

    #27
    (Правка: 9:55) 9:31, 28 апр. 2021

    >Salamandr

    Получите ссылку на используемую текстуру. Если он упакован, он будет указывать на атлас, если не упакован, будет указывать на исходный спрайт.

    Это возвращает только текстуру, которую в настоящее время использует спрайт. Вы не можете изменить текстуру, используя это.

    Да у меня спрайты в атласы собраны, штучных пара штук осталась, надо заняться все досортировать. Спрайт это картинка или это какой-то контейнер? В который запихана картинка, по типу как создание материала? Есть материал, а в него уже пихается и картинка и карта нормалей и тд...?

    >meekobold

    someObject.propery = value;
    value = someObject.property;

    Как бы объяснить... я вижу одинаковую запись и считаю, что это одно и то же, хотя это может быть не так.
    Вот тут как раз я выше добавил вопрос... что понимается под .property? можно пример?

    Вот для пример может скажете как правильно что называется?
    test1.transform.GetChild(0).gameObject.GetComponent<SpriteRenderer>().sprite.texture

    test1 - объект
    transform - Компонент? Свойство? Поле? Как оно правильно называется?
    GetChild(0) - Функция получения по индексу дочернего объекта из родителя (test1 в данном случае)
    gameObject - я так понимаю это привидение типов. Что это компонент? свойство? поле?
    GetComponent<SpriteRenderer>() - Функция получения компонента? Свойства? Поля? из объекта.
    sprite - Это объект? Компонент? Cвойство? (сам файл?? ну там ZZZ.png?)
    texture - Это я уже не понимаю что такое, если есть штука выше.

    В юнити добавлен костыль - когда ты перетаскиваешь Sprite в сцену, редактор сам создаёт за тебя gameobject, вешает на него SpriteRenderer, и пробрасывает в него ссылку на твой спрайт

    Это я уже понял наконец.
    В сцене живут только GameObject'ы и компоненты на них.

    А вот тут частично... а где эти самые property тогда?

    #28
    11:08, 28 апр. 2021

    Я бы порекомендовал разобраться с основами - C# и ООП
    Что такое класс, объект класса, поля и методы
    Что такое переменные и как они работают в C#, ref-type и value-type

    После этого всё, что происходит в Юнити станет сильно понятнее

    #29
    13:01, 28 апр. 2021

    meekobold
    - У меня тройной интеграл не берется.
    - Повтори сложение.

    Страницы: 1 2 3 Следующая »
    UnityФорумПрограммирование

    Тема закрыта.