2016-11-08 111 views
0

我製作了一個移動角色並設置動畫的腳本。當玩家想要向右走時,動畫被設置爲具有面向右側的角色並走的角色。一切都很完美,直到你想一次向兩個方向移動,讓我們說起來,離開。角色通過這兩個力量的合成,但動畫卻變得瘋狂。我爲此做了quickfix,不允許在其他動畫播放時播放左邊,右邊。 我在想這樣的事情: 當你正確的時候,你正對着右邊。繼續,然後你按下按鈕,你將進入東北方,但你仍然是正確的。 所以你就要面對你想要先走的一面,在這個例子中是正確的。角色移動,換球員動畫

using UnityEngine; 
using System.Collections; 

public class player_movement : MonoBehaviour { 
    //przyciski do poruszania się 
    private KeyCode right_key = KeyCode.D; 
    private KeyCode left_key = KeyCode.A; 
    private KeyCode up_key = KeyCode.W; 
    private KeyCode down_key = KeyCode.S; 

    //poruszanie się gracza right == true => porusza się w prawo, left == true => porusza się w lewo; itp.. 
    private bool right; 
    private bool left; 
    private bool up; 
    private bool down; 

    player_statistics player; //zmienna przechowująca klasę? odnośnik do klasy? (yy nie wiem jak to nazwać) 

    void Start() 
    { 
     //przypisanie klasy do zmiennej, funkcji, klasy, no właśnie 
     player = GameObject.FindWithTag("Player").GetComponent<player_statistics>(); 
    } 

    void Update() 
    { 
     movement_xy(); //wowołanie fukncji odp za wykrycie wciśnięcia klawiszy odp za poruszanie się 
     movement_animation(); 
    } 

    void FixedUpdate() 
    { 
     if (right || left || up || down) //wywołanie funkcji odp poruszanie się 
     { 
      movement_force(); 
     } 
    } 



    void movement_xy() 
    { 


     //ustawienie zmiennej odpowiedzialnej za ruch w prawo 
     if (Input.GetKeyDown(right_key)) 
     { 
      right = true; 
     } 
     if (Input.GetKeyUp(right_key)) 
     { 
      right = false; 
      GetComponent<Animator>().Play("idle_right", 0); 
     } 

     //ustawienie zmiennej odpowiedzialnej za ruch w lewo 
     if (Input.GetKeyDown(left_key)) 
     { 
      left = true; 
     } 
     if (Input.GetKeyUp(left_key)) 
     { 
      left = false; 
     } 

     //ustawienie zmiennej odpowiedzialnej za ruch w górę 
     if (Input.GetKeyDown(up_key)) 
     { 
      up = true; 
     } 
     if (Input.GetKeyUp(up_key)) 
     { 
      up = false; 
      GetComponent<Animator>().Play("idle_up", 0); 
     } 

     //ustawienie zmiennej odpowiedzialnej za ruch w dół 
     if (Input.GetKeyDown(down_key)) 
     { 
      down = true; 
     } 
     if (Input.GetKeyUp(down_key)) 
     { 
      down = false; 
      GetComponent<Animator>().Play("idle_down", 0); 
     } 
    } 

    void movement_force() 
    { 
     // przykładanie do postaci danej sił fizycznej na osi X i Y 
     if (left && player.player_gameobject.GetComponent<Rigidbody2D>().velocity.x > -5) 
     { 
      player.player_rigidbody.AddForce(new Vector2(-player.movement_speed, 0), ForceMode2D.Impulse); 
     } 
     if (right && player.player_gameobject.GetComponent<Rigidbody2D>().velocity.x < 5) 
     { 
      player.player_rigidbody.AddForce(new Vector2(player.movement_speed, 0), ForceMode2D.Impulse); 
     } 
     if (up && player.player_gameobject.GetComponent<Rigidbody2D>().velocity.y < 5) 
     { 
      player.player_rigidbody.AddForce(new Vector2(0, player.movement_speed), ForceMode2D.Impulse); 
     } 
     if (down && player.player_gameobject.GetComponent<Rigidbody2D>().velocity.y > -5) 
     { 
      player.player_rigidbody.AddForce(new Vector2(0, -player.movement_speed), ForceMode2D.Impulse); 
     } 
    } 




    void movement_animation() 
    { 
     if(right && !up && !down) //quick fix, not like this helped but character animation isnt in crazy angry kid state 
     { 
      GetComponent<Animator>().Play("go_right", 0); 
     } 
     if (left && !up && !down) 
     { 
      GetComponent<Animator>().Play("go_left", 0); 
     } 
     if (up) 
     { 
      GetComponent<Animator>().Play("go_up", 0); 
     } 
     if (down) 
     { 
      GetComponent<Animator>().Play("go_down", 0); 
     } 
    } 
} 

回答

1

好吧,我得到了這個。

void movement_animation() 
{ 
    if(right && !left && !up && !down) 
    { 
     GetComponent<Animator>().Play("go_right", 0); 
    } 
    if (left && !right && !up && !down) 
    { 
     GetComponent<Animator>().Play("go_left", 0); 
    } 
    if (up && !down && !left && !right) 
    { 
     GetComponent<Animator>().Play("go_up", 0); 
    } 
    if (down && !up && !left && !right) 
    { 
     GetComponent<Animator>().Play("go_down", 0); 
    } 
} 

void movement_animation() 
{ 
    if(right && !left && !up && !down) //quick fix, not like this helped but character animation isnt in crazy angry kid state 
    { 
     GetComponent<Animator>().Play("go_right", 0); 
    } 
    if (left && !right && !up && !down) 
    { 
     GetComponent<Animator>().Play("go_left", 0); 
    } 
    if (up && !down && !left && !right) 
    { 
     GetComponent<Animator>().Play("go_up", 0); 
    } 
    if (down && !up && !left && !right) 
    { 
     GetComponent<Animator>().Play("go_down", 0); 
    } 
} 

沒有更多的竊聽動畫。

+0

您可以使用else if來簡化該操作,並在其之前的if語句中刪除隨後測試的值。 – Alox