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

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Не работает анимация
Не работает анимация
ЭргалонДата: Понедельник, 15 Сентября 2014, 01:02 | Сообщение # 1
Вездесущий
Сейчас нет на сайте
Код
using UnityEngine;
using System.Collections;

public class Step : MonoBehaviour {
   
     private float speed = 6.0F;
  public float speedStep = 6.0f;
  public float speedShift = 9.0f;
     public float gravity = 20.0F;
  public float speedRotate = 4;
     private Vector3 moveDirection = Vector3.zero;
   
  // Анимации
  public AnimationClip a_Idle;
  public float a_IdleSpeed = 1;
   
  public AnimationClip a_Walk;
  public float a_WalkSpeed = 1;
   
  public AnimationClip a_Run;
  public float a_RunSpeed = 1;

  public AnimationClip a_Attack;
  public float a_AttackSpeed = 1;

  private string s_anim;
   
  private CharacterController controller;
   
  void Start () {
   animation[a_Idle.name].speed = a_IdleSpeed;
   animation[a_Walk.name].speed = a_WalkSpeed;
   animation[a_Run.name].speed = a_RunSpeed;
   animation[a_Attack.name].speed = a_AttackSpeed;

   animation[a_Idle.name].wrapMode = WrapMode.Loop;
   animation[a_Walk.name].wrapMode = WrapMode.Loop;
   animation[a_Run.name].wrapMode = WrapMode.Loop;
   animation[a_Attack.name].wrapMode = WrapMode.Loop;
    
   s_anim = a_Idle.name;
    
   controller = GetComponent<CharacterController>();
  }
   
     void Update() {

   animation.CrossFade(s_anim);
    
         if (controller.isGrounded) {
             moveDirection = new Vector3(0, 0, Input.GetAxis("Vertical"));
             moveDirection = transform.TransformDirection(moveDirection);
             moveDirection *= speed;
     
    if (Input.GetKey(KeyCode.LeftAlt))
     speed = speedShift;
    else speed = speedStep;

    if (Input.GetKey(KeyCode.LeftShift))
     {
     animation.CrossFade(a_Attack.name);
    }
    // Анимация ходьбы
    if(Input.GetAxis("Vertical") > 0) {
     if(speed == speedShift) {
      s_anim = a_Run.name;
      animation[a_Run.name].speed = a_RunSpeed;
     } else {
      s_anim = a_Walk.name;
      animation[a_Walk.name].speed = a_WalkSpeed;
     }
    } else  
    if(Input.GetAxis("Vertical") < 0) {
     if(speed == speedShift) {
      s_anim = a_Run.name;
      animation[a_Run.name].speed = a_RunSpeed * -1;
     } else {
      s_anim = a_Walk.name;
      animation[a_Walk.name].speed = a_WalkSpeed * -1;
     }
    } else
    if(Input.GetAxis("Vertical") == 0)  
     s_anim = a_Idle.name;
     
    // Поворот  
    transform.Rotate(Vector3.down * speedRotate * Input.GetAxis("Horizontal") * -1, Space.World);
         }
    
         moveDirection.y -= gravity * Time.deltaTime;
         controller.Move(moveDirection * Time.deltaTime);
     }
}


Подскажите пожалуйста, вот нажимаю на кнопку Left Shift, должна по идее воспроизвестись анимация Attack, но по нажатию ничего не происходит(анимация стоит) в чем проблема?
Вроде как разобрался, но теперь проблема в другом, по нажатию на кнопку анимация воспроизводится только тогда, когда зажата кнопка, а как сделать так, чтобы нажав один раз анимация полностью воспроизвелась?


Кубариум
Rise of the dark lords


Сообщение отредактировал Эргалон - Понедельник, 15 Сентября 2014, 01:22
MANMANAДата: Понедельник, 15 Сентября 2014, 11:01 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
"Input.GetKey
Returns true while the user holds down the key identified by name. Think auto fire.

Input.GetKeyDown
Returns true during the frame the user starts pressing down the key identified by name."

Поменяй Input.GetKey на Input.GetKeyDown


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
ЭргалонДата: Понедельник, 15 Сентября 2014, 16:36 | Сообщение # 3
Вездесущий
Сейчас нет на сайте
Такой вариант уже был рассмотрен на практике - анимация не воспроизводится вообще.

Кубариум
Rise of the dark lords
FolleahДата: Понедельник, 15 Сентября 2014, 16:59 | Сообщение # 4
Архитектор
Сейчас нет на сайте
Тогда кривая реализация в аниматоре

MANMANAДата: Понедельник, 15 Сентября 2014, 17:13 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
с кривой анимацией
if (Input.GetKeyDown(KeyCode.LeftShift))
{
if(attack==false)
{
attack = true;
} else attack = false;
}

if(attack) animation.CrossFade(a_Attack.name);

нажал один раз кнопку - атакуешь. нажал еще раз - перестал атаковать. smile

либо отслеживай конец анимации и ставь attack = false;

А лучше смотри, что не так в аниматоре у тебя.


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
ЭргалонДата: Понедельник, 15 Сентября 2014, 20:39 | Сообщение # 6
Вездесущий
Сейчас нет на сайте
MANMANA, Спасибо за разъяснение, сейчас вроде как более менее работает как надо

Кубариум
Rise of the dark lords
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Не работает анимация
  • Страница 1 из 1
  • 1
Поиск:

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