Как я могу включить свои анимации, когда я нажимаю кнопку, чтобы она не ждала другую анимацию? | Mecanim
Я учусь использовать mecanim. В аниматоре у меня есть 3 анимации (бездействие, прогулка и бег), эти анимации работают правильно, но проблема в том, что, когда я нажимаю кнопку W, например, проходит две секунды, пока анимация (прогулка) не включена, потому что эта анимация (прогулка) дождитесь окончания другой анимации (холостого хода). Я хочу, чтобы анимации активировались при нажатии на кнопку. Как я могу это сделать?
2 ответа
Я думаю, что вы сделали все правильно,
1. Создайте "контроллер аниматора", затем установите анимации вашего элемента управления аниматором и получите их логические значения, например: для состояния прыжка получить значение bool как прыжок, а для состояния скольжения получить значение bool как скольжение.
2. Затем вы устанавливаете эти булевы переменные в стрелки перехода из состояния "Любое состояние".
3. Вы должны добавить переходы в "Any State", потому что с этого момента его изменения в другие состояния легко.
4. Не забывайте ставить галочки на этих элементах в каждом из ваших анимационных движений, если только он не вернется обратно в состояние, которое вы хотите иметь,
5. Это пример кода, который я реализовал для управления бегуном.
Ваша проблема в том, что вы не установили время задержки, как это
Invoke("stopJumping",0.01f);
.Это 0,01f - задержка, которая вызывает время реакции вашей кнопки.
using UnityEngine;
using System.Collections;
public class CharacterMovement : MonoBehaviour {
private Animator animator;
private int lane;
// Use this for initialization
void Start () {
lane =0;
animator =GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.UpArrow)) //When you pressed UpArrow
{
animator.SetBool("jumping",true); //Activate jumping
Invoke("stopJumping",0.01f); // state(because it's boolval
// And invoke stopJumping
} // method
if(Input.GetKeyDown(KeyCode.DownArrow))
{
animator.SetBool("sliding",true);
Invoke("stopSliding",0.01f);
}
if(Input.GetKeyDown(KeyCode.LeftArrow))
{if(lane > -1) //when you slide left,switch lane
//to left
lane--;
}
if(Input.GetKeyDown(KeyCode.RightArrow))
{if(lane < 1)
lane++;
}
Vector3 newPosition =transform.position;
newPosition.x=lane;
newPosition.y=0f;
transform.position= newPosition;
}
void stopJumping()
{
animator.SetBool("jumping",false);
}
void stopSliding()
{
animator.SetBool("sliding",false);
}
}
Если вы хотите сослаться на учебник, просто отметьте это, на что я ссылался сам.
Я нашел ответ, который мне был нужен. Есть флажок, когда вы выбираете переход, который называется "Время выхода". Если щелкнуть его, необходимо снять флажок, и анимация, которую вы поместили на контроллер аниматора, будет воспроизводиться при нажатии определенной кнопки.:)