| Странное поведение коллайдеров | 
|  | 
| 
| 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, ячейки и т.п. |  |  |  |  |