Четверг, 18 Апреля 2024, 20:51

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Странное поведение коллайдеров (Странное поведение коллайдеров)
Странное поведение коллайдеров
BorsheCДата: Четверг, 28 Июня 2018, 18:26 | Сообщение # 1
был не раз
Сейчас нет на сайте
Доброго времени суток! Проблема с коллайдерами, постараюсь объяснить максимально подробно и ясно.

Имеется 5 панелей с EdgeCollider2D (выполнен в виде линии, не спрашивайте зачем просто так надо :) ) (Panel_1, Panel_2, Panel_3, Panel_4, Panel_5) и 3 кубика с BoxCollider2D (Cub_1, Cub_2, Cub_3).
На панелях включен триггер а на кубиках повешен ригибоди и триггер отключен.
По задумке при перетаскивании Cub_1 на Panel_1 или Panel_2 или Panel_3 или Panel_4 или Panel_5 (при пересечении их коллайдеров) кубик должен получить позицию панели и встать на нее (аналогично с кубиком 2 ,3, 4, 5).

Но по факту получается что на панель 1 и 2 встают нормально, а при пересечении кубиков с панелями 3, 4, 5 они улетают сразу на 5ю панель.

Прикрепляю код:
Код

        GameObject Panel_1;
    GameObject Panel_2;
    GameObject Panel_3;
    GameObject Panel_4;
    GameObject Panel_5;
    
    int pos_col = 0; // с каким коллайдером пересечение колайдера
    
// Use this for initialization
    void Start () {

  Panel_1 = GameObject.Find ("Panel_1");
  Panel_2 = GameObject.Find ("Panel_2");    
  Panel_3 = GameObject.Find ("Panel_3");    
  Panel_4 = GameObject.Find ("Panel_4");    
  Panel_5 = GameObject.Find ("Panel_5");    

    }

    void OnTriggerEnter2D(Collider2D col) {
  
  if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_1.GetComponent<Collider2D> ().bounds) ) {
   transform.rotation = Quaternion.Euler (0, 0, -45f);
   pos_col = 1;
  }
  if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_2.GetComponent<Collider2D> ().bounds) ) {
   transform.rotation = Quaternion.Euler (0, 0, 45f);
   pos_col = 2;
  }
  if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_3.GetComponent<Collider2D> ().bounds) ) {
   transform.rotation = Quaternion.Euler (0, 0, -45f);
   pos_col = 3;
  }
  if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_4.GetComponent<Collider2D> ().bounds) ) {
   transform.rotation = Quaternion.Euler (0, 0, 0);
   pos_col = 4;
  }
  if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_5.GetComponent<Collider2D> ().bounds) ) {
   transform.rotation = Quaternion.Euler (0, 0, 45f);
   pos_col = 5;
  }
    }

    void Update(){
  if ((Input.GetMouseButtonUp (0)) && pos_col == 1) {
   gameObject.transform.position = Panel_1.transform.position;
  }
  if ((Input.GetMouseButtonUp (0)) && pos_col == 2) {
   gameObject.transform.position = Panel_2.transform.position;
  }
  if ((Input.GetMouseButtonUp (0)) && pos_col == 3) {
   gameObject.transform.position = Panel_3.transform.position;
  }
  if ((Input.GetMouseButtonUp (0)) && pos_col == 4) {
   gameObject.transform.position = Panel_4.transform.position;
  }
  if ((Input.GetMouseButtonUp (0)) && pos_col == 5) {
   gameObject.transform.position = Panel_5.transform.position;
  }
  Debug.Log (pos_col);
    }

    void OnMouseDrag() {
  gameObject.transform.SetAsLastSibling ();// не помню что за хня, но она нужна.
  Vector2 p = Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
  gameObject.transform.position = p;
    }


Еще делал на OnMouseUp (без OnTriggerEnter2D) и поведение кубиков точно такое же.


Сообщение отредактировал BorsheC - Четверг, 28 Июня 2018, 18:29
FrozenSkeletonДата: Суббота, 30 Июня 2018, 19:35 | Сообщение # 2
был не раз
Сейчас нет на сайте
Как не странно, на дефолтной сцене все работает согласно условию, возможно что то не так в сцене: названия, колайдеры не там где надо и тд, но способ конечно извращенский.

Сообщение отредактировал FrozenSkeleton - Суббота, 30 Июня 2018, 21:24
drcrackДата: Суббота, 30 Июня 2018, 20:23 | Сообщение # 3
старожил
Сейчас нет на сайте
Я бы удивился если бы с таким кодом оно еще и работало как задумано
BorsheCДата: Вторник, 03 Июля 2018, 18:28 | Сообщение # 4
был не раз
Сейчас нет на сайте
Цитата drcrack ()
Я бы удивился если бы с таким кодом оно еще и работало как задумано


А с каким лучше?)

Добавлено (03 Июля 2018, 18:28)
---------------------------------------------

Цитата FrozenSkeleton ()

Как не странно, на дефолтной сцене все работает согласно условию, возможно что то не так в сцене: названия, колайдеры не там где надо и тд, но способ конечно извращенский.


Подскажите как не по извращенски? может с вашим кодом у меня нормально будет работать. Я тоже делал в дефолтной сцене и все равно улетают на 5ю(
orkonsДата: Вторник, 03 Июля 2018, 21:40 | Сообщение # 5
частый гость
Сейчас нет на сайте
Может лучше это делать стандартными методами UI? То есть всякие Grid Layout Group, ячейки и т.п.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Странное поведение коллайдеров (Странное поведение коллайдеров)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг