Страница 1 из 1

Изящно решить проблему с коллайдерами

СообщениеДобавлено: 16 фев 2017, 03:07
TonyMax
Преамбула:
У меня есть домики. Домики я эти размещаю по клеточкам. Это происходит посредством смещения домика по X и Z на определенное число. В моем случае это число 5. Чтобы домики нельзя было строить друг на друге я использую BoxCollider'ы. Собственно, если коллайдеры домика ни соприкасаются с другими коллайдерами домиков, то строить можно.

Проблема:
BoxCollider'ы соприкасаются друг с другом там, где не должны по логике игры. Как именно они соприкасаются проиллюстрировано на картинке ниже. (h на картинке означает высоту)

Вопрос:
Как можно изящно решить данную проблему, избегая таких методов, как задать коллайдеры не 5, h, 5 (размер), а например, 4.99, h, 4.99?
Изображение

Re: Изящно решить проблему с колладйреами

СообщениеДобавлено: 16 фев 2017, 09:03
bojlahg
Если размещаешь по клеточкам то вообще коллайдеры не нужны, заведи 2d массив или список - карту по которой можно будет определить занята ли ячейка.

Re: Изящно решить проблему с колладйреами

СообщениеДобавлено: 16 фев 2017, 14:32
TonyMax
bojlahg писал(а):Если размещаешь по клеточкам то вообще коллайдеры не нужны, заведи 2d массив или список - карту по которой можно будет определить занята ли ячейка.

Я также этими коллайдерами делаю детект подвижных или объектов окружения (декоративного). Так что совсем я их не уберу.

Re: Изящно решить проблему с коллайдерами

СообщениеДобавлено: 16 фев 2017, 15:08
Tolking
не хочешь убирать, а так можно убрать...

Re: Изящно решить проблему с коллайдерами

СообщениеДобавлено: 16 фев 2017, 17:43
Zaicheg

Re: Изящно решить проблему с коллайдерами

СообщениеДобавлено: 16 фев 2017, 18:54
TonyMax
Zaicheg писал(а):https://docs.unity3d.com/ScriptReference/Physics.IgnoreCollision.html

Physics.IgnoreCollisions(Collider, Collider) игнорирует всё взаимодействия между коллайдерами. Мне этого не нужно. Прочитайте внимательнее описание проблемы. И да, я умею читать документацию

Re: Изящно решить проблему с коллайдерами

СообщениеДобавлено: 16 фев 2017, 19:14
seaman
Сделать коллайдеры чуть меньше, а при установке домика выравнивать позицию по сетке

Re: Изящно решить проблему с коллайдерами

СообщениеДобавлено: 16 фев 2017, 19:28
Zaicheg
TonyMax писал(а):
Zaicheg писал(а):https://docs.unity3d.com/ScriptReference/Physics.IgnoreCollision.html

Physics.IgnoreCollisions(Collider, Collider) игнорирует всё взаимодействия между коллайдерами. Мне этого не нужно. Прочитайте внимательнее описание проблемы. И да, я умею читать документацию

Из описания проблемы следует, что вы определяете взаимопересечения домиков через коллайдеры. И хотите, чтобы некоторые коллайдеры не фиксировали пересечения с некоторыми коллайдерами. Устранять пересечения как таковые (что достигается изменением размеров и позиций коллайдеров) вы не хотите. Задача, которая получилась из вашего описания, решается указанным выше методом, судя по его описанию.

Re: Изящно решить проблему с коллайдерами

СообщениеДобавлено: 18 фев 2017, 19:07
TonyMax
seaman писал(а):Сделать коллайдеры чуть меньше, а при установке домика выравнивать позицию по сетке

На данный момент так и решил проблему :)

Re: Изящно решить проблему с коллайдерами

СообщениеДобавлено: 18 фев 2017, 19:08
TonyMax
Zaicheg писал(а):
TonyMax писал(а):
Zaicheg писал(а):https://docs.unity3d.com/ScriptReference/Physics.IgnoreCollision.html

Physics.IgnoreCollisions(Collider, Collider) игнорирует всё взаимодействия между коллайдерами. Мне этого не нужно. Прочитайте внимательнее описание проблемы. И да, я умею читать документацию

Из описания проблемы следует, что вы определяете взаимопересечения домиков через коллайдеры. И хотите, чтобы некоторые коллайдеры не фиксировали пересечения с некоторыми коллайдерами. Устранять пересечения как таковые (что достигается изменением размеров и позиций коллайдеров) вы не хотите. Задача, которая получилась из вашего описания, решается указанным выше методом, судя по его описанию.

Вы неправильно поняли описание проблемы, возможно, потому что я дал не исчерпывающее объяснение