Анимированные текстуры в GUI

Программирование на Юнити.

Анимированные текстуры в GUI

Сообщение gnoblin 06 ноя 2009, 20:26

Раньше я думал что анимированные текстуры в гуи сделать нельзя... Я ошибался!

Берем большую текстуру, а в нужной области на экране отображаем только необходимое "окно" (тут картинка 192х64).
Код: Выделить всё
GUI.BeginGroup(cur_rect);
GUI.Label(new Rect(cur_anim_counter, 0, current_cursor.width, current_cursor.height), current_cursor, cursor_style);
GUI.EndGroup();


В нужное время делаю
Код: Выделить всё
cur_anim_counter -= 64f;
и меняется кадр.

Спасибо fox'у за наводку :ymdevil:
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Анимированные текстуры в GUI

Сообщение warr11r 07 ноя 2009, 03:18

Движок бегает по текстурке, выхватывая по очереди нужные фрагменты?
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: Анимированные текстуры в GUI

Сообщение Neodrop 07 ноя 2009, 05:15

GUI.BeginGroup(cur_rect); определяет поле, в котором будет видна картинка. Оно меньше картинки. Картинка сдвигается на заданные единицы покадрово. Происходит анимация.
Представьте себе, будто на экран наложена невидимая плёнка, которая всё-таки скрывает определнные картинки за собой. В плёнке есть проёмчик. А за ним движется картинка, с рядами кадров анимации.
Вот, приблизительно так.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Анимированные текстуры в GUI

Сообщение BlackCat 24 янв 2010, 21:20

А я решил эту задачу немного по-другому. Не скажу что оптимально и красиво, но может кому пригодится.
Задача стояла анимировать прицел. Я нарезал по одному кадру то что хотел анимировать и добавил в проект. После чего добавил скрипт, отвечающий за анимацию:

(js)
Код: Выделить всё

private var t = 0;
var t01 : Texture2D; //делаем переменные видимыми, это позволит нам в настройках элемента добавить все кадры нашей анимации
var t02 : Texture2D;
var t03 : Texture2D;

function Update () {
   t = t+1; //крутим счетчик, чтобы выставить задержку для показа кадров
                        //сам понимаю, что это неудачное решение, но мне нужна была принципиальная возможность анимации
                        //кстати, кадры анимации можно читать напрямую из файлов, смотреть TextAsset
                        //у меня, при использовании TextAsset возникла проблема, что не захотели нормально читаться двухцветные png-шки
                       //поэтому пришлось пойти другим путем :)
   if (t == 10){
      guiTexture.texture = t01; //изменяем первый кадр
      print (" " + t);
   }
      if (t == 20){
      guiTexture.texture = t02; //изменяем второй кадр
      print (" " + t);
   }
   print (" " + t);
      if (t == 30){
      guiTexture.texture = t03; //изменяем третий кадр
      print (" " + t);
      t = 0; //сбрасываем счетчик, чтобы зациклить анимацию
   }
}


После чего в настройках GUI Texture в переменные t01, t02, t03 добавил нарезнанные кадры анимации. Вуаля. :)

P.S. Буду признателен, если кто доведет скрипт до ума. Т.е. сделает вызов по необходимости. Передачу параметров и все такое прочее. :)
BlackCat
UNец
 
Сообщения: 18
Зарегистрирован: 24 янв 2010, 21:01

Re: Анимированные текстуры в GUI

Сообщение warr11r 25 янв 2010, 19:21

А можно ведь так?

Код: Выделить всё
private var t = 0;
private var t2 = 0;
var t01 : Texture2D;
var t02 : Texture2D;
var t03 : Texture2D;

function Update () {
   t = t+1;
   t2 = t*0.1;
     guiTexture.texture = t2;// или  guiTexture.texture = t2.ToString(), называем текстуры 0,1, 2 и 3
      if (t == 30) t = 0;
}
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ


Вернуться в Скрипты

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

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