Дергания анимации - Форум Игроделов
Чт, 30 Май 2024, 11:01 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Дергания анимации
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
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024