Не работает анимация
|
|
Эргалон | Дата: Понедельник, 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);
нажал один раз кнопку - атакуешь. нажал еще раз - перестал атаковать.
либо отслеживай конец анимации и ставь attack = false;
А лучше смотри, что не так в аниматоре у тебя.
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
|
|
| |
Эргалон | Дата: Понедельник, 15 Сентября 2014, 20:39 | Сообщение # 6 |
Вездесущий
Сейчас нет на сайте
| MANMANA, Спасибо за разъяснение, сейчас вроде как более менее работает как надо
Кубариум Rise of the dark lords
|
|
| |