Помощь с анимациями
| |
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 |
|
| |
|