2017-06-16 17 views
0

Sup?私はデフォルトの私の選手キャラクターのための1つのアイドル状態を持っています。しかし、私はセカンダリアイドルをしたい。私はCキーを押すと、その2番目のアイドルアニメーションに移動し、そこにとどまります。 xキーを押すと、デフォルトのアイドルアニメーションに戻ります。しかし、これが問題の始まりです。セカンダリアニメーションに再び切り替えるためにCキーを押すと、すぐに2番目のアイドルアニメーションにジャンプしますが、それ以上のコマンドを待つか待たずにデフォルトのアニメーションに戻ります。私はそれが私がそれを言うところにとどまることを望む。2つのアイドル状態のアニメーション状態の切り替え

さらに、問題が発生してCキーをもう一度押すと、アニメーションが変更されません。しかし、この時点でXキーを押した後、このあとCキーを押すと、再びアニメーションの間を前後に動きます。だから私はそれが本当にしていないときに切り替わっていると思うと思う。この問題を解決するために何をすべきか教えていただけたら、私はあなたの親友になるでしょう。ありがとう。

using UnityEngine; 
using System.Collections; 


public class Player : MonoBehaviour 
{ 

private Animator anim; 
Rigidbody2D rb; 
public float Speed; 
private bool aim = false; 
private bool shot = false; 
private bool idle = true; 
public Transform arrowSpawn; 
public GameObject arrowPrefab; 
private bool idle2 = false; 


void Start() 
{ 

    rb = GetComponent<Rigidbody2D>(); 
    anim = GetComponent<Animator>(); 

} 

// Update is called once per frame 
void Update() 
{ 
    Movement(); 
    Inputer(); 
    Morph(); 

} 

void Movement() 
{ 
    float moveH = Input.GetAxis("Horizontal"); 

    { 
     rb.velocity = new Vector2 (moveH * Speed, rb.velocity.y); 
    } 

    anim.SetFloat ("Speed", Mathf.Abs (moveH)); 


} 

void Inputer() 
{ 

    if (!aim && Input.GetKeyDown (KeyCode.S)) { 

     aim = true; 
     anim.SetTrigger ("AIm"); 
    } 

    if (aim && Input.GetKeyUp (KeyCode.S)) { 
     shot = true; 
     anim.SetTrigger ("Shot"); 

    } 

    if (shot) { 
     shot = false; 
     aim = false; 
     idle = true; 
     anim.SetTrigger ("Idle"); 
     Instantiate (arrowPrefab, arrowSpawn.position, arrowSpawn.rotation); 

    } 
} 

    void Morph() 
{ 
    idle = !idle2; 

    if (idle && Input.GetKeyDown (KeyCode.C)) { 
     idle2 = true; 
     anim.SetTrigger ("idle2"); 
    } 

    if (!idle && Input.GetKeyDown (KeyCode.X)) { 

     idle = true; 
     anim.SetTrigger ("Idle"); 
     idle2 = false; 

    } 
}   

}

答えて

0

私はわからない - 私は、ロジックをトレースするとき、それはすべての作業に見えますが、...よく、アイドルとIDLE2上の取り扱いは、ビット容疑者です。私が意味する

は、 'X' キーのロジックを見て:アイドルトリガーオフ

  • キックに

    1. ターンアイドル
    2. は、電源を入れて

    をオフIDLE2 ... 'C'キーの場合:

    1. アイドル2をオンにする
    2. idle2トリガーをキックオフします。

    ...アイドルオフはどこですか?次のMorph()関数がその変数を設定するのを待っているようです。さらに悪いことに、idle2がコード内の他の場所でfalseに設定されていると、あなたのMorph()関数はアイドル状態になります。

    私は、彼らはあなたのために働くかどうかを確認するためにこれらのいずれかを試してお勧め:

    void Morph() 
    { 
        if (!idle && !idle2) 
         anim.SetTrigger ("Idle"); 
        idle = !idle2; 
    
        if (idle && Input.GetKeyDown (KeyCode.C)) { 
         idle2 = true; 
         anim.SetTrigger ("idle2"); 
        } 
    
        if (!idle && Input.GetKeyDown (KeyCode.X)) { 
         idle = true; 
         anim.SetTrigger ("Idle"); 
         idle2 = false; 
        } 
    } 
    

    ...か...

    void Morph() 
    { 
        if (idle && Input.GetKeyDown (KeyCode.C)) { 
         idle2 = true; 
         anim.SetTrigger ("idle2"); 
         idle = false; 
         return; 
        } 
        if (!idle && Input.GetKeyDown (KeyCode.X)) { 
         idle = true; 
         anim.SetTrigger ("Idle"); 
         idle2 = false; 
         return; 
        } 
    } 
    
  • +0

    私はちょうどそれらを試してみました。結果はまったく同じです。私は、どこかの問題がアイドル状態であることを知っています。あなたは自分のコードをちょっと整理しました。私はリターンを入れることについて考えなかったので、それに感謝します。しかし、問題は両方のバージョンに残っています。 –

    +0

    OH!ちょうどそれを最高の仲間を見つけた!私は、アイドル1というアニメーターで二次的なトリガーを作りました。それから私はアイドル1を使用して最初のアイドルから2番目のアイドルからリンクし、anim.SetTrigger( "Idle1")コマンドでanim.SetTriggerコマンドに置き換えました。助けてくれてありがとう! –

    関連する問題