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

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

EvGame Pro Знаток (440), на голосовании 1 год назад
Начал изучать 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) 1 год назад
Данный код отвечает за определение того, находится ли персонаж на земле, чтобы позволить ему прыгать только когда он находится на твердой поверхности.

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Знаток (440) 1 год назад
Долго искал в интернете и ничего годного не нашел. Прочитав твой ответ сразу все встало на свои места. Вы не только хорошо разбираетесь в данном ремесле, но и еще очень не плохо умеете объяснять. Благодарю за помощь.
Ин П п п Ahmadullin Знаток (251) EvGame Pro, да ,конечно обращайтесь,если будут ещё вопросы пишите,постараюсь ответить!
Похожие вопросы