2017-08-27 28 views
0

私は実際に敵でこれを行うことができましたが、何らかの理由でそれがプレイヤーであれば動作させることができません。Unityのスプライトを反転する前に2Dアニメーションを再生する#

プレイヤーはデフォルトのアイドルアニメーションになっています。矢印キーを反対方向から押すと(デフォルトはゲームが始まるとき - >)、スプライトがxスケール上で反転する前に回転アニメーションを再生します。

矢印キーを押して回転させたときの動作は、最初はスプライトをすばやく反転してから、まだ反転していないかのようにアニメーションを実行してから、もう一度他の方向。

私のアニメーターでは、アイドルにはフリップノードへの終了時間がなく、フリップノードにはアイドル状態に戻る時間があります。私はここでタイマーを呼び出すことも試みましたが、これまでのところ運はありません。誰でも助けてくれますか?

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 
public class tulMoveMount : MonoBehaviour { 

    private Animator anim; 
    private Rigidbody2D rb; 
    public Image manaBar; 

    public LayerMask whatIsGround; 
    private bool grounded = false; 
    public Transform groundCheck; 
    public float groundCheckRadius; 

    private bool goRight = true; 
    private bool jump; 
    private bool turn = false; 
    private bool idle = true; 
    private bool mountOff; 
    private bool turnComplete = false; 

    public float runSpeed; 
    public float walkSpeed; 
    private float move; 
    public float turnDelay = 2.25f;  
    public float timer3 = 2.26f; 

    void Start() 
    { 
     anim = GetComponent<Animator>(); 
     rb = GetComponent<Rigidbody2D>(); 
    } 

    void Update() 
    { 
     grounded = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); 
     timer -= Time.deltaTime; 
     turnDelay -= Time.deltaTime; 
     HandleMovement(); 

    } 

    void HandleMovement() 
    { 

     float move = Input.GetAxis ("Horizontal"); 
     float moveV = Input.GetAxis ("Vertical"); 

     { 
      rb.velocity = new Vector2 (move * walkSpeed, rb.velocity.y); 

      anim.SetFloat ("walkSpeed", Mathf.Abs (move)); 

     } 

     if (!goRight && move > 0) { 
      FlipConditions(); 
      Invoke ("ResetValues",timer3); 
      Flip(); 
      turnComplete = false; 
     } 
     if (goRight && move < 0) { 
      FlipConditions(); 
      Invoke ("ResetValues",timer3); 
      Flip(); 
     } 
    } 

    void FlipConditions()// 
    { 
     idle = false; 
     turn = true; 
     anim.SetTrigger ("turn"); 
     idle = true; 
     anim.SetTrigger ("idle"); 
    } 

    void Flip() 
    { 
     goRight = !goRight; 
     Vector3 theScale = transform.localScale; 
     theScale.x *= -1; 
     transform.localScale = theScale; 
     turnComplete = false; 
    } 
    void ResetValues() 
    { 
     idle = true; 
     anim.SetTrigger ("idle"); 
    } 
} 

答えて

0

あなたはUpdate()内の任意のアニメーションを実行する実行した後LateUpdate()でスプライトを反転しようとすることができます。そのようなものを試して、アニメーションをUpdateに配置してください。

// store references to components on the gameObject 
Transform _transform; 
Rigidbody2D _rigidbody; 

// hold player motion in this timestep 
float vx; 
float vy; 

float MoveSpeed; 

void Awake() { 

    // get a reference to the components we are going to be changing and store a reference for efficiency purposes 
    transform = GetComponent<Transform>(); 

    rigidbody = GetComponent<Rigidbody2D>(); 

} 

// this is where most of the player controller magic happens each game event loop 
void Update() 
{ 
    // determine horizontal velocity change based on the horizontal input 
    vx = Input.GetAxisRaw ("Horizontal"); 

    // get the current vertical velocity from the rigidbody component 
    vy = rigidbody.velocity.y; 

    // Change the actual velocity on the rigidbody 
    rigidbody.velocity = new Vector2(vx * MoveSpeed, vy); 
} 

// Checking to see if the sprite should be flipped 
// this is done in LateUpdate since the Animator may override the localScale 
// this code will flip the player even if the animator is controlling scale 
void LateUpdate() 
{ 
    // get the current scale 
    Vector3 localScale = transform.localScale; 

    if (vx > 0) // moving right so face right 
    { 
     facingRight = true; 
    } else if (vx < 0) { // moving left so face left 
     facingRight = false; 
    } 

    // check to see if scale x is right for the player 
    // if not, multiple by -1 which is an easy way to flip a sprite 
    if (((facingRight) && (localScale.x<0)) || ((!facingRight) && (localScale.x>0))) { 
     localScale.x *= -1; 
    } 

    // update the scale 
    transform.localScale = localScale; 
} 
関連する問題