Страница 1 из 1

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

СообщениеДобавлено: 17 фев 2017, 18:14
Ant1V1rus
Доброго дня всем.
Учусь работать в 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 отключалась
Думаю суть поняли)))
Ну вот и в принципе всё что нужно узнать.
Надеюсь объяснил нормально, если нет, постараюсь объяснить понятнее.

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

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

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

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


Не делать автоматическую нарезку, а задавать сетку с конкретными значениями. Но тогда спрайты в спрайт листе изначально должен быть тоже выравнены.

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

СообщениеДобавлено: 18 фев 2017, 00:12
Ant1V1rus
Может кто помочь мне?

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

СообщениеДобавлено: 18 фев 2017, 12:40
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);
}


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

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

СообщениеДобавлено: 18 фев 2017, 17:07
Ant1V1rus
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'е, анимации срабатывают, но как то криво и не понятно. Даже когда отпускаю клавишу , анимация еще несколько мили-секунд работает, а потом уже возвращает в анимацию спокойствия.

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

СообщениеДобавлено: 18 фев 2017, 17:12
LemanRass
HasExitTime флажок я думаю в этом виноват.

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

СообщениеДобавлено: 18 фев 2017, 17:19
Ant1V1rus
LemanRass писал(а):HasExitTime флажок я думаю в этом виноват.

Убирал, так же(

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

СообщениеДобавлено: 18 фев 2017, 17:44
LemanRass
Кинь пару скринов как у тебя выглядит blend tree.

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

СообщениеДобавлено: 18 фев 2017, 18:43
Ant1V1rus
LemanRass писал(а):Кинь пару скринов как у тебя выглядит blend tree.

Изображение

Я пока пробую разобраться с ним, но не могу понять как правильно пользоваться им((

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

СообщениеДобавлено: 18 фев 2017, 19:25
LemanRass
Изучите материал по Blend Tree и все вопросы сами отпадут.
Успехов!

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

СообщениеДобавлено: 18 фев 2017, 20:40
Ant1V1rus
LemanRass писал(а):Изучите материал по Blend Tree и все вопросы сами отпадут.
Успехов!

Разобрался с Blend Tree. Но заметил кое что.
Анимация немного работает с запозданием, то есть, чем дольше жмёшь на клавишу, а потом отпускаешь, тем дольше анимация переходит в другую.
Если нажать и сразу отпустить, анимация переходит быстро.

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

СообщениеДобавлено: 18 фев 2017, 20:50
GRESHNIK512
маска в фотошопе творит чудеса все стоит на месте и движется плавно ))