Пятница, 19 Апреля 2024, 19:47

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Помощь с анимациями
Помощь с анимациями
AntonPolДата: Суббота, 05 Апреля 2014, 12:08 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем привет! Есть небольшой вопрос. Может показаться возможно банальным и глупым, но все же. Как сделать, чтобы... хм... как объяснить бы... Вообщем, есть две(их больше) анимации у меня. "Вход" в приседание и спокойное состояние в приседании. Как сделать чтобы по нажатию left ctrl он присел(вход в приседание) и после этого если зажата left ctrl было спокойное состояние в приседании. Если не сложно кому, скиньте подобие скрипта, пример, так скажем.

Добавлено (05.04.2014, 12:08)
---------------------------------------------
ах да язык желательно JS

PoqXertДата: Суббота, 05 Апреля 2014, 12:18 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Используй Mecanim.

Расширения для Unity3D
Блог программиста - PoqXert.ru
AntonPolДата: Суббота, 05 Апреля 2014, 12:22 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата PoqXert ()
Используй Mecanim.


очень объемное понятие. Не знаком с ним. Можете объяснить?
PoqXertДата: Суббота, 05 Апреля 2014, 12:30 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
http://www.youtube.com/user/seamanmur

Расширения для Unity3D
Блог программиста - PoqXert.ru
AntonPolДата: Суббота, 05 Апреля 2014, 12:33 | Сообщение # 5
был не раз
Сейчас нет на сайте
Цитата PoqXert ()
http://www.youtube.com/user/seamanmur


извините, можно все же без Mecanima сделать то, что мне нужно?
PoqXertДата: Суббота, 05 Апреля 2014, 13:19 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Цитата AntonPol ()
извините, можно все же без Mecanima сделать то, что мне нужно?

Можно. Но нужно ли?
Код

var sidim : boolean = false;

function Update()
{
if(Input.GetKeyDown(KeyCode.LeftControl) && !sidim)
{
animation.Play("SadimsyaAnim");
sidim = true;
}
if(sidim && !animation["SadimsyaAnim"].isPlaying)
{
animation.Play("SidimAnim");
}
}

C Mecanim всё проще...


Расширения для Unity3D
Блог программиста - PoqXert.ru


Сообщение отредактировал PoqXert - Суббота, 05 Апреля 2014, 13:20
ЛевшаДата: Суббота, 05 Апреля 2014, 13:20 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата
без Mecanima сделать то, что мне нужно?

Код

if (Input.GetKeyDown("left ctrl"))
      animation.CrossFade("SitDown");
else if (Input.GetKey("left ctrl") && !animation.isPlaying)
      animation.CrossFade("SitIdle");
else  animation.CrossFade("SitUp");


Анимации "SitDown" и "SitUp" должны быть once, а "SitIdle" - loop.


X.cor.R (Prologue)

Сообщение отредактировал Левша - Суббота, 05 Апреля 2014, 13:22
AntonPolДата: Суббота, 05 Апреля 2014, 13:43 | Сообщение # 8
был не раз
Сейчас нет на сайте
Цитата Левша ()
Цитата
без Mecanima сделать то, что мне нужно?

Код

if (Input.GetKeyDown("left ctrl"))
      animation.CrossFade("SitDown");
else if (Input.GetKey("left ctrl") && !animation.isPlaying)
      animation.CrossFade("SitIdle");
else  animation.CrossFade("SitUp");

Анимации "SitDown" и "SitUp" должны быть once, а "SitIdle" - loop.


Отлично, мне это помогло! Но проблемка. Он выходит из сидения сам, автоматически всегда. Галочку на Play Automatically не ставил.
ЛевшаДата: Суббота, 05 Апреля 2014, 13:47 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
Цитата Левша ()
а "SitIdle" - loop.


X.cor.R (Prologue)
shustr1k76Дата: Воскресенье, 06 Марта 2016, 21:56 | Сообщение # 10
почетный гость
Сейчас нет на сайте
а как воспроизвести анимацию рандомно? в mecanim добавил пару анимаций ударов, при нажатии на кнопку хотелось бы, чтоб воспроизвелась любая, не подскажите код?
dreenlineДата: Воскресенье, 06 Марта 2016, 23:14 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Цитата shustr1k76 ()
а как воспроизвести анимацию рандомно?

тоже это интересно!
shustr1k76Дата: Понедельник, 07 Марта 2016, 18:31 | Сообщение # 12
почетный гость
Сейчас нет на сайте
Цитата dreenline ()
тоже это интересно!

новерно правильно подумал) нужно создать массив string s[] = {"walk", "idek"} примерно так, и новерно из него брать анимацию, т.е код должен выглядеть так
Код
anim.SetBool("s", true);


Добавлено (07 марта 2016, 18:28)
---------------------------------------------
Цитата dreenline ()
тоже это интересно!

решил проблему так , всемогущие Гуру подскажите, на сколько это правильно?
Код
int n;
if (rotateJoy.IsPressed ()) {
n = Random.Range (0, 3);
if( n > 0){
anim.SetBool ("rl", true);
//anim.SetBool ("idel", true);
}
if( n == 0){
anim.SetBool("melnica", true);
}

}


Добавлено (07 марта 2016, 18:31)
---------------------------------------------
Цитата dreenline ()
тоже это интересно!

решил проблему так , всемогущие Гуру подскажите, на сколько это правильно?
Код
int n;
if (rotateJoy.IsPressed ()) {
n = Random.Range (0, 3);
if( n > 0){
anim.SetBool ("rl", true);
//anim.SetBool ("idel", true);
}
if( n == 0){
anim.SetBool("melnica", true);
}

}


Сообщение отредактировал shustr1k76 - Понедельник, 07 Марта 2016, 18:28
seamanДата: Понедельник, 07 Марта 2016, 19:42 | Сообщение # 13
старожил
Сейчас нет на сайте
Я так понимаю, если SetBool - используете Меканим.
Тогда правильнее будет сделать блендтри http://docs.unity3d.com/Manual/class-BlendTree.html И установкой целого параметра полученного Random.Range переключать анимации
shustr1k76Дата: Понедельник, 07 Марта 2016, 20:58 | Сообщение # 14
почетный гость
Сейчас нет на сайте
ух, походу для это дремучий лес, смысл понял добавил блендри, в него добавил пару анимаций, спокойствие и хотьба, трэшхолд установил на одной 1 на второй 2, а что дальше?
seamanДата: Понедельник, 07 Марта 2016, 21:10 | Сообщение # 15
старожил
Сейчас нет на сайте
Берешь параметр int, который использовал в threshhold. Через скрипт устанавливаешь случайно (Random.Range!) в 1 или 2 (Не SetBool как раньше, а SetInt) - видишь случайно выбранные анимации из двух своих.

Сообщение отредактировал seaman - Понедельник, 07 Марта 2016, 21:13
shustr1k76Дата: Понедельник, 07 Марта 2016, 21:21 | Сообщение # 16
почетный гость
Сейчас нет на сайте
Код
int n;
if (rotateJoy.IsPressed ()) {
n = Random.Range (0, 3);
if( n > 0){
anim.SetInteger("rl", n);

}
if( n == 0){
anim.SetInteger("melnica", n);
}

правильно? получается n рандомное число, и оно же в threshhold? или же anim.SetInteger("rl", свое число из threshhold);
seamanДата: Понедельник, 07 Марта 2016, 21:44 | Сообщение # 17
старожил
Сейчас нет на сайте
Ифы зачем? Все сделает меканим...
Как у Вас называется параметр, которым Вы задавали threshhold? Его и устанавливайте.
И посмотрите уроки по Меканим. Методом тыка далеко не все можно решить.


Сообщение отредактировал seaman - Понедельник, 07 Марта 2016, 21:47
shustr1k76Дата: Вторник, 08 Марта 2016, 08:22 | Сообщение # 18
почетный гость
Сейчас нет на сайте
в меканим в дерево добавленно две анимации, в idel - threshhold установлен на 1, а в walk - threshhold установлен 2. как же anim.SetInt поймёт к чему я обращаюсь, если нужно указывать и имя анимации?
Цитата seaman ()
И посмотрите уроки по Меканим. Методом тыка далеко не все можно решить.

может подкинете, которое мне поможет?
seamanДата: Вторник, 08 Марта 2016, 11:51 | Сообщение # 19
старожил
Сейчас нет на сайте
Цитата
как же anim.SetInt поймёт к чему я обращаюсь, если нужно указывать и имя анимации?

Полная чушь. Вы бы хоть мануал посмотрели прежде чем такое городить.
http://docs.unity3d.com/ScriptReference/Experimental.Director.IAnimatorControllerPlayable.SetInteger.html
Где Вы тут видите "имя анимации"?

Добавлено (08 марта 2016, 11:51)
---------------------------------------------
https://www.youtube.com/watch?v=lJzp4hbwgt0&index=6


Сообщение отредактировал seaman - Вторник, 08 Марта 2016, 11:52
shustr1k76Дата: Вторник, 08 Марта 2016, 18:47 | Сообщение # 20
почетный гость
Сейчас нет на сайте
ой честно скажу, ни чего не выходит. даже для setint нужно два параметра, и как же это применить для threshold? тип использую 1D. уже просто запутался(

Добавлено (08 марта 2016, 18:47)
---------------------------------------------
Цитата shustr1k76 ()
seaman

посмотрел Ваш цикл, по меканим, очень позновательно. Но честно, скажу не знаю как применить для рандома анимаций. как и говорил выше создал дерево поместил две анимации, установил threshold. как же программно через setint обратится, покажите пример?
пришел только к этому, blend параметр установлен в 0, и при переходе с idel на одну анимацию, если blend = 1, а на вторую blend = 2, но и то такое ощущение что то не так))
Код
if (rotateJoy.IsPressed ()) {
   n = Random.Range (0, 2);

   anim.SetInteger("blend", n);
   
   anim.SetInteger("blend", n);}

Уважаемые Гуру, помогите кодом, это одно, что стопорит меня от дальнейшей разработки проекта, иначе бессмысленно(


Сообщение отредактировал shustr1k76 - Вторник, 08 Марта 2016, 20:31
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Помощь с анимациями
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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