2016-03-28 33 views
0

Halen birliği öğreniyorum ve şu anda oyuncularımı zıplayabiliyorum. Tabii ki oyuncumun sonsuza kadar zıplayabileceğini istemiyorum, bu yüzden benim fikrim sadece oyuncu bir zemin nesnesiyle temas halindeyken atlama yapabilmekti. Bu var bugüne kadar kodudur:Oynatıcı ile toprak arasındaki çarpışmayı tespit edin 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); 
     } 
    } 
} 

Ama OnCollisionEnter ve OnCollisionExit tetikler asla görünüyor. Böylece oyuncu istediği zaman hala atlayabilir. Yanlış bir şey mi yapıyorum?

Düzenleme: OnCollisionEnter görünüyor ve OnCollisionExit mükemmel şekilde tetikleniyor. Sadece yanlış ifadeler geri dönüyorsa. Neden olduğu hakkında hiçbir fikrim yok.

if (GameObject.Find("Ground") != null) doğru döndü.

Düzenleme 2: Bunlardan ikisi dönmek Garip Untagged:

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

cevap

1

bize kullandığınız birlik sürümü

  1. söyle daha bilgi verin?
  2. Projeyi bir başka son sürümüne güncellediniz mi?
  3. Ayrıca 'etiket' dizininizin ekran görüntüsünü de verin.
+0

Nesnenin adını nesneler etiketi ile karıştırıyordum. Yer nesnesi gerçekten hiç etiketi yoktu. Bu etiketi ekledim ve her şey mükemmel çalıştı! Kendime cevap vermek üzereydim, ama seninkini kabul edeceğim :) – icecub

+0

Teşekkürler. Projenizle en iyisi –

İlgili konular