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