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

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

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

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

Т.е. когда кликают по collider объекта MisterX, Unity дёргает ф-ию OnMouseDown():
Синтаксис:
Используется csharp
public class MisterX : Monobehaviour
{
...
    void OnMouseDown() { ... }
...
}
 



Пардон, не заметил.
Ну тогда просто замечательно!
Спасибо за помощь.
Последний раз редактировалось Riddik 27 апр 2011, 12:28, всего редактировалось 1 раз.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

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

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

Order писал(а):так что вполне знаю о чем говорю.

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

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

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

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

зачем перебором, кого искать и почему дольше?

Все приведенные выше примеры основываются на таких принципах что пребирать нужно будет.
Если не хитрить. Конкретно про ОнМаус я этого не имел ввиду.
Мне все таки удобнее получать сразу объект в массиве, по индексу. И не применяю я эти способы, потому как не вешаю скрипты на объекте, у меня обычно один управляющий скрипт на сцене.
Все таки ООП на C# это круто :) мне нравится такой подход.
Добавить 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, 13:04

Order писал(а):Все приведенные выше примеры основываются на таких принципах что пребирать нужно будет.

повторюсь: кого и зачем?
Order писал(а):про ОнМаус я этого не имел ввиду.

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

именно здесь не имели? :-?
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, 15:17

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

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


Хотелось бы подробнее остановиться на этом.

Т.е. наиболее оптимально было бы создать такую архитектуру:
1. Пакуем все текстуры в одну (атлас), запоминаем при этом текстурные координаты на атласе для каждой пакуемой текстуры.
2. Создаём один шейдейр, к нему прицепляем наш атлас, созданный в п.1.
3. Создаем меш, сотсоящий из двух треугольников - простейшая плоскость. Присоединяем к ней наш шейдер, созданный в п.2. И меняем UV для установки нужного кусочка из текстурного атласа, созданного в п.1.
4. Profit.
5. Для создания следующего объекта goto 3.

Все ли правильно я понял?
Можно ли все эти пункты выполнить в сприпатах, без использования сторонних плагинов?
Можно ли UV меша визуально менять в редакторе? В настойках шейдеров увидел только Tile и offset для текстур, как же менять uv? Только из скриптов?
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

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

Сообщение DbIMok 27 апр 2011, 15:36

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

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

Сообщение seaman 27 апр 2011, 15:45

О. Кстати, вопрос. Есть текстура шрифта. Что выгоднее - создать динамически из нее еще одну текстуру для текста (GetPixels/SetPixels), или наделать много квадов для каждой буквы и у них выставить нужные текстурные координаты? По идее второе должно быть быстрее. Однако получается масса объектов, и если текст, например, нужно анимировать - нужно будет создавать пустой объект, делать эти плашки-буквы его детьми... Усложнение однако...
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение DbIMok 27 апр 2011, 15:58

seaman писал(а): еще одну текстуру для текста (GetPixels/SetPixels)

для каждой буквы вы хотели сказать? и получить +1 ДК на букву вместо одного на все.
seaman писал(а):делать эти плашки-буквы его детьми

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

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

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

DbIMok премного благодарен! :)
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

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

Сообщение seaman 27 апр 2011, 17:19

для каждой буквы вы хотели сказать? и получить +1 ДК на букву вместо одного на все.

Для всего текста (для строки меню, например). Но вот разные строки - разные меши, разные текстуры все равно останутся. Т.к. реакция у них разная, анимация может быть разной...
нет, один объект и sharedmesh

Не понял. Про sharedMesh в документации уж очень мало информации.
"MeshFilter.sharedMesh - возвращает общую сетку MeshFilter."
С кем общую? Зачем у одного Мешфильтра две сетки - mesh и sharedMesh?
Ткните, плиз, где можно об этом подробно почитать.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение Order 27 апр 2011, 18:51

Синтаксис:
Используется csharp
не надо учить других своим проблемам )


Это не проблема.. это отсутствие костылей и скорость.

Структуру можно сделать любую. и при ОнМаусе тоже можно искать в массиве., вот Трольню разводить не нужно.. я описал все возможные способы, и выделил наиболее оптимальные. Извините что не расписывал, ибо на работе.
Есть еще очень быстрый метод.. но он для большого количества объектов.
Добавить 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, 19:21

У меня 108 объектов, при этом draw calls: 1, batched: 108.

Получается batched столько же, сколько и объектов. Это нормально?

Далее, хочу узнать ширину плоскости. Для этого лезу в меш объекта:
Синтаксис:
Используется csharp
Vetices[] verts = gameObject.GetComponent<MeshFilter>().mesh.vertices;
float width = verts[1].x - verts[0].x;
 


Но тут консоль мне говорит, что я вылез за пределы массива, а в инспекторе я вижу, что у моего префаба пропал mesh в компоненте Mesh Filter (missed).

Что я делаю не так?

Перед этим проверял, verts.lenght равно 4, как и должно.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

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

Сообщение DbIMok 27 апр 2011, 19:38

Riddik писал(а):Это нормально?

это очень хорошо )
Riddik писал(а):хочу узнать ширину плоскости

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

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

Сообщение Riddik 27 апр 2011, 19:46

Спасибо! Всё отлично!
Однако не пойму, почему не работает с вершинами, ведь должно по логике...
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

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

Сообщение DbIMok 27 апр 2011, 19:52

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

Пред.След.

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

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

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