2017-08-27 60 views
0

之前播放2D动画实际上,我是能够与敌人要做到这一点,但由于某种原因,我不能让它工作,如果它的玩家。翻转在Unity精灵C#

看到,玩家在默认情况下,空闲的动画。当我从相反的方向按下箭头键时(它在游戏开始时默认是右键 - >)时,我希望它在精灵翻转其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

您可以尝试翻转雪碧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; 
}