2016-11-08 3 views
0

Ich machte ein Skript zum Verschieben des Zeichens und Einstellung der Animation. Wenn der Spieler nach rechts gehen möchte, wird die Animation in die mit dem Charakter auf der rechten Seite und dem Gehen eingestellt. Alles funktioniert perfekt, bis Sie sich in zwei Richtungen auf einmal bewegen wollen, sagen wir oben und links. Der Charakter geht durch die zwei Kräfte, aber die Animation wird verrückt. Ich habe Quickfix dafür gemacht, indem ich nicht links oder rechts spielen lasse, wenn irgendeine andere Animation spielt. Ich dachte über so etwas nach: Wenn Sie richtig gehen, sind Sie auf der rechten Seite. Immer noch, dann drückst du den Knopf hoch, du gehst in die Nordostseite, aber du hast immer noch nach rechts. Sie stehen also vor der Seite, auf der Sie zuerst gehen wollten, in diesem Beispiel richtig.Charakter Bewegung, Spieler Animation ändern

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); 
     } 
    } 
} 

Antwort

1

Ok ich habe das.

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); 
    } 
} 

und

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); 
    } 
} 

nicht mehr abhör Animationen.

+0

Sie könnten das vereinfachen, indem Sie else if verwenden und den nachfolgend getesteten Wert in seiner vorherigen if-Anweisung entfernen. – Alox