2016-05-31 2 views
0

Я работаю над очень маленьким проектом Unity 5.4, у меня есть несколько «гранул», которые в игровом мире имеют двумерный и двумерный многоугольник с жестким корпусом. У меня также есть мяч, который имеет 2D-изображение твердого тела, Polygon Colider, а также физический материал, который позволяет мячу прыгать в другие объекты.Unity 3D 5.4 2D Collisions не работает?

Следующий код прилагается к скрипту на шаре, он что-то сделает, когда он попадет в зеленые гранулы, но ничего не произойдет. Я действительно не хочу, чтобы он покидал приложение, это было просто для целей.

Ниже приведены свойства обоих объектов:

enter image description here

public class BallBounce : MonoBehaviour { 

    // Use this for initialization 
    void Start() { 
     //activate camera because I am lazy 
     var cam = GameObject.Find ("camera"); 
     var ball = GameObject.Find ("ball"); 
     Rigidbody2D rb = GetComponent<Rigidbody2D>(); 
     cam.SetActive (true); 
        } 

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

    void OnCollisionEnter2D(Collision2D col) 
    { 
     if (col.gameObject.tag == "Bricks") { 
      Application.Quit(); 
     } 

    } 
} 
+0

Применение. Quit() не работает в редакторе. Вы должны создать свою игру и запустить ее как автономную, чтобы закрыть приложение. – Matriac

+0

Эй, спасибо. Я изменил его, чтобы попытаться разрушить кирпичи он вступает в контакт с, но и ничего не делает: Обновленный код: –

+0

недействительным OnCollisionEnter2D (Collision2D цв) \t { \t \t если (col.gameObject.tag \t == \t " Кирпичи ") { \t \t \t Уничтожить \t (col.gameObject); \t \t} –

ответ

0

Application.Quit(); не работает в редакторе. Он используется для автономной сборки. Заменить, что с UnityEditor.EditorApplication.isPlaying = false;

Теперь, если вы хотите работать как в редакторе и Standalone Строить:

void Start() 
{ 
    //activate camera because I am lazy 
    var cam = GameObject.Find ("camera"); 
    var ball = GameObject.Find ("ball"); 
    Rigidbody2D rb = GetComponent<Rigidbody2D>(); 
    cam.SetActive (true); 
    Debug.Log("Start Called!"); 
} 

void Update() 
{ 

} 

void OnCollisionEnter2D(Collision2D col) 
{ 
    Debug.Log("Collision detected: "+col.gameObject.name); 
    if (col.gameObject.tag == "Bricks") { 
     #if UNITY_EDITOR 
     UnityEditor.EditorApplication.isPlaying = false; 
     #else 
     Application.Quit(); 
     #endif 
    } 
} 

В следующий раз при тестировании, если что-то истинно или ложно, просто используйте Debug.Log("It works");

+0

чувствуется, что здесь что-то принципиально неправильно. Даже сочинительство на консоль не удается: –

+0

недействительным OnCollisionEnter2D (Collision2D цв) \t { \t \t если (col.gameObject.tag \t == \t "Кирпичи") { \t \t \t debug.log ("Столкновение Обнаружен"); \t \t} \t \t} –

+0

@RaeMichelleRichards Почему бы не поставить debug.log ("Она работает"); в вашей функции «Пуск» и проверьте, не видите ли вы что-нибудь – Programmer

Смежные вопросы