2016-10-26 18 views
1

最初にすべて私の質問を読んでくれてありがとう 地下鉄のような常時稼働しているゲームのために私はupdate()機能を開始しましたpayerControlスクリプトpyは剛体を前進させるコードでmintiondとして10のスピードでキーボード上のupArrowを押すとジャンプ入力が追加されましたが、ここでの問題は時々ジャンプし、ジャンプブール値が真になるためにほとんどの時間ジャンプしません1秒未満で偽に戻ると、ジャンププロセスを2秒間続けるような方法がありますか?ユニティ5文字飛び越し

キャラクタ制御コード:

using UnityEngine; 
using System.Collections; 

public class player : MonoBehaviour { 

    public Animator anim; 
    public Rigidbody rbody; 
    public float verticalJumpPower; 
    public float horizantalJumpPower; 
    public float playerVelocity; 


    // Use this for initialization 
    void Start() 
    { 
     anim = GetComponent<Animator>(); 
     rbody = GetComponent<Rigidbody>(); 
     verticalJumpPower = 50f; 
     horizantalJumpPower = 30f; 
     playerVelocity = 10f; 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     rbody.velocity = new Vector3(rbody.velocity.x,rbody.velocity.y,playerVelocity*Time.deltaTime); 
     rbody.transform.rotation = Quaternion.identity; 

     if(Input.GetKeyDown (KeyCode.UpArrow)) 
     { 
      anim.SetBool("jump",true); 
      rbody.AddForce(new Vector3(0,verticalJumpPower,horizantalJumpPower)); 


     } 
     else 
     { 
      anim.SetBool("jump", false); 
     } 

     if(Input.GetKey(KeyCode.LeftArrow)) 
     { 
      Vector3 currentPosition = rbody.transform.position; 

       Vector3 leftPosition = new Vector3(rbody.transform.position.x+Constants.PLAYER_LEFT_DISTANCE, rbody.transform.position.y,rbody.transform.position.z); 

      rbody.transform.position = Vector3.Lerp(currentPosition,leftPosition,Time.deltaTime); 

     } 

     if(Input.GetKey(KeyCode.RightArrow)) 
     { 
      Vector3 currentPosition = rbody.transform.position; 
      Vector3 rightPosition = new Vector3(rbody.transform.position.x+Constants.PLAYER_RIGHT_DISTANCE, rbody.transform.position.y,rbody.transform.position.z); 
      rbody.transform.position = Vector3.Lerp(currentPosition,rightPosition,Time.deltaTime); 

     } 

     if(Input.GetKey(KeyCode.DownArrow)) 
     { 
      anim.SetBool("isSlide",true); 
      rbody.velocity = new Vector3(0f, 0f,5f); 
      anim.applyRootMotion = false; 
     } 
     else 
     { 
      anim.SetBool("isSlide", false); 
      anim.applyRootMotion = true; 
     } 
    } 

    } 
+0

おそらく必要なものキャラクタが接地されたときを検出し、 'anim.SetBool(" jump "、false)'のみを設定するロジックです。このチェックを実行する方法にはたくさんのアイデアがあります。検索したり、実装したり、新しいコードでこの質問を更新するのに問題がある場合(または新しい質問が大幅に異なる場合は質問してください)などです。現時点では、この質問はあまりにも広すぎます。基本的には、あなたのゲームオブジェクトがどのように設定されているかを推測し、ロジックをゼロから書く必要があるからです。 – Serlite

+0

また、ジャンプアニメーションとは何ですか?それは、キャラクターが空中にいる限り、またはキャラクターが最初のジャンプを実行している間だけ再生すべきものですか?それはまた、これが必要とする解決策に影響を与えます。 – Serlite

答えて

1

GetKeyDown()のみ初期キー押下のフレームにtrueを返します。今、私が起こることを期待するものは以下です:それはジャンプアニメーションをトリガし、力を加えるのkeydownの 一つの最初のフレーム、次のフレームは、このライン

rbody.velocity = new Vector3(rbody.velocity.x,rbody.velocity.y,playerVelocity*Time.deltaTime); 

は、z速度をリセットし、我々は他の条件

を打ちます
else 
    { 
     anim.SetBool("jump", false); 
    } 

アニメーションをオフにします。ジャンプアニメーションを2秒間実行させ、後でベロシティをリセットするイベントを発生させることができます。または、すぐにエフェクトを実行する代わりに、キーを押してオブジェクトの状態を変更します(おそらく、フラグをクリアして速度とアニメーションの状態をリセットする必要があるゲーム時間を保存します)。

関連する問題