2016-08-19 7 views
0

私はプレイヤーに少し前に飛び乗るように努力してきましたが、私は立ち往生しています。私は他の答えを見て、それらを試してみましたが、私はそれが私がそれを望んでいた方法で動作させることができませんでした。私はいくつかの異なる方法を試しましたが、彼らのどのような方法でも働いている人はいません。ほとんどの場合、バウンスは同じ距離ではなく、プレーヤーが地面に着陸したときに、プレーヤーが前方にスライドします。これは私が望むものではありません。私はCrossy道路のように私のキャラクタージャンプをしたいです。私が試したことが1つあります:どのようにプレイヤーをジャンプさせることができますか?

using UnityEngine; 
using System.Collections; 

public class MovePlayer : MonoBehaviour 
{ 
    Vector3 endPos; 
    int numBackwards = 0; 
    bool jumping = false; 
    public Rigidbody rigidBody; 
    //public Collider theCollider; 

    void Start() 
    { 
     rigidBody = GetComponent<Rigidbody>(); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     rigidBody.freezeRotation = true; 

     endPos = gameObject.transform.position; 
     if (!jumping) 
     { 
      if (Input.GetButtonDown("up") && gameObject.transform.position == endPos) { 
       if (numBackwards < 0) 
       { 
        numBackwards++; 
       } 
       else 
       { 
        UpdateScore.score++; 
       } 
       transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
       transform.Translate(Vector3.forward * 110 * Time.deltaTime, Space.World); 
      } 
      else if (Input.GetButtonDown("down") && gameObject.transform.position == endPos) 
      { 
       transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
       transform.Translate(-Vector3.forward * 110 * Time.deltaTime, Space.World); 
       numBackwards--; 
      } 
      else if (Input.GetButtonDown("left") && gameObject.transform.position == endPos) 
      { 
       transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
       transform.Translate(Vector3.left * 110 * Time.deltaTime, Space.World); 
      } 
      else if (Input.GetButtonDown("right") && gameObject.transform.position == endPos) 
      { 
       transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
       transform.Translate(Vector3.right * 110 * Time.deltaTime, Space.World); 
      } 
     } 
    } 

    void OnCollisionEnter(Collision other) 
    { 
     if (other.gameObject.CompareTag("Ground")) 
      jumping = false; 
    } 

    void OnCollisionExit(Collision other) 
    { 
     if (other.gameObject.CompareTag("Ground")) 
      jumping = true; 
    } 
} 

ほとんどのジャンプが異なるサイズであり、一貫性が必要なので、これは機能しませんでした。私が試したもう1つのことは次のとおりです。

public float distance;  
public float fspeed; 
public float uspeed; 

//PRIVATE 
private Rigidbody rigidBody; 


void Awake() 
{ 
    rigidBody = GetComponent<Rigidbody>(); 
    rigidBody.freezeRotation = true; 
} 

void FixedUpdate() 
{ 
    if (Physics.Raycast(transform.position, -Vector3.up, distance + 0.1F)) 
    { 
     if (Input.GetKeyDown(KeyCode.UpArrow)) 
     { 
      rigidBody.AddForce(new Vector3(0, uspeed, fspeed)); 
     } 

     if (Input.GetKeyDown(KeyCode.DownArrow)) 
     { 
      rigidBody.AddForce(new Vector3(0, uspeed, -fspeed)); 
     } 

     if (Input.GetKeyDown(KeyCode.LeftArrow)) 
     { 
      rigidBody.AddForce(new Vector3(fspeed, uspeed, 0)); 
     } 

     if (Input.GetKeyDown(KeyCode.RightArrow)) 
     { 
      rigidBody.AddForce(new Vector3(-fspeed, uspeed, 0)); 
     } 
    } 
} 

これはうまくいかず、プレーヤーが着陸したときに前方にスライドしました。私が最後に試したことは、ジャンプとアイドルのあるアニメーションを使用していましたが、なぜそれが動作していなかったのか分からないのですが、それも動作していませんでした。私が知りたいのは、スライドすることなく毎回同じ距離を飛ばすことができない、または私が望むように私の以前のやり方を修正できることです。

答えて

2

ForceModeを使用してください。 Impulseはジャンプキャラクターに最適です。質量を使用するように現実的に見えます。そしてそれは連続的ではありません。さらに効果を出すには低い値が必要です。空の原因Forceが連続的であるForceModeとしてデフォルトに力モードパラメータ終了

if (Input.GetKey(KeyCode.UpArrow)) 
{ 
    rigidBody.AddForce(new Vector3(0, uspeed, fspeed), ForceMode.Impulse); 
} 

。慣性以上のすべりが起こる原因は何か。

地面に触れたときに慣性滑り無効速度を無視するため。

void OnCollisionEnter(Collision other) 
{ 
    if (other.gameObject.tag == "Ground") 
    { 
     jumping = false; 

     rigidBody.velocity = Vector3.zero; 
    }   
} 

入力が既に飛び越すことを控える前に確認してください。!jumping

+0

私はこれがうまく動作しないように見えますが、なぜこれが動作しなくなるのか知っていますか? –

+0

何が起こっているのですか? –

+0

ちょうど動いていません –

関連する問題