Дергания анимации
korveen Дата: Пн, 30 Дек 2013, 12:21 | Сообщение # 1
Победитель конкурса GCC
Сообщений: 183
Награды:
2
Репутация:
45
Статус: Offline
Доброго времени суток! Я в аниматоре сделал анимацию камере, вся зациклена, проблема в самом скрипте Код
using UnityEngine; using System.Collections; public class anim : MonoBehaviour { public bool walk; /* 0 - idle 1 - walk 2 - run */ public int mode = 0; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (mode==0) { animation.Play("cam_Idle", PlayMode.StopAll); if(Input.GetButton("Vertical") || Input.GetButton("Horizontal") && walk==false) { mode = 1; walk=true; if(mode==1) { animation.CrossFade("cam_Walk"); } } } if (Input.GetButtonUp("Vertical") || Input.GetButtonUp("Horizontal") && walk==true) { mode = 0; walk = false; } } }
Например я зажимаю 2 кнопки ходьбы, и потом отпускаю одну, то анимация ходьбы резко дегаеться и начинает работать заного, мне нужно чтобы она продолжалась пока нажата хотя бы одна кнопка ходьбы. И еще, какая команда возращает ротацию объекта на ту которую мне нужно? public GameObject и потом как? или можно по другому?
Сообщение Доброго времени суток! Я в аниматоре сделал анимацию камере, вся зациклена, проблема в самом скрипте Код
using UnityEngine; using System.Collections; public class anim : MonoBehaviour { public bool walk; /* 0 - idle 1 - walk 2 - run */ public int mode = 0; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (mode==0) { animation.Play("cam_Idle", PlayMode.StopAll); if(Input.GetButton("Vertical") || Input.GetButton("Horizontal") && walk==false) { mode = 1; walk=true; if(mode==1) { animation.CrossFade("cam_Walk"); } } } if (Input.GetButtonUp("Vertical") || Input.GetButtonUp("Horizontal") && walk==true) { mode = 0; walk = false; } } }
Например я зажимаю 2 кнопки ходьбы, и потом отпускаю одну, то анимация ходьбы резко дегаеться и начинает работать заного, мне нужно чтобы она продолжалась пока нажата хотя бы одна кнопка ходьбы. И еще, какая команда возращает ротацию объекта на ту которую мне нужно? public GameObject и потом как? или можно по другому? Автор - korveen Дата добавления - 30 Дек 2013 в 12:21
seaman Дата: Пн, 30 Дек 2013, 12:43 | Сообщение # 2
Гуру
Сообщений: 1748
Награды:
10
Репутация:
660
Статус: Offline
1. Зачем каждый кадр запускать анимацию idle? 2. Код
mode = 1; walk=true; if(mode==1)
Зачем проверять mode == 1, если мы только что установили его в эту 1? 3. Зачем переменная walk, если в mode уже есть walk? 4. В данном скрипте, пока нет run зачем нужна вообще переменная mode? Итог. Нечто типа: Код
using UnityEngine; public class Anim : MonoBehaviour { void Start () { animation.Play("cam_Idle"); } void Update () { if(Input.GetButtonDown("Vertical") || Input.GetButtonDown("Horizontal")) { animation.CrossFade("cam_Walk"); } if (Input.GetButtonUp("Vertical") || Input.GetButtonUp("Horizontal")) { animation.CrossFade("cam_Idle"); } } }
Сообщение 1. Зачем каждый кадр запускать анимацию idle? 2. Код
mode = 1; walk=true; if(mode==1)
Зачем проверять mode == 1, если мы только что установили его в эту 1? 3. Зачем переменная walk, если в mode уже есть walk? 4. В данном скрипте, пока нет run зачем нужна вообще переменная mode? Итог. Нечто типа: Код
using UnityEngine; public class Anim : MonoBehaviour { void Start () { animation.Play("cam_Idle"); } void Update () { if(Input.GetButtonDown("Vertical") || Input.GetButtonDown("Horizontal")) { animation.CrossFade("cam_Walk"); } if (Input.GetButtonUp("Vertical") || Input.GetButtonUp("Horizontal")) { animation.CrossFade("cam_Idle"); } } }
Автор - seaman Дата добавления - 30 Дек 2013 в 12:43
korveen Дата: Пн, 30 Дек 2013, 13:42 | Сообщение # 3
Победитель конкурса GCC
Сообщений: 183
Награды:
2
Репутация:
45
Статус: Offline
seaman , афигеть! И все так просто? я делал по аналогии урока на ютуб и там все намудрено, потом под себя делал.. А оказалось все так просто! спасибо! А если и бег реализовать то можно так? или я опять туплю? Код
if(Input.GetButtonDown("Vertical") || Input.GetButtonDown("Horizontal")) { animation.CrossFade("cam_Walk"); if (Input.GetKeyDown(KeyCode.LeftShift)) { animation.CrossFade ("cam_Run"); } }
Добавлено (30 Дек 2013, 13:42) --------------------------------------------- И еще пишет что 'Anim_cam' AnimationEvent has no function name specified! Anim_cam - это пустышка с анимациями с дочерней камерой(она как раз и анимируется) Что значит эта ошибка? Перевод мне конкретного ничего не объяснил
Сообщение seaman , афигеть! И все так просто? я делал по аналогии урока на ютуб и там все намудрено, потом под себя делал.. А оказалось все так просто! спасибо! А если и бег реализовать то можно так? или я опять туплю? Код
if(Input.GetButtonDown("Vertical") || Input.GetButtonDown("Horizontal")) { animation.CrossFade("cam_Walk"); if (Input.GetKeyDown(KeyCode.LeftShift)) { animation.CrossFade ("cam_Run"); } }
Добавлено (30 Дек 2013, 13:42) --------------------------------------------- И еще пишет что 'Anim_cam' AnimationEvent has no function name specified! Anim_cam - это пустышка с анимациями с дочерней камерой(она как раз и анимируется) Что значит эта ошибка? Перевод мне конкретного ничего не объяснил
Автор - korveen Дата добавления - 30 Дек 2013 в 13:42
seaman Дата: Пн, 30 Дек 2013, 14:41 | Сообщение # 4
Гуру
Сообщений: 1748
Награды:
10
Репутация:
660
Статус: Offline
1. С бегом так не выйдет. Не получится у Вас в одном кадре нажать две клавиши одновременно. Тут нужно отдельно анализировать LeftShift и вот тут уже вводить некую переменную run, показывающую, что нужно включить бег, а не ходьбу. Типа: Код
if (Input.GetKeyDown(KeyCode.LeftShift)) run = true; if (Input.GetKeyUp(KeyCode.LeftShift)) run = false;
Ну а при нажатии на Vertical/Horizontal проверять ее и запускать нужную анимацию. Типа: Код
if(Input.GetButtonDown("Vertical") || Input.GetButtonDown("Horizontal")) { if (run) animation.CrossFade ("cam_Run"); else animation.CrossFade("cam_Walk"); }
2. Не указана функция, которая запускается при наступлении события анимации ЗЫ: Я понимаю, что при написании своего контроллера многому можно начиться, так что это полезно. Но все же может вот ЭТО почитаешь.
Сообщение 1. С бегом так не выйдет. Не получится у Вас в одном кадре нажать две клавиши одновременно. Тут нужно отдельно анализировать LeftShift и вот тут уже вводить некую переменную run, показывающую, что нужно включить бег, а не ходьбу. Типа: Код
if (Input.GetKeyDown(KeyCode.LeftShift)) run = true; if (Input.GetKeyUp(KeyCode.LeftShift)) run = false;
Ну а при нажатии на Vertical/Horizontal проверять ее и запускать нужную анимацию. Типа: Код
if(Input.GetButtonDown("Vertical") || Input.GetButtonDown("Horizontal")) { if (run) animation.CrossFade ("cam_Run"); else animation.CrossFade("cam_Walk"); }
2. Не указана функция, которая запускается при наступлении события анимации ЗЫ: Я понимаю, что при написании своего контроллера многому можно начиться, так что это полезно. Но все же может вот ЭТО почитаешь. Автор - seaman Дата добавления - 30 Дек 2013 в 14:41
korveen Дата: Пн, 30 Дек 2013, 16:25 | Сообщение # 5
Победитель конкурса GCC
Сообщений: 183
Награды:
2
Репутация:
45
Статус: Offline
seaman , еще раз спасибО! буду читать манул который вы мне дали) он на счет того, как сделать свой контроллер, я все правильно понял?
Сообщение отредактировал korveen - Пн, 30 Дек 2013, 16:56
Сообщение seaman , еще раз спасибО! буду читать манул который вы мне дали) он на счет того, как сделать свой контроллер, я все правильно понял?Автор - korveen Дата добавления - 30 Дек 2013 в 16:25
seaman Дата: Пн, 30 Дек 2013, 18:35 | Сообщение # 6
Гуру
Сообщений: 1748
Награды:
10
Репутация:
660
Статус: Offline
Да.
Сообщение Да. Автор - seaman Дата добавления - 30 Дек 2013 в 18:35