Как правильно осуществить проверку наличия земли под персонажем в Unity,

чтобы не делать куча исключений и других проблем? Хотел бы научиться правильному написанию кода, чтобы не создавать говнокод. Буду благодарен за помощь и советы по этому вопросу.

private void CheckGround()
{
Collider2D[] collider = Physics2D.OverlapCircleAll(transform.position, isGroundSize);
isGrounded = collider.Length > 1;
if (!isGrounded) State = States.jump;
}

14 ответов

22 просмотра

Как выходит красное форматирование? Оно само так форматируется?

Никита-Батурин Автор вопроса
Utepkaliev Alemkhan
Как выходит красное форматирование? Оно само так ф...

. Не понял вопроса? Я знаю что мой вопрос, слишком сложный, и звучит как, Научите меня программировать правильно, и такое надо с репетиторами или менторами проходить, но а я говнюк, пытаюсь такой большой вопрос задать там, где этого не следует.😅

Никита-Батурин Автор вопроса
Utepkaliev Alemkhan
Я про вот это походу)

Он у меня не красный, это три обратных ковычки где русская Ё ставишь три в начале и три в конце

Способ не самый оптимизированный, лучше пускать рейкаст вниз и смотреть есть ли там обьект с типом Ground - так ты избежишь проверок на строки, для начало только создай этот скрипт и набрось на всё что является Ground private void CheckGround() { Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, isGroundSize); // собираешь данные по коллайдерам foreach(var collider in colliders) // перебераешь данные { if(collider.gameObject.TryGetComponent(out Ground ground)) // находишь коллайдер с компонентом Ground { isGrounded = true; break; // выходишь из цикла } else { isGrounded = false; } } if (!isGrounded) State = States.jump; }

https://pastebin.com/RaAm7AiQ - Не самый оптимизированный, лучше использовать рейкаст, но что касаемо твоего случая то вот вариант

Utepkaliev Alemkhan
https://pastebin.com/RaAm7AiQ - Не самый оптимизир...

Только нужно будет создать скрипт Ground и повесить на все Ground Обьекты

монобех синглтонович Штарк
И чем твой вариант отличается от исходного?

Тем что он проверяет любое вхождение в список коллайдеров

Никита-Батурин Автор вопроса
Utepkaliev Alemkhan
Только нужно будет создать скрипт Ground и повесит...

Ну это то что я сделал сам бы, я просто хотел понять, говнокод у меня или нет. Хотя даже не так, я уверен что у меня говонокод, так как я впервые работаю над проектом, хоть и своим. и то что ты мне скинул, такой же код и такие же решения, которые я бы использовал, но все равно спасибо

Никита Батурин
Ну это то что я сделал сам бы, я просто хотел поня...

Твой вариант же проверяет что любой коллайдер зайдет и для тебя это будет причиной что ты на земле) Даже если перед тобой будет стоять коробка или стена но под тобой не будет земли

Никита-Батурин Автор вопроса
Utepkaliev Alemkhan
Твой вариант же проверяет что любой коллайдер зайд...

да я знаю, и я бы создал бы точно такую же проверку. Повторюсь. я хотел понять как писать лучше, чем я сейчас, ай ладно проехали.

Никита Батурин
Ну это то что я сделал сам бы, я просто хотел поня...

Сделай новый физический слой с землёй и пускай потом рейкасты для проверки на этом слое

Похожие вопросы

Обсуждают сегодня

Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
привет, а расскажите как бэкапите свой vault raft cluster CE? я немного почитал и понял, что нужно как-то выполнять vault operator raft snapshot save backup.snapshot подсовыва...
[DBST] Dmitry Knyazev
5
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Всем привет! Напишите пожалуйста, кто мог бы оффлайн преподавать некоторые курсы по Odoo в Алматы в одном из ВУЗов? Мы сейчас вместе с Odoo запускаем университетскую программу...
Adil Dauletkhan
2
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Каким то образом можно определить ширину экрана пользователя перед загрузкой partial-а? Надо рассчитать ширину кадров слайдера для ресайза картинок для container-fluid.
Point 111
22
Добрый день, подскажите как правильно сделать filter в backend-e. Есть модель (товар) у который связь belongsToMany (компания), компаний > 4k, поэтому выборку типа ->all(); н...
Max Dubovsky
7
А как заставить поиск искать? Есть такая формочка <select class="form-control custom-select" name="brand_id" data-handler="onGetBrands"></select>
Денис Александрович
5
Карта сайта