2016-11-08 73 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