Среда, 17 Апреля 2024, 00:46

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Анимация Sprite Multiple
Анимация Sprite Multiple
darkduelistДата: Понедельник, 25 Ноября 2013, 12:16 | Сообщение # 1
частый гость
Сейчас нет на сайте
Добрый день, есть спрайт .
В Юнити указал что Multiple и добавил ему сетку. Собственно вопрос как заставить меняться кадр из сетки?




Сообщение отредактировал darkduelist - Понедельник, 25 Ноября 2013, 12:16
buftlerДата: Понедельник, 25 Ноября 2013, 12:32 | Сообщение # 2

Добряк

Сейчас нет на сайте
darkduelist, сам сейчас с этим вожусь, youtube.com/watch?v=4qE8cuHI93c#t=1538
видео на youtube где презентуется unity и там показано как делают анимацию может поймешь.
26 минуту можешь сразу врубать


Сообщение отредактировал buftler - Понедельник, 25 Ноября 2013, 12:33
darkduelistДата: Понедельник, 25 Ноября 2013, 13:37 | Сообщение # 3
частый гость
Сейчас нет на сайте
buftler, блин зря его не досмотрел до конца... Спасибо!

Добавлено (25.11.2013, 13:37)
---------------------------------------------
Блин не совсем то... Хотел через скрипт, ибо делать анимацию придется под каждый спрайт отдельную...


allodsДата: Понедельник, 25 Ноября 2013, 14:05 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
вот тут вроде анимирует текстуру типа спрайт
darkduelistДата: Понедельник, 25 Ноября 2013, 14:24 | Сообщение # 5
частый гость
Сейчас нет на сайте
allods, это видел... Но хочется использовать фишки 4.3, а не костыли...

buftlerДата: Понедельник, 25 Ноября 2013, 15:01 | Сообщение # 6

Добряк

Сейчас нет на сайте
darkduelist, то же самое ищу, если найду поделюсь megaphone
KamiRoninДата: Понедельник, 25 Ноября 2013, 21:11 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата darkduelist ()
В Юнити указал что Multiple и добавил ему сетку. Собственно вопрос как заставить меняться кадр из сетки?

есть путь "в лоб":
1. сначала нарезаем спрайты через SpriteEditor. просто выделяешь рамкой и задаешь имя "sp_1", "..2", "..3", еще советую делать путой спрайт любого размера (просто выдели поверх существующего в углу).
2. потом берешь sp_1 и кладешь в сцену.
3. на него вешаешь скрипт. назови mySpecialeAnimatto.
4. в скрипте клади следующее:


вот и все.
//------------------------- cut ----------------------------\\

есть другая методика через чтение текстуры основного спрайта, получение нового спрайта и внесение в майнСпрайт. но ИМХО - зело геморная техника!
получаешь каждый новый спрайт через Sprite.Create(Texture2D,Rect,Vector2,float)
и просто по таймеру ату его - в mainSprite!! smile
одно преимущество - ты можешь вложить в скрипт одну текстуру - все остальное он сделает сам smile особенно если атлас текстура грамотно на одинакового размера квадраты разделена.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Понедельник, 25 Ноября 2013, 21:14
darkduelistДата: Понедельник, 25 Ноября 2013, 23:42 | Сообщение # 8
частый гость
Сейчас нет на сайте
KamiRonin, спасибо! Завтра испробую =)

KiraДата: Вторник, 26 Ноября 2013, 06:52 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
wacko а что через аниматор встроенный? проще простого и удобно wink


Добавлено (26.11.2013, 06:52)
---------------------------------------------
Зы тоже 2д делаю, и спрайты похожи(jrpg).


Unity3d разработчик на С#. Лучшее спасибо + в репу.
"Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
"Человек, который никогда не ошибался никогда не пробовал ничего нового".
"Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн


Сообщение отредактировал Kira - Вторник, 26 Ноября 2013, 07:05
KamiRoninДата: Вторник, 26 Ноября 2013, 13:38 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
Цитата Kira ()
а что через аниматор встроенный? проще простого и удобно

Кира, а у тебя с картинки анимация получилась??
потому что у меня например легаси анимация с заменой спрайта не работает! sad с трансформом - легко, а со спрайтами не анимирует и все тут! smile
пришлось использовать меканим, но когда дошел до совмещения анимаций - наступил взрыв мозга!!! я видать его плохо изучал. пойду к сеамэну на сайт доучиваться! smile

да, линейную анимацию можно делать и в меканиме.
как я понял нужно:
1. сначала нарезать кадры вручную.
2. потом выбрать тип анимации "SpriteRenderer -> Sprite" и на таймлайне разместить кадровые спрайты по порядку и времени следования.
3. задать эвенты анимации в зависимости от событий игры. чтобы это сделать нужно изучить систему эвентов меканим! по началу - жуткая хрень!!!!

программно получилось сделать все что нужно за 40 мин. на прикручивание анимации через меканим, не зная всех тонкостей, убил два вечера так и не получил задуманного результата! sad


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Вторник, 26 Ноября 2013, 13:41
darkduelistДата: Вторник, 26 Ноября 2013, 13:59 | Сообщение # 11
частый гость
Сейчас нет на сайте
KamiRonin, работает!
Правда условие чуток поправил...
Kira, слишком много спрайтов анимировать... Хотя если подскажешь как одну анимацию использовать с разными срайтами, буду очень благодарен.


KiraДата: Вторник, 26 Ноября 2013, 17:00 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
тут увы, я не силен. Кривая привязана к имени спрайта, что плохо. Может где-то и есть решение, а так программно только.
Да с анимациями я не давно только начал разбираться.


Unity3d разработчик на С#. Лучшее спасибо + в репу.
"Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
"Человек, который никогда не ошибался никогда не пробовал ничего нового".
"Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн


Сообщение отредактировал Kira - Вторник, 26 Ноября 2013, 17:00
darkduelistДата: Четверг, 28 Ноября 2013, 22:35 | Сообщение # 13
частый гость
Сейчас нет на сайте
Ника не могу понять как автоматом разбить спрайт на масив... Вручную убийственно...

KamiRoninДата: Пятница, 29 Ноября 2013, 12:37 | Сообщение # 14
почти ветеран
Сейчас нет на сайте
Цитата darkduelist ()
Ника не могу понять как автоматом разбить спрайт на масив... Вручную убийственно...

во всех анонсах 4.3 писали - автоматическая генерация анимации спрайтов.... я так и не увидел этого нигде.
про спрайт на массив - я думаю - только скриптом, используя ссыль, которую я тут уже давал (#7). это если у тебя правильные фремы в атласе.
ну что-то вроде этого:
Код

public class AutoSpriteGenerate : MonoBehaviour{

        public Texture2D atlas;
        public int rowCount;
        public int colmnCount;
        public int startRow = 1; // c какой строки начинать нарезку
        public int startColumn = 1; // c какой колонки начинать нарезку
        public float frameWidth;
        public float frameHeight;
        public string nameCollect; // потом можно находить нужную коллекцию по имени ))
        [HideInInspector]
        public Sprite[] sprites;
           
           
        void Start(){
               //-- проверки на существование текстуры, правильное указание ширины и высоты и тп. сделай сам.
               //.... < тут проверки >
               //--
                 
               int tekSpr = 0;
               sprites = new Sprite[rowCount * colmnCount];

               for(int row = startRow; row <= rowCount; row++)
                  for(int colm= startColumn; colm <= colmnCount; colm++)
                       float tekStartX = frameWidth * colm;
                       float tekStartY = frameHeight * row;
                       sprites[tekSpr++] = new Sprite(atlas, new Rect(tekStartX, tekStartY, frameWidth, frameHeight),    
                      new Vector2(0.5f, 0.5f), 100f);
        }

}

а дальше уже как фантазия подскажет:
- сделай пустой объект, назови "GameSupervisor", к нему прикрепи кучу экземпляров этого скрипта и в каждом задай свою коллекцию из текстуры.
- можно сделать несколько копий скрипта с ОДНОЙ И ТОЙ ЖЕ текстурой, но разными стартами и количествами нарезки. по названию коллекции можно потом получить спрайты анимации "бег", "ходьба", "стрельба".
- можно сделать статический метод (лучше в отдельном скрипте), который бы возвращал тебе коллекцию по имени типа: "GetSpriteCollection("run");" и тогда у тебя будет в любом объекте игры легкий доступ к анимированию, без дополнительного скриптования нарезки.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Пятница, 29 Ноября 2013, 12:39
darkduelistДата: Пятница, 29 Ноября 2013, 16:38 | Сообщение # 15
частый гость
Сейчас нет на сайте
KamiRonin, может не так выразился... Извиняюсь...
Если на примере твоего кода из # 7:
Добавляем переменную _sprite типа sprite, в инспекторе закидываю спрайт из первого поста и при старте скрипт автоматом 12 ломтиков _sprite загоняет в массив sprites.

Добавлено (29.11.2013, 16:38)
---------------------------------------------
Я уже начинаю сума сходить...
sprites[i].name=_sprite.name.Substring(0, orig.name.Length-1) + i;




Сообщение отредактировал darkduelist - Пятница, 29 Ноября 2013, 16:40
allodsДата: Пятница, 29 Ноября 2013, 17:48 | Сообщение # 16
почти ветеран
Сейчас нет на сайте
надыбал это видео, свежее, всего неделя
youTube

Я думаю это то что ты ищешь, там он как то разбивает спрайты и все ткое А для пнимации он использует аниматор как для IK анимации


Сообщение отредактировал allods - Пятница, 29 Ноября 2013, 17:54
KamiRoninДата: Пятница, 29 Ноября 2013, 19:32 | Сообщение # 17
почти ветеран
Сейчас нет на сайте
Цитата darkduelist ()
Я уже начинаю сума сходить...
sprites[i].name=_sprite.name.Substring(0, orig.name.Length-1) + i;

ммм... это что за...? smile зачем??

Добавлено (29.11.2013, 19:32)
---------------------------------------------

Цитата allods ()
надыбал это видео, свежее, всего неделя

darkduelist, смотри видео! там ОКАЗЫВАЕТСЯ в левом верхнем углу микроскопическая кнопка Slice которая автоматом режет спрайты!! smile пиндык.. вообще не видел! и упоминания нигде вроде не было... sad мдяяяяя...
но теперь будем знать!!! smile


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
darkduelistДата: Суббота, 30 Ноября 2013, 13:38 | Сообщение # 18
частый гость
Сейчас нет на сайте
Я разбивал спрайт через юнти с самого начала...
Когда разбиваешь спрайт ломтики называются имя_спрайта_х(где х порядковый номер).
Мне надо что бы скрипт сам назначил в масиви ломтики из спрайта.
Должно быть
sprites[i]=что то(_sprite.name.Substring(0, orig.name.Length-1) + i);
через _sprite.name.Substring(0, orig.name.Length-1) + i можно получить имя следующего ломтика спрайта...


KamiRoninДата: Суббота, 30 Ноября 2013, 14:45 | Сообщение # 19
почти ветеран
Сейчас нет на сайте
Цитата darkduelist ()
Мне надо что бы скрипт сам назначил в масиви ломтики из спрайта.

а мой скрипт это же и делает!! и из текстуры, а не собирает уже нарезанные кусочки из спрайта.. чем же он не подошел то? smile


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
darkduelistДата: Суббота, 30 Ноября 2013, 17:40 | Сообщение # 20
частый гость
Сейчас нет на сайте
KamiRonin, зачем мне еще скриптом разрезать на ломтики если юнити это прекрасно делает?
А в твоем осталась 1 ошибка которую я пока найти не могу... Он не записывает кадры 2,5,8,9,10,11
Код

public class AnimSet : MonoBehaviour  
{  
   
  public Texture2D atlas;  
  public int rowCount;  
  public int columnCount;  
  public int startRow = 1; // c какой строки начинать нарезку  
  public int startColumn = 1; // c какой колонки начинать нарезку  
  public float frameWidth;  
  public float frameHeight;  
  public string nameCollect; // потом можно находить нужную коллекцию по имени ))  
  [HideInInspector]  
  public Sprite[] sprites; // сюда через инспектор закладываем спрайты по порядку.
  private SpriteRenderer mainSprite; // переменная через которую будем работать.
  float nextTime;
  int tekStage = 0;
  public int cadr=0;
   
   
  void Start()
  {  
   //-- проверки на существование текстуры, правильное указание ширины и высоты и тп. сделай сам.  
   //.... < тут проверки >  
   //--  
   float tekStartX;
   float tekStartY;

   int tekSpr = 0;  
   sprites = new Sprite[rowCount * columnCount];  
    
   for(int row = startRow; row <= rowCount; row++)  
    for(int column= startColumn; column <= columnCount; column++)
    {  
     tekStartX = frameWidth * column;  
     tekStartY = frameHeight * row;
     sprites[tekSpr++] = Sprite.Create(atlas, new Rect(tekStartX, tekStartY, frameWidth, frameHeight), new Vector2(0.5f, 0.5f), 100f);  
    }

   mainSprite = (SpriteRenderer)this.GetComponent<SpriteRenderer>();
   nextTime = Time.time + 0.05f; // интервал между кадрами
  }  

  void Update()
  {
   mainSprite.sprite = sprites[cadr];
   /*if(Time.time >= nextTime)
   {
    nextTime = Time.time + 0.05f;
    mainSprite.sprite = sprites[tekStage];
    tekStage = (tekStage+2 > sprites.Length) ? 0 : tekStage+1;
   }*/
    
  }
   
}  

Row Count - 4
Colunm Count - 3
frame Width - 24
frame Height - 32
на примере картики с первого поста..


Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Анимация Sprite Multiple
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг