Помощь с 2d анимацией.

Общие вопросы о Unity3D

Помощь с 2d анимацией.

Сообщение Ant1V1rus 17 фев 2017, 18:14

Доброго дня всем.
Учусь работать в Unity, для тренировки пробую сделать простую игру, даже не игру, а как бы контроллер персонажа(со спрайтовыми анимациями). Может кто знает такую игру как "Stardew Valley".Вот на подобии такого контроллера персонажа делаю. Если кто играл в неё, думаю поймет в чём вопрос.
Так вот в чем мне нужна помощь.
Сам скрипт перемещение объекта, то есть нашего персонажа я сделал.Он отлично перемещается в 2d пространстве по обеих координатах.
Но появились проблемы с самой анимацией:
1) Как сделать что бы анимация проигрывалась тогда, когда нажата клавиша, так как анимация проигрывается только один раз, а когда я её зацикливаю то анимация продолжает играть, даже когда клавиша отпущена.
2)В animator controller создал систему с помощью SetTrigger по которой анимация игрока срабатывает, и вроде бы всё нормально но вот с помощью скрипта не могу сделать определенное действие:
Есть 4 параметра триггеров в anim.control и с помощью скрипта я запускаю их что бы сработала определенная анимация
Код
Скрытый текст:
if (Input.GetKeyDown (KeyCode.A)) {
gameObject.GetComponent<Animator> ().SetTrigger ("walkleft");
}
if (Input.GetKeyDown (KeyCode.D)) {
gameObject.GetComponent<Animator> ().SetTrigger ("walkright");

}
if (Input.GetKeyDown (KeyCode.S)) {
gameObject.GetComponent<Animator> ().SetTrigger ("walkdown");
}
if (Input.GetKeyDown (KeyCode.W)) {
gameObject.GetComponent<Animator> ().SetTrigger ("walkup");

Мне нужно, когда зажата клавиша - A и W то работала только анимация клавиши A, а W отключалась(Именно анимация).
- A и S так же, S отключалась
-D и W так же, W отключалась
-D и S так же, S отключалась
Думаю суть поняли)))
Ну вот и в принципе всё что нужно узнать.
Надеюсь объяснил нормально, если нет, постараюсь объяснить понятнее.
Последний раз редактировалось Ant1V1rus 18 фев 2017, 00:12, всего редактировалось 1 раз.
Ant1V1rus
UNец
 
Сообщения: 12
Зарегистрирован: 17 фев 2017, 16:34

Re: Помощь с 2d анимацией.

Сообщение GRESHNIK512 17 фев 2017, 19:16

Еще вопросик допусти у меня есть спрайт но с неровными краями, так вот при автоматическом мульти спрайте далее выстраивание в анимацию получается, что последовательность спрайтов дергается +- 2 пикселя. Как этого избежать ? И в чем может быть причина если я не прав.
GRESHNIK512
UNец
 
Сообщения: 33
Зарегистрирован: 19 янв 2017, 18:03
Откуда: Глазов

Re: Помощь с 2d анимацией.

Сообщение samana 17 фев 2017, 19:58

GRESHNIK512 писал(а):Еще вопросик допусти у меня есть спрайт но с неровными краями, так вот при автоматическом мульти спрайте далее выстраивание в анимацию получается, что последовательность спрайтов дергается +- 2 пикселя. Как этого избежать ? И в чем может быть причина если я не прав.


Не делать автоматическую нарезку, а задавать сетку с конкретными значениями. Но тогда спрайты в спрайт листе изначально должен быть тоже выравнены.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Помощь с 2d анимацией.

Сообщение Ant1V1rus 18 фев 2017, 00:12

Может кто помочь мне?
Ant1V1rus
UNец
 
Сообщения: 12
Зарегистрирован: 17 фев 2017, 16:34

Re: Помощь с 2d анимацией.

Сообщение LemanRass 18 фев 2017, 12:40

Во-первых внеси такое понятие как спокойствие игрока в свой аниматор.
Помимо бега в разные стороны персонаж так же должен уметь быть в состоянии спокойствия когда никто ничего не нажимает.

После этого забудь о циклическом использовании SetTrigger в Update. SetTrigger предназначен для разового выполнения конкретной анимации.
Другой костыль который все еще не идеален но мог бы решить твою проблему это сделать хотя бы на SetBool все.
Но крутые проггеры делают вообще через SetFloat.

Расскажу подробнее о методе через SetFloat.
Делаешь в аниматоре 2 переменных типа float VSpeed, HSpeed.
Делаешь дерево смешивания (Blend Tree) в котором определи 5 анимаций.
Если VSpeed < 0.01f и VSpeed > -0.01f и HSpeed < 0.01f и HSpeed > -0.01f
Значит текущее состояние - состояние спокойствия.
Если VSpeed > 0.01f
Значит текущее состояние - бег вверх.
Если VSpeed < -0.01f
Значит текущее состояние - бег вниз.
Если HSpeed > 0.01f
Значит текущее состояние - бег вправо.
Если HSpeed < -0.01f
Значит текущее состояние - бег влево.


в скрипте контроллера пишешь:

Синтаксис:
Используется csharp
public Animator animator;

public float moveSpeed = 50;

private float VSpeed = 0;
private float HSpeed = 0;

private void Update()
{
    VSpeed = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;
    HSpeed = Inout.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
   
    animator.SetFloat("VSpeed", VSpeed);
    animator.SetFloat("HSpeed", HSpeed);
}


Запускаешь. Профит!
Разработчик SpaceBall
Скрытый текст:
LemanRass
UNIверсал
 
Сообщения: 385
Зарегистрирован: 23 фев 2014, 12:00
Skype: coder.dev

Re: Помощь с 2d анимацией.

Сообщение Ant1V1rus 18 фев 2017, 17:07

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

После этого забудь о циклическом использовании SetTrigger в Update. SetTrigger предназначен для разового выполнения конкретной анимации.
Другой костыль который все еще не идеален но мог бы решить твою проблему это сделать хотя бы на SetBool все.
Но крутые проггеры делают вообще через SetFloat.

Расскажу подробнее о методе через SetFloat.
Делаешь в аниматоре 2 переменных типа float VSpeed, HSpeed.
Делаешь дерево смешивания (Blend Tree) в котором определи 5 анимаций.
Если VSpeed < 0.01f и VSpeed > -0.01f и HSpeed < 0.01f и HSpeed > -0.01f
Значит текущее состояние - состояние спокойствия.
Если VSpeed > 0.01f
Значит текущее состояние - бег вверх.
Если VSpeed < -0.01f
Значит текущее состояние - бег вниз.
Если HSpeed > 0.01f
Значит текущее состояние - бег вправо.
Если HSpeed < -0.01f
Значит текущее состояние - бег влево.


в скрипте контроллера пишешь:

Синтаксис:
Используется csharp
public Animator animator;

public float moveSpeed = 50;

private float VSpeed = 0;
private float HSpeed = 0;

private void Update()
{
    VSpeed = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;
    HSpeed = Inout.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
   
    animator.SetFloat("VSpeed", VSpeed);
    animator.SetFloat("HSpeed", HSpeed);
}


Запускаешь. Профит!


Спасибо, с setfloat разобрался)
Но не могу разобраться с blend tree. Что то я нашаманил в animator'е, анимации срабатывают, но как то криво и не понятно. Даже когда отпускаю клавишу , анимация еще несколько мили-секунд работает, а потом уже возвращает в анимацию спокойствия.
Ant1V1rus
UNец
 
Сообщения: 12
Зарегистрирован: 17 фев 2017, 16:34

Re: Помощь с 2d анимацией.

Сообщение LemanRass 18 фев 2017, 17:12

HasExitTime флажок я думаю в этом виноват.
Разработчик SpaceBall
Скрытый текст:
LemanRass
UNIверсал
 
Сообщения: 385
Зарегистрирован: 23 фев 2014, 12:00
Skype: coder.dev

Re: Помощь с 2d анимацией.

Сообщение Ant1V1rus 18 фев 2017, 17:19

LemanRass писал(а):HasExitTime флажок я думаю в этом виноват.

Убирал, так же(
Ant1V1rus
UNец
 
Сообщения: 12
Зарегистрирован: 17 фев 2017, 16:34

Re: Помощь с 2d анимацией.

Сообщение LemanRass 18 фев 2017, 17:44

Кинь пару скринов как у тебя выглядит blend tree.
Разработчик SpaceBall
Скрытый текст:
LemanRass
UNIверсал
 
Сообщения: 385
Зарегистрирован: 23 фев 2014, 12:00
Skype: coder.dev

Re: Помощь с 2d анимацией.

Сообщение Ant1V1rus 18 фев 2017, 18:43

LemanRass писал(а):Кинь пару скринов как у тебя выглядит blend tree.

Изображение

Я пока пробую разобраться с ним, но не могу понять как правильно пользоваться им((
Ant1V1rus
UNец
 
Сообщения: 12
Зарегистрирован: 17 фев 2017, 16:34

Re: Помощь с 2d анимацией.

Сообщение LemanRass 18 фев 2017, 19:25

Изучите материал по Blend Tree и все вопросы сами отпадут.
Успехов!
Разработчик SpaceBall
Скрытый текст:
LemanRass
UNIверсал
 
Сообщения: 385
Зарегистрирован: 23 фев 2014, 12:00
Skype: coder.dev

Re: Помощь с 2d анимацией.

Сообщение Ant1V1rus 18 фев 2017, 20:40

LemanRass писал(а):Изучите материал по Blend Tree и все вопросы сами отпадут.
Успехов!

Разобрался с Blend Tree. Но заметил кое что.
Анимация немного работает с запозданием, то есть, чем дольше жмёшь на клавишу, а потом отпускаешь, тем дольше анимация переходит в другую.
Если нажать и сразу отпустить, анимация переходит быстро.
Ant1V1rus
UNец
 
Сообщения: 12
Зарегистрирован: 17 фев 2017, 16:34

Re: Помощь с 2d анимацией.

Сообщение GRESHNIK512 18 фев 2017, 20:50

маска в фотошопе творит чудеса все стоит на месте и движется плавно ))
GRESHNIK512
UNец
 
Сообщения: 33
Зарегистрирован: 19 янв 2017, 18:03
Откуда: Глазов


Вернуться в Общие вопросы

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

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