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