forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Как текстуру в RawImage грузить? (http://forum.boolean.name/showthread.php?t=20825)

Crystal 31.05.2020 11:12

Как текстуру в RawImage грузить?
 
Я заступорился на попытках загрузить и натянуть текстуру
на RawImage программно. Сам сначала пытался по всякому,
потом уже плюнул и напрямую пробовал пример копировать,
и все эти примеры не работают, так как-они о тстарых версий юнити.
Короче у меня Rawimage висит на канвасе, и на нём периодично текстуру
нужно менять, если у кого есть рабочий код на версию 2019.3f1,
я с удовольствие пощупаю.

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

P.s. Документацию юнити читал, их документация говно полное.

Crystal 31.05.2020 15:26

Ответ: Как текстуру в RawImage грузить?
 
Короче, пошёл таким путём.
Создал рав имэйдж, натянул на него текстуру,
сделал из него ассет. Загружаю ассет через SetParent
прикрепляя к объекту внутри холста.
Так работает.

Код:

public class FuckingMonIcon : MonoBehaviour
{
    public Transform Robj; // Родительский объект внутри канваса
    public GameObject MonsterIcon1; // Ассет RawImage


    public void Start()
    {

        Instantiate(MonsterIcon1).transform.SetParent(Robj);
    }
}


Пробовал то же самое через transform.parent,
юнити грузил ассет, но восклицательными знаками ругался
типа делай через SetParent, сделал, результат - ругаться перестал.
В transform.parent родительским объектом Robj являлся GameObjectom,
а в SetParent Robj должен быть не гейм обжектом, а Transform,
координатами объекта короче.

В случае кода выше, рав имэйдж грузится в глобальных координатах,
если хотим вляпать в локальных, тобишь прямо на объект к которому лепим внутри
канваса то нужно добавить параметр "false":

Код:

Instantiate(MonsterIcon1).transform.SetParent(Robj, false);
Если в SetParent в скобках поставить "null", то загружаемый рав имйёдж
не будет привязан к холсту, а улетит в иерархию как самостоятельный объект.

Код:

Instantiate(MonsterIcon1).transform.SetParent(null);

Crystal 31.05.2020 16:11

Ответ: Как текстуру в RawImage грузить?
 
Теперь решил и проблему загрузки текстуры на RawImage висящий на канвасе.

Короче, юнити странная штука, которую пишут макаки ногами.
Загрузить мы на RawImage можем текстуру только через "Resources.Load".
Самое интересное, что функция "Resources.Load" загружает текстуры
только из папок с именем "Resources". Папка может валяться где
угодно среди ассетов, главное её название, если вы решите назвать
её например "Textures", или "Zadnica", то у вас ничего не выйдет.
Здесь можно почитать про это: ТЫК

В итоге, чё делаем? Вот:

Код:

public class SUKA : MonoBehaviour
{
    public RawImage RAWA; //Сюда заранее в инспекторе запихали наш RawImage к которому этот скрипт и прикреплён
    public Texture2D TEXTA; // Сюда будем запихивать текстуру из папки "Resources" программно


    public void Start()
    {
        TEXTA = Resources.Load<Texture2D>("имя"); //Загружаем в TEXTA текстуру из папки "Resources", указываем её имя без расширения.
        RAWA.texture = TEXTA; // Натягиваем на наш RawImage эту текстуру.

    }

}

Примечательно и важно то, что в строчке "TEXTA = Resources.Load<Texture2D>("имя");" я нигде не писал путь к папке "Resources",
юнити сам находит путь, по тому что функция Resources.Load может грузить ресурсы только из папок с именем "Resources",
и по этому сама знает что искать, и путь к папке прописывать категорически запрещено!
Папок может быть сколько угодно, но имена ресурсов в них не должны повторяться,
иначе юнька будет брать тот ресурс, до которого первым доберётся листая папки.

У меня вопросов больше нет товарищи, сам до всего допёр.
У вас есть вопросы? )

ABTOMAT 31.05.2020 17:23

Ответ: Как текстуру в RawImage грузить?
 
Цитата:

Сообщение от Crystal (Сообщение 317245)
Теперь решил и проблему загрузки текстуры на RawImage висящий на канвасе.

Короче, юнити странная штука, которую пишут макаки ногами.
Загрузить мы на RawImage можем текстуру только через "Resources.Load".
Самое интересное, что функция "Resources.Load" загружает текстуры
только из папок с именем "Resources". Папка может валяться где
угодно среди ассетов, главное её название, если вы решите назвать
её например "Textures", или "Zadnica", то у вас ничего не выйдет.
Здесь можно почитать про это: ТЫК

В итоге, чё делаем? Вот:

Код:

public class SUKA : MonoBehaviour
{
    public RawImage RAWA; //Сюда заранее в инспекторе запихали наш RawImage к которому этот скрипт и прикреплён
    public Texture2D TEXTA; // Сюда будем запихивать текстуру из папки "Resources" программно


    public void Start()
    {
        TEXTA = Resources.Load<Texture2D>("имя"); //Загружаем в TEXTA текстуру из папки "Resources", указываем её имя без расширения.
        RAWA.texture = TEXTA; // Натягиваем на наш RawImage эту текстуру.

    }

}

Примечательно и важно то, что в строчке "TEXTA = Resources.Load<Texture2D>("имя");" я нигде не писал путь к папке "Resources",
юнити сам находит путь, по тому что функция Resources.Load может грузить ресурсы только из папок с именем "Resources",
и по этому сама знает что искать, и путь к папке прописывать категорически запрещено!
Папок может быть сколько угодно, но имена ресурсов в них не должны повторяться,
иначе юнька будет брать тот ресурс, до которого первым доберётся листая папки.

У меня вопросов больше нет товарищи, сам до всего допёр.
У вас есть вопросы? )

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

Если ресурс был размещён на сцене или в префабе, то тогда Юнити знает, что он юзается в приложении, и будет его туда прикладывать.

А вот если ты сам грузишь через Resources.Load, то тут уже заранее неизвестно, будет файл грузиться или нет. А прикладывать вообще всё тоже не варик. Поэтому такой компромисс.

Ну, это по мнению авторов Юнити, можно соглашаться или не соглашаться.
Например, ты не кладёшь в проект лишнего, а школотроны кладут и потом плачут что приложение для телефона весит 100 ГБ. Юнити пошли навстречу народу, так сказатб.

Но вот то, что не выдаётся внятное сообщение об ошибке, из которого можно понять, в чём дело — это косяк, да. Сам в своё время точно так же налюбился, так что отлично понимаю бугурт.


Часовой пояс GMT +4, время: 12:02.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot