darkduelist, сам сейчас с этим вожусь, youtube.com/watch?v=4qE8cuHI93c#t=1538 видео на youtube где презентуется unity и там показано как делают анимацию может поймешь. 26 минуту можешь сразу врубать
Сообщение отредактировал buftler - Понедельник, 25 Ноября 2013, 12:33
buftler, блин зря его не досмотрел до конца... Спасибо!
Добавлено (25.11.2013, 13:37) --------------------------------------------- Блин не совсем то... Хотел через скрипт, ибо делать анимацию придется под каждый спрайт отдельную...
В Юнити указал что Multiple и добавил ему сетку. Собственно вопрос как заставить меняться кадр из сетки?
есть путь "в лоб": 1. сначала нарезаем спрайты через SpriteEditor. просто выделяешь рамкой и задаешь имя "sp_1", "..2", "..3", еще советую делать путой спрайт любого размера (просто выдели поверх существующего в углу). 2. потом берешь sp_1 и кладешь в сцену. 3. на него вешаешь скрипт. назови mySpecialeAnimatto. 4. в скрипте клади следующее:
Код
.... private SpriteRenderer mainSprite; // переменная через которую будем работать. public Sprite[] sprites; // сюда через инспектор закладываем спрайты по порядку. int tekStage = 0; // номер тек кадра float nextTime;
вот и все. //------------------------- cut ----------------------------\\
есть другая методика через чтение текстуры основного спрайта, получение нового спрайта и внесение в майнСпрайт. но ИМХО - зело геморная техника! получаешь каждый новый спрайт через Sprite.Create(Texture2D,Rect,Vector2,float) и просто по таймеру ату его - в mainSprite!! одно преимущество - ты можешь вложить в скрипт одну текстуру - все остальное он сделает сам особенно если атлас текстура грамотно на одинакового размера квадраты разделена. Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Понедельник, 25 Ноября 2013, 21:14
а что через аниматор встроенный? проще простого и удобно
Добавлено (26.11.2013, 06:52) --------------------------------------------- Зы тоже 2д делаю, и спрайты похожи(jrpg). Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Сообщение отредактировал Kira - Вторник, 26 Ноября 2013, 07:05
а что через аниматор встроенный? проще простого и удобно
Кира, а у тебя с картинки анимация получилась?? потому что у меня например легаси анимация с заменой спрайта не работает! с трансформом - легко, а со спрайтами не анимирует и все тут! пришлось использовать меканим, но когда дошел до совмещения анимаций - наступил взрыв мозга!!! я видать его плохо изучал. пойду к сеамэну на сайт доучиваться!
да, линейную анимацию можно делать и в меканиме. как я понял нужно: 1. сначала нарезать кадры вручную. 2. потом выбрать тип анимации "SpriteRenderer -> Sprite" и на таймлайне разместить кадровые спрайты по порядку и времени следования. 3. задать эвенты анимации в зависимости от событий игры. чтобы это сделать нужно изучить систему эвентов меканим! по началу - жуткая хрень!!!!
программно получилось сделать все что нужно за 40 мин. на прикручивание анимации через меканим, не зная всех тонкостей, убил два вечера так и не получил задуманного результата! Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Вторник, 26 Ноября 2013, 13:41
KamiRonin, работает! Правда условие чуток поправил... Kira, слишком много спрайтов анимировать... Хотя если подскажешь как одну анимацию использовать с разными срайтами, буду очень благодарен.
тут увы, я не силен. Кривая привязана к имени спрайта, что плохо. Может где-то и есть решение, а так программно только. Да с анимациями я не давно только начал разбираться. Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Сообщение отредактировал Kira - Вторник, 26 Ноября 2013, 17:00
Ника не могу понять как автоматом разбить спрайт на масив... Вручную убийственно...
во всех анонсах 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];
а дальше уже как фантазия подскажет: - сделай пустой объект, назови "GameSupervisor", к нему прикрепи кучу экземпляров этого скрипта и в каждом задай свою коллекцию из текстуры. - можно сделать несколько копий скрипта с ОДНОЙ И ТОЙ ЖЕ текстурой, но разными стартами и количествами нарезки. по названию коллекции можно потом получить спрайты анимации "бег", "ходьба", "стрельба". - можно сделать статический метод (лучше в отдельном скрипте), который бы возвращал тебе коллекцию по имени типа: "GetSpriteCollection("run");" и тогда у тебя будет в любом объекте игры легкий доступ к анимированию, без дополнительного скриптования нарезки. Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Пятница, 29 Ноября 2013, 12:39
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
darkduelist, смотри видео! там ОКАЗЫВАЕТСЯ в левом верхнем углу микроскопическая кнопка Slice которая автоматом режет спрайты!! пиндык.. вообще не видел! и упоминания нигде вроде не было... мдяяяяя... но теперь будем знать!!! Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Я разбивал спрайт через юнти с самого начала... Когда разбиваешь спрайт ломтики называются имя_спрайта_х(где х порядковый номер). Мне надо что бы скрипт сам назначил в масиви ломтики из спрайта. Должно быть sprites[i]=что то(_sprite.name.Substring(0, orig.name.Length-1) + i); через _sprite.name.Substring(0, orig.name.Length-1) + i можно получить имя следующего ломтика спрайта...
Мне надо что бы скрипт сам назначил в масиви ломтики из спрайта.
а мой скрипт это же и делает!! и из текстуры, а не собирает уже нарезанные кусочки из спрайта.. чем же он не подошел то? Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
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];