|
Unity Мультиплатформенный инструмент для разработки игр |
31.05.2020, 11:12
|
#1
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Как текстуру в RawImage грузить?
Я заступорился на попытках загрузить и натянуть текстуру
на RawImage программно. Сам сначала пытался по всякому,
потом уже плюнул и напрямую пробовал пример копировать,
и все эти примеры не работают, так как-они о тстарых версий юнити.
Короче у меня Rawimage висит на канвасе, и на нём периодично текстуру
нужно менять, если у кого есть рабочий код на версию 2019.3f1,
я с удовольствие пощупаю.
Так же у меня не получается готовый ассет RawImage загрузить,
с ассетами моделей проблем нет, а с этим ступор.
P.s. Документацию юнити читал, их документация говно полное.
|
(Offline)
|
|
31.05.2020, 15:26
|
#2
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Ответ: Как текстуру в 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:30.
|
(Offline)
|
|
31.05.2020, 16:11
|
#3
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Ответ: Как текстуру в 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",
и по этому сама знает что искать, и путь к папке прописывать категорически запрещено!
Папок может быть сколько угодно, но имена ресурсов в них не должны повторяться,
иначе юнька будет брать тот ресурс, до которого первым доберётся листая папки.
У меня вопросов больше нет товарищи, сам до всего допёр.
У вас есть вопросы? )
|
(Offline)
|
|
31.05.2020, 17:23
|
#4
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Как текстуру в RawImage грузить?
Сообщение от Crystal
Теперь решил и проблему загрузки текстуры на 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 ГБ. Юнити пошли навстречу народу, так сказатб.
Но вот то, что не выдаётся внятное сообщение об ошибке, из которого можно понять, в чём дело — это косяк, да. Сам в своё время точно так же налюбился, так что отлично понимаю бугурт.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:09.
|