2016-03-28 13 views
0

私はまだユニティを学んでおり、今は自分のプレイヤーをジャンプできるようにしようとしています。もちろん私はプレイヤーが永遠に飛び越えることを望んでいないので、私の考えは、プレイヤーがフロアオブジェクトに接触しているときにのみジャンプを可能にすることでした。これは私がこれまで持っているコードです:プレイヤーと地面の衝突を検出するUnity3D

public class PlayerController : NetworkBehaviour 
{ 

    public float speed;    // Player movement speed 
    private bool grounded = true; // Contact with floor 

    private Rigidbody rb; 

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

    // Show a different color for local player to recognise its character 
    public override void OnStartLocalPlayer() 
    { 
     GetComponent<MeshRenderer>().material.color = Color.red; 
    } 

    // Detect collision with floor 
    void OnCollisionEnter(Collision hit) 
    { 
     if (hit.gameObject.tag == "Ground") 
     { 
      grounded = true; 
     } 
    } 

    // Detect collision exit with floor 
    void OnCollisionExit(Collision hit) 
    { 
     if (hit.gameObject.tag == "Ground") 
     { 
      grounded = false; 
     } 
    } 

    void FixedUpdate() 
    { 
     // Make sure only local player can control the character 
     if (!isLocalPlayer) 
      return; 

     float moveHorizontal = Input.GetAxis("Horizontal"); 
     float moveVertical = Input.GetAxis("Vertical"); 

     Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); 

     rb.AddForce(movement * speed); 

     // Detect space key press and allow jump if collision with ground is true 
     if (Input.GetKey("space") && grounded == true) 
     { 
      rb.AddForce(new Vector3(0, 1.0f, 0), ForceMode.Impulse); 
     } 
    } 
} 

しかし、OnCollisionEnterOnCollisionExitが引き金と決してそうです。だから、プレイヤーはいつでも彼が望むときにジャンプすることができます。私は何か間違っているのですか?

編集:OnCollisionEnterOnCollisionExitが完全に正常にトリガーされたようです。 if文がfalseを返すだけです。なぜ私は考えていない。

if (GameObject.Find("Ground") != null)がtrueを返しました。

編集2:これらの戻りUntaggedの両方不思議なこと:

Debug.Log(hit.gameObject.tag); 
Debug.Log(hit.collider.tag); 

答えて

1

私たちのより多くの情報

  1. を与えてください、あなたが使用している統一のバージョンを教えてください?
  2. プロジェクトを最新のユニティバージョンに更新しましたか?
  3. また、「タグ」配列のスクリーンショットを提供します。
+0

私はオブジェクト名とオブジェクトタグを混同していました。地上のオブジェクトには本当にタグがありませんでした。私はそのタグを追加して、すべてが完璧に機能しました!私は自分でそれに答えるつもりでしたが、私はあなたの代わりに受け入れます:) – icecub

+0

ありがとうございました。あなたのプロジェクトで最高のもの –