2017-01-25 8 views
1

Я использую триггерный коллайдер (circleCollider2D с проверенным триггером), но это только чувствительные коллизии с определенными объектами.Почему в Unity5 мой триггерколлидер2D вызывает только столкновения с определенными объектами, а не с другими?

вот сценарий на курке:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 

public class Scoring : MonoBehaviour { 

public updateScore updateScore; 
Transform earth; 
// Use this for initialization 
void Start() { 
    earth = GetComponent<Transform>(); 
} 
void OnTriggerExit2D(Collider2D other) 
{ 
    Debug.Log("other collider " + other); 
    updateScore.score++;  
} 
} 

это восприятия этого объекта:

это 2D объект метеор, который имеет rigidbody2D и circleCollider2D на нем. имеет этот сценарий прилагается:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class CometMovement : MonoBehaviour { 

public float speed = 0.5f; 
Rigidbody2D rb; 
Vector2 direction; 

// Use this for initialization 
void Start() { 
    direction = new Vector2(Random.Range(10.0f, -10.0f), Random.Range(10.0f, -10.0f)); 
    rb = GetComponent<Rigidbody2D>(); 
    rb.AddForce(direction * speed); 

} 


} 

Но это не ощущает это ниже объекта. Мне нужно это, чтобы почувствовать этот объект ниже:

Это объект земли с жестким корпусом2d и CircleCollider2D, в значительной степени похожий на объект метеора. имеет этот сценарий прилагается:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.SceneManagement; 

public class EarthController : MonoBehaviour { 

public float force = 0.5f; 
Rigidbody2D rb; 
Vector2 direction; 
Transform transform; 

// Use this for initialization 
void Start() { 
    direction = new Vector2(0, 4); 
    transform = GetComponent<Transform>(); 
    rb = GetComponent<Rigidbody2D>(); 
    rb.isKinematic = false; 
} 

// void OnCollisionEnter2D(Collision2D coll) { 
//  SceneManager.LoadScene("Level 01"); 
// 
// } 

// Update is called once per frame 
void Update() { 

    if(Input.GetButton("Fire1")){ 
     rb.isKinematic = false; 
     if(transform.position.x <= 0 && transform.position.y <= 4){ 
      direction = new Vector2(0, -4); 
     } else { 
      direction = new Vector2(0, 4); 
     } 

     rb.AddForce(direction * force); 
     Debug.Log("going this fast: " + rb.inertia); 
    } else { 
     rb.isKinematic = true; 
     rb.velocity = Vector2.zero; 
    } 
} 
} 

ответ

3

Согласно documentation:

Если isKinematic включена, силы, столкновения или суставы не влияют на Rigidbody больше

if(Input.GetButton("Fire1")){ 
    rb.isKinematic = false; 
    // ... 
} else { 
    rb.isKinematic = true; 
} 

Кроме того, проверьте свой Physics parameters?

Убедитесь, что оба ваших коллайдера не являются триггерами. Не уверен в этом.

+0

Эй, спасибо за вашу помощь. Я понял. У меня был DistanceJoint2D также на объекте earth, у которого был флажок «enable collision», который был снят. Я проверил коробку, и теперь она отлично работает –