Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Unity. "Unity в Действии", автор - Джозеф Хокинг. Непонятки с кодом на распознавание поверхности под персонажем.

EvGame Pro Знаток (414), на голосовании 9 месяцев назад
Начал изучать Unity, по книге "Unity в Действии", автор - Джозеф Хокинг.
Книга хорошая, но частенько автор говорит мол вставьте данный код и вас все заработает, и не разъясняет что к чему. И чтобы разобраться в коде приходится экспериментировать: убирать часть кода автора, добавлять свой код, поиграться со значениями и т.д.

В 6 главе. а если точнее в части: 6.4.3. " Распознавание поверхности ". У меня возник вопрос связанный с кодом для распознавания поверхности в двумерной игре, чтобы игрок не мог прыгать в воздухе. Вот сам код (я оставил только проблемную часть кода, без остального кода):


private BoxCollider2D _box; /* Тут создаем Бокс Коллайдер */
...
_box = GetComponent<BoxCollider2D>(); /* Передаем ему коллайдер игрока */
...

Vector3 max = _box.bounds.max; /* тут я уже особо не понял. Поэтому прошу разъяснить в комментариях */
Vector3 min = _box.bounds.min; /* Тут аналогично не понял */

Vector2 corner1 = new Vector2(max.x, min.y - .1f); /* тут вопрос что это такое: " - .1f ". Почему точка перед значением и вообще за что отвечает это */
Vector2 corner2 = new Vector2(min.x, min.y - .2f); /* тут аналогичный вопрос*/

Collider2D hit = Physics2D.OverlapArea(corner1, corner2);
bool grounded = false;
if (hit != null)
{
grounded = true; /* если по перс на чем то стоит то grounded = true */
}


if (grounded && Input.GetKeyDown( KeyCode.Space )) /* если grounded = true и нажата клавиша пробел то выполняется прыжок*/
{
\\ тут код для прыжка
}


Просьба отвечать БЕЗ НЕГАТИВА. Я еще новичок и еще не особо прошарен. Я понимаю что это может очень глупые вопросы и я долбоящер, но все равно пожалуйста без агрессии.
Голосование за лучший ответ
Ин П п п Ahmadullin Знаток (251) 10 месяцев назад
Данный код отвечает за определение того, находится ли персонаж на земле, чтобы позволить ему прыгать только когда он находится на твердой поверхности.

1. Vector3 max = _box.bounds.max; - присваивает переменной max координату верхней точки коллайдера игрока;
2. Vector3 min = _box.bounds.min; - присваивает переменной min координату нижней точки коллайдера игрока;
3. Vector2 corner1 = new Vector2(max.x, min.y - .1f); - создает вектор corner1 с координатами на max.x (координата наивысшей точки по оси X) и min.y - .1f (координата нижней точки по оси Y, которая сдвинута на -0.1 по оси Y для того, чтобы добавить отступ);
4. Vector2 corner2 = new Vector2(min.x, min.y - .2f); - создает вектор corner2 с координатами на min.x (координата наименьшей точки по оси X) и min.y - .2f (координата нижней точки по оси Y, которая сдвинута на -0.2 по оси Y для увеличения отступа);
5. Collider2D hit = Physics2D.OverlapArea(corner1, corner2); - присваивает переменной hit коллайдер, с которым пересекается область между corner1 и corner2;
6. bool grounded = false; - инициализирует переменную grounded ложным значением, т.к. игрок не стоит на земле;
7. if (hit != null) - проверяет, есть ли коллайдер в переменной hit;
8. grounded = true; - если коллайдер есть, то переменной grounded присваивается значение true, т.е. игрок на земле;
9. if (grounded && Input.GetKeyDown( KeyCode.Space )) - проверяет, находится ли игрок на земле и была ли нажата клавиша "пробел";
10. Если условие выполняется, то выполняется код для прыжка.

Ответ на вопрос:

- ".1f" и ".2f" в коде означают число с плавающей запятой, где f указывает, что число является значением с плавающей запятой. Данное значение добавлено для установки отступа между нижней точкой коллайдера игрока и поверхностью, на которой он находится, чтобы избежать некоторых проблем с физическими движениями, которые могут возникнуть при столкновениях с некоторыми краями или неровностями поверхности.
Попытался расписать все подробно !
EvGame ProЗнаток (414) 10 месяцев назад
Долго искал в интернете и ничего годного не нашел. Прочитав твой ответ сразу все встало на свои места. Вы не только хорошо разбираетесь в данном ремесле, но и еще очень не плохо умеете объяснять. Благодарю за помощь.
Ин П п п Ahmadullin Знаток (251) EvGame Pro, да ,конечно обращайтесь,если будут ещё вопросы пишите,постараюсь ответить!
Похожие вопросы