Смена текстуры объекта в скрипте

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Смена текстуры объекта в скрипте

Сообщение Riddik 27 апр 2011, 11:00

Привет!
Создаю объект из префаба, после чего хочу изменить текстуру у метериала вновь созданного объекта, как это сделать?

Вопрос, наверное, из ряда вон в связи своей простоты, прошу извинить. У меня с юнити первый раз, поэтому никак не могу пока сориентироваться, где такую инфу смотреть?

Например, как мне добывать текущие экранные координаты указателя мыши, чтобы рисовать свой курсор в них и проверять, попала ли мышка по нужной мне текстуре? (игра 2d).
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Смена текстуры объекта в скрипте

Сообщение DbIMok 27 апр 2011, 11:06

Riddik писал(а):где такую инфу смотреть?

Help > Scripting Reference
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Смена текстуры объекта в скрипте

Сообщение Order 27 апр 2011, 11:15

Подробнее, что хочешь сделать ? (только подробно какие объекты зачем текстуры? Какое 2д ? какие меши ? что должно происходить при клике?).
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Смена текстуры объекта в скрипте

Сообщение Riddik 27 апр 2011, 11:22

DbIMok спасибо.

Order
По логике ближе всего к match3. Какое 2d? Такое: камеру установил в ортографическую проекцию, все графические объекты - plane с текстурами. (aka спрайты). Вот у этих самых plane мне надо менять текстуры, когда мне надо. Мог бы нагородить кучу префабов, каждый со свой текстурой - но зачем, если отличие только в текстурах. Верно я говорю? Вот надо менять их из кода.
При попадании мыши мне надо получить координаты объекта (plane), по которому кликнули. И сам объект, естественно, чтобы манипулировать им,(удалить, передвинуть, сменить текстуру и т.д.).
Ну и рисовать свой курсор.

Можно найти пример этого или указать раздел в doc, где лежат нужные ф-ии?
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Смена текстуры объекта в скрипте

Сообщение Order 27 апр 2011, 11:42

Проще как бы все равно префабы сделать..
Грузить текстуру из папки ресурсов тоже можно.. только удобства особого не вижу.

Пример из справки.
Синтаксис:
Используется csharp
       
GameObject go = GameObject.CreatePrimitive(PrimitiveType.Plane);
go.renderer.material.mainTexture = Resources.Load("glass");
 


Другое дело если ты собираешься 2д анимацию делать, но и тут будет одна текстура с набором движений.

Синтаксис:
Используется csharp
go.renderer.material.SetTextureOffset("_MainTex", new Vector2(0 , сдвиг текстуры));


на счет кликов.. если объекты одинаковы, то можно сделать матрицу, и вычислять координаты ячеек, по координатам мышки, тупо округляя до целого координаты и беря эти числа как индексы ячейки.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Смена текстуры объекта в скрипте

Сообщение DbIMok 27 апр 2011, 11:43

Riddik писал(а):Вот у этих самых plane мне надо менять текстуры

это нерационально. правильно использовать одну текстуру для всех объектов и менять вертексные UV мешей.
Riddik писал(а):И сам объект

объект с коллайдером знает, что по нему кликнули. можно обойтись без координат

примеров полно здесь и на англоязычном форуме. с азами придется самому разобраться, это не сложно. мы же не можем тут на пальцах пересказывать вам справку.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Смена текстуры объекта в скрипте

Сообщение Order 27 апр 2011, 11:45

Так же конечно можно смотреть функцией онмаусклик.. и потом перебором искать нужный объект, это дольше.
Или лучиком из камеры искать колизии с колайдером объекта, тоже не очень способ.

Начинай с продумывания архитектуры проекта..
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Смена текстуры объекта в скрипте

Сообщение DbIMok 27 апр 2011, 11:51

Order писал(а):смотреть функцией онмаусклик.. и потом перебором искать нужный объект

вы не имеете представления о том, о чем говорите.
Order писал(а):Или лучиком из камеры искать колизии с колайдером объекта, тоже не очень способ.

нормальный способ. какой из них удобнее использовать зависит от геймплея.
Order писал(а):Начинай с продумывания архитектуры проекта

ему рано что-то продумывать. начать надо с прохождения туториала.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Смена текстуры объекта в скрипте

Сообщение Riddik 27 апр 2011, 11:59

Проще как бы все равно префабы сделать..
Грузить текстуру из папки ресурсов тоже можно.. только удобства особого не вижу.


Ну а зачем из папки грузить в runtime? Можно же создать специальный объект для этого, который будет хранить в себе текстуры, с него и брать текстуры. Или это тоже не очень?

Спасибо за примеры - теперь понятно, что и где брать.

это нерационально. правильно использовать одну текстуру для всех объектов и менять вертексные UV мешей


Спасибо, учту.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Смена текстуры объекта в скрипте

Сообщение DbIMok 27 апр 2011, 12:07

есть всего 2 способа загрузки ресурсов: Unity Manual > Advanced > Loading Resources at Runtime
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Смена текстуры объекта в скрипте

Сообщение Order 27 апр 2011, 12:08

DbIMok писал(а):вы не имеете представления о том, о чем говорите.


имел ввиду функцию OnMouseDown. так что вполне знаю о чем говорю.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Смена текстуры объекта в скрипте

Сообщение Riddik 27 апр 2011, 12:16

DbIMok писал(а):есть всего 2 способа загрузки ресурсов: Unity Manual > Advanced > Loading Resources at Runtime


Ага, т.е. если у меня есть переменная типа Texture в коде, то я не смогу её назначить go.renderer.material.mainTexture, печально.

Не злитесь за мои скрытые "наезды" на Unity, дело в том, что я пришёл из мира, где такие тривиальные вопросы, как проверка на попадание курсора мыши по спрайту, решается простым и элегантным способом:
Синтаксис:
Используется csharp
Rect rect = sprite.GetBoundingBox();
if( rect.TestPointRect(mouse.x, mouse.y) )
{
       DoSomething();
}
 

И огорчает, что тут такие простые вещи надо делать через костыли. Но выбора нет, буду "переучиваться".

Спасибо за помощь.
Последний раз редактировалось Riddik 27 апр 2011, 12:23, всего редактировалось 3 раз(а).
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Смена текстуры объекта в скрипте

Сообщение Order 27 апр 2011, 12:21

Тут тоже просто.. к примеру та же. OnMouseDown скрипт на объекте висит ждет когда его кликнут, причем в 3D.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Смена текстуры объекта в скрипте

Сообщение Zaicheg 27 апр 2011, 12:23

Riddik писал(а):Не злитесь за мои скрытые "наезды" на Unity, дело в том, что я пришёл из мира, где такие тривиальные вопросы, как проверка на попадание курсора мыши по спрайту, решается простым и элегантным способом:
Синтаксис:
Используется csharp
if(TestPointRect(mouse.x, mouse.y, sprite.GetBoundingBox()))
{
       DoSomething();
}

И огорчает, что тут такие простые вещи надо делать через костыли. Но выбора нет, буду "переучиваться".

Простите, а какие костыли? Взять экранные координаты курсора, пустить луч через них и проверить попадение — это костыль?
Ну или если вам хочется именно проверять вхождение курсора в экранную площадь объекта, то для этого у вас есть и доступ к преобразованию мировых координат в экранные (класс Camera) и к bounds объекта (класс Bounds). Получится не в одну строку, но логика будет такая же, как в вашем примере.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Смена текстуры объекта в скрипте

Сообщение DbIMok 27 апр 2011, 12:23

Riddik писал(а):если у меня есть переменная типа Texture в коде, то я не смогу её назначить go.renderer.material.mainTexture

почему же, назначайте. если перетащили в слот в редакторе, то она будет загружена из ресурсов неявно. если текстура пуста изначально, нужно будет загрузить через Resources.Load
Riddik писал(а):тут такие простые вещи надо делать через костыли

тут это будет:
Синтаксис:
Используется csharp
    void OnMouseDown() {
        print("Клик по объекту: "+gameObject.name);
    }
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19