2015-12-02 7 views
1

hi im работает над мини-2-й игрой в единстве, и я просто создаю 2-й символ и некоторую анимацию (Up_Idle, Down_Idle, Right_Idle, Left_Idle/Up_run, Down_run, Right_run, Left_run) проблема эти анимации не работают корректно (например, когда я нажимаю стрелок вверх характе не играет анимации Up_r, но он играет Up_run и left_run анимации в то же время)Ошибка аниматора анимации персонажа не работает

здесь скриншот:

enter image description here

вот код:

using UnityEngine; 
using System.Collections; 

public class movement : MonoBehaviour 
{ 

    public float speedX =1f; 

    public float speedY =1f; 

    Animator animator; 

    void Start() 
    { 
     animator = GetComponent <Animator>(); 
    } 

    void Update() 
    { 
     if (Input.GetKey (KeyCode.UpArrow)) { 
        transform.Translate (new Vector2 (speedX, speedY) * Time.deltaTime); 
        animator.SetFloat ("Up", 1); 
        return; 
     } else { 
      animator.SetFloat ("Up", 0); 
     } 

     if (Input.GetKey (KeyCode.DownArrow)) { 
      transform.Translate (new Vector2 (-speedX, -speedY) * Time.deltaTime); 
      animator.SetFloat ("Down", 1); 
      return; 

     } else { 
      animator.SetFloat ("Down", 0); 
     } 

     if (Input.GetKey (KeyCode.RightArrow)) { 
      transform.Translate (new Vector2 (speedX, -speedY) * Time.deltaTime); 
      animator.SetFloat ("Right", 1); 
      return; 
     } else { 
      animator.SetFloat ("Right", 0); 
     } 

     if (Input.GetKey (KeyCode.LeftArrow)) { 
      transform.Translate (new Vector2 (-speedX, speedY) * Time.deltaTime); 
      animator.SetFloat ("Left", 1); 
      return; 
     } else { 
      animator.SetFloat ("Left", 0); 
     } 
    } 
} 
+0

Mmm .. Я мало нового для Unity тоже ... но я не вижу всех переходов. Я не знаю, есть ли способ изменить анимацию без перехода ... но вы сказали, что левая анимация работает как-то. Мой совет будет проверять переходы. Но я могу ошибаться. : O –

+0

способ, которым я читаю скриншот: idle up по умолчанию. только аниматор.SetFloat («Вверх», 1); вызовет что-то для run_up. остальные анимации выглядят неприступными. Мои анимации выглядят как ад с большим количеством переходов haha ​​ –

ответ

0

частный аниматор-аниматор;

// Use this for initialization 
void Start() 
{ 
    animator = this.GetComponent<Animator>(); 

} 

// Update is called once per frame 
void Update() 
{ 

    var vertical = Input.GetAxis("Vertical"); 
    var horizontal = Input.GetAxis("Horizontal"); 

    if (vertical > 0) 
    { 
     animator.SetInteger("Direction", 1); 
     transform.Translate(Vector2.up* Time.deltaTime); 
     //animator.SetInteger("Direction", 2); 
     animator.SetFloat("Speed", 1.0f); 
    } 
    else if (vertical < 0) 
    { 
     animator.SetInteger("Direction", 3); 
     transform.Translate(Vector3.down* Time.deltaTime); 
     //animator.SetInteger("Direction", 0); 
     animator.SetFloat("Speed", 1.0f); 
    } 
    else if (horizontal < 0) 
    { 
     animator.SetInteger("Direction", 4); 

      transform.Translate(Vector3.left* Time.deltaTime); 

     //transform.Translate(Vector2.right* Time.deltaTime); 
     animator.SetFloat("Speed", 1.0f); 
    } 
    else if (horizontal > 0) 
    { 

    animator.SetInteger("Direction", 2); 
    transform.Translate(Vector2.right* Time.deltaTime); 
    // animator.SetInteger("Direction", 4); 
    animator.SetFloat("Speed", 1.0f); 
    } 
    else 
    { 
     //animator.SetInteger("Direction", 6); 
     animator.SetFloat("Speed", 0.0f); 

    } 
} 
0

Если одновременно воспроизводятся две анимации, это означает, что условие используется как переход для двух графиков. Например, ваши idle_left -> run_left и idle_up -> run_up имеют, безусловно, такое же условие перехода (Up == 1.0 я предполагаю). Если вы хотите, чтобы анимации были независимыми, у них не должно быть одинакового условия перехода.

Надеюсь, это поможет.

+0

спасибо, что так я думаю, что я понял :) –

+0

Ваш прием :) – Lizlotte