Добрый вечер господа. Дорабатываю инвентарь и возникли проблемы. При удалении панельки (слота в инвентаре) он пускает луч в слот ниже, а тот в следующий слот и так пока слоты не закончатся, все слоты, на которых подействовала эта магия смещаются вверх на величину удаленного слота. Так вот возникла проблема с пулянием рейкаста. Не пойму откуда стрелять то? Код с пояснением:
Код
public void InventorySort () { rtransform = gameObject.GetComponent<RectTransform> (); // пробую взять ректрансформ (ведь он аналог трансформа для UI) int layerMask = 1 << 5; RaycastHit2D hit = Physics2D.Raycast (rtransform.anchoredPosition, -Vector2.up, 50, layerMask); //Пытаюсь стрелять из ректпозиции вниз на 50 едениц (хотя до следующего слота меньше 30) if (hit.collider != null) { //тут уже не важно Debug.Log (hit.collider.name); } else return; }
Собстна не пойму откуда стрелять то? Стреляю из transform.position так луча нет нигде, из anchoredPosition тоже не видать. Может есть какая-то мудрость или я чего-то не понимаю? П.С : Коллайдеры на слотах висят в режиме триггера, коллайдеры 2д, луч 2д.
Добавлено (05 Марта 2018, 00:27) --------------------------------------------- Господа, я тут подумал что мне могут ответить. Ну придет умный дядя и скажет : "Убирай 50, ставь Mathf.Infinity, всё равно столкнется. Тогда и трансформ позишон сработает", проверил и работает! Всем спасибо! П.С : Извините за шизофрению, наверно неудобно получилось П.С2 : Админы, за такой балаган готов ответить по всей строгости, но может быть это пригодится новичкам или странникам с измученными мозгами
Сообщение отредактировал SrJeonny - Понедельник, 05 Марта 2018, 00:23
--------------------------------------------- Господа, я тут подумал что мне могут ответить. Ну придет умный дядя и скажет : "Убирай 50, ставь Mathf.Infinity, всё равно столкнется. Тогда и трансформ позишон сработает", проверил и работает! Всем спасибо! П.С : Извините за шизофрению, наверно неудобно получилось П.С2 : Админы, за такой балаган готов ответить по всей строгости, но может быть это пригодится новичкам или странникам с измученными мозгами
Это не шиза, а разговор с утенком. Он тебе часто будет помогать
Оффтоп или не оффтоп, вообщем если кто-то сюда зайдет, то наверно не зря, дабы не плодить темы хочу задать вопрос, тесно связанный с изначальной темой. Стрельнул в слот, он переместил его на место того, из которого был луч ( и который удалился сразу после луча), а как запустить цепную реакцию на остальные слоты? Код :
Код
public void InventorySort () { int layerMask = 1 << 5; gameObject.GetComponent<BoxCollider2D> ().enabled = false; RaycastHit2D hit = Physics2D.Raycast (transform.position, -Vector2.up, 40f, layerMask); if (hit.collider != null) { Sort (hit); } else { gameObject.GetComponent<BoxCollider2D> ().enabled = true; return; } }
Стрельнул в слот, он переместил его на место того, из которого был луч ( и который удалился сразу после луча), а как запустить цепную реакцию на остальные слоты?
рекурсивно повторяешь тоже самое с другими слотами. не?
А почему нельзя использовать какой-нибудь список или массив с панельками инвентаря и по нему уже шагать, удалять, перемещать? Не понадобятся никакие рекурсии оО, рейкасты Оо, и производительность будет повыше. «Смерти меньше всего боятся те люди, чья жизнь имеет наибольшую ценность.» Иммануил Кант
А почему нельзя использовать какой-нибудь список или массив с панельками инвентаря и по нему уже шагать, удалять, перемещать? Не понадобятся никакие рекурсии оО, рейкасты Оо, и производительность будет повыше.
По хорошему даже массив не нужен, там есть встроенные сетки, которые позволяют разместить объекты друг под другом в реалтайме