Тёмный

Создание скрипта управления персонажем 

Яндекс Игры для Разработчиков
Просмотров 29 тыс.
50% 1

Опубликовано:

 

31 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 129   
@kroshka_vseznayka_tv
@kroshka_vseznayka_tv 9 месяцев назад
Илья, хочу выразить вам огромную благодарность за этот курс 🤗. Все очень понятно и упорядоченно 💪Отдельно хочу Вас поблагодарить, что уделяете внимание разным мелочам, таким как горячие кнопки и настройки инструментов! Для меня, как новичка, это гипер важно))) Вы очень приятный учитель у которого хочется учится дальше! Пока всё получается!)))
@yagamesdev
@yagamesdev 9 месяцев назад
Здравствуйте. Рады, что курс вам понравился. Спасибо за такой позитивный отзыв. Желаем вам успехов и развития ❤️
@imnetzus
@imnetzus Месяц назад
Для тех, у кого не работает метод Clamp, проверьте MathF ли у вас или Mathf, у меня была большая и из-за этого были ошибки. Спасибо за курс!
@yagamesdev
@yagamesdev Месяц назад
Здравствуйте. Спасибо, что делитесь решением с другими разработчиками 🙂
@dmitrygubin5377
@dmitrygubin5377 2 года назад
Если у кого то камера поворачивает вместе с персонажем, то вытащите "Camera Center" из родительской ветки в системе иерархии "Player" и поместите просто её так, чтобы она сама стала родительской. Т.к все движения она наследует от объекта "Player" и совершает все те же движения. У автора на видео это сделалось автоматически на 21:50.
@sedmoy_
@sedmoy_ Год назад
😁спасибо что написал, кучу времени мне съэкономил, я подумал что гдето в коде накосячил, но решил сначала посмотреть коментарии 😁
@ihabia
@ihabia Год назад
Можно и не вытаскивать, но в скрипте прописать, что Rotate всегда ноль )
@alexoem7633
@alexoem7633 Год назад
@@ihabia Это костыль, если в будущем понадобится вращать, то придется искать и исправлять. Не факт, что быстро получится разобраться.
@themachine9329
@themachine9329 Год назад
@@alexoem7633 + лишнее процессорное время тратить
@ElenaBabicheva
@ElenaBabicheva Год назад
Спасибо! Пришлось искать где косяк, вовремя решила посмотреть комменты. 👍
@DIY-PropaCarlo
@DIY-PropaCarlo Год назад
Мега полезный урок! Благодарю!
@Artem-ol1rw
@Artem-ol1rw Год назад
Спасибо познавательные уроки! Но я думаю что кое где можно сделать по-проще: void Update() { if (Input.GetMouseButton(0)) { // перемещение игрока var position = transform.position + transform.forward * Time.deltaTime * _speed; position.x = Mathf.Clamp(position.x, -2.5f, 2.5f); transform.position = position; // Поворот за курсором var diff = Input.mousePosition - Camera.main.WorldToScreenPoint(transform.position); var angel = diff.normalized.x * 180 / Mathf.PI; transform.eulerAngles = Vector3.up * angel; // Привязка камеры position = Camera.main.transform.position + transform.forward * Time.deltaTime * _speed; position.x = Mathf.Clamp(position.x, -2.5f, 2.5f); Camera.main.transform.position = position; } В этом случае не нужно запоминать предыдущее положение курсора, а так же не нужно создавать для камеры отдельный объект со скриптом.
@ЕгорШтельвах
@ЕгорШтельвах 7 месяцев назад
Да с камерой можно сделать ещё проще - просто сделать её дочерней, например, к объекту Player и всё. Всё работает и без скрипта, камеру не трясёт, она прекрасно следует за игроком. Что бы не дать игроку выйти за рамки дороги ( или любого другого игрового поля), достаточно просто добавить логичное препятствие и воспользоваться коллайдерами + Regidboby. Эффект тот же самый но выглядит логично, без костылей в виде *невидимых стен*. Да и в игре так и так придётся использовать эти компоненты. Я конечно только учусь делать игры, но как говорил мой друг программист со стажем работы 7 лет: "Если можно не писать код - не пиши. Меньше кода пишешь > меньше вероятности совершить ошибку > меньше рыскать в поиске ошибки > тратить меньше времени на отладку > получать в среднем больше денег за строчку кода". П.С.: Это не про то что нужно вообще отказываться от написания кода, просто те задачи, решение для которых уже реализовано, в том же интерфейсе Unity, лучше решить именно так, а не придумывать велосипед заново. Например в том же Unreal используют BluePrints, и знание этого инструмента очень часто значится в вакансиях как требуемый навык. Быстрее решить простые задачи готовыми скриптами, лишь может быть немного переписав скрипт, а остальное время потратить на более сложные задачи.
@kudes668
@kudes668 3 месяца назад
Здравствуйте подскажите пожалуйста разница между Camera.main.WorldToScreenPoint(transform.position); и Camera.main.transform.position . я попробовал оба варианта и никакой разницы (в строке объявления diff)
@ВладГороховатский-б1ч
Курс офигенный. Но с камерой это просто жесть, чтобы понять тот алгоритм пришлось на бумажке поле рисовать чтобы плавно и красиво двигался а не просто передать эулеру позицию мыши, а еще сначала ввело в ступор что 0,0 координата мыши начинается внизу слева а не сверху
@АлександрКоваленко-т8я
У тебя хорошие уроки, и ты очень хорошо объясняешь для новичков в с#. Было бы круто, если бы ты сделал ещё какой-нибудь курс по С# для Unity, где ещё показал примеры работы с массивами, циклами, использование корутинов, ну и так далее. Именно уклон на С#. Юнити не должно вызывать трудности, а вот само программирование для многих остаётся пробелом и сдерживает в создании проектов.
@AK_NoB_E8
@AK_NoB_E8 Год назад
может еще игру написать? chatGP в помощь
@Igorek055
@Igorek055 Год назад
Видимо на этом моё изучение юнити заканчивается. Логику управления через мышь вообще не понял
@yagamesdev
@yagamesdev Год назад
Здравствуйте. В Unity можно настроить управление объектом через мышь с помощью скрипта на C#. Для этого нужно использовать методы класса Input, которые позволяют получить текущее положение указателя мыши и изменять его при перемещении мыши. Приведём пример такого скрипта: public class MouseLook : MonoBehaviour { public float mouseSensitivity = 100f; // чувствительность мыши float xRotation = 0f; void Start() { // Блокировка курсора и скрытие его изображения Cursor.lockState = CursorLockMode.Locked; } void Update() { // Получаем показания смещения мыши float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; // Поворачиваем объект в соответствии с показаниями смещения мыши xRotation -= mouseY; xRotation = Mathf.Clamp(xRotation, -90f, 90f); // Ограничение угла поворота по оси X transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f); transform.Rotate(Vector3.up * mouseX); } } В этом скрипте мы получаем показания смещения мыши в каждом кадре в методе Update(). Затем эти значения используются для поворота объекта в соответствии с движением мыши. Кроме того, угол поворота объекта по оси X ограничивается до 180 градусов. Также в методе Start() курсор блокируется, а его изображение скрывается, чтобы игрок мог управлять объектом более точно.
@Defis_22
@Defis_22 9 месяцев назад
А у тебя?)@@valungamedev
@Defis_22
@Defis_22 8 месяцев назад
А у тебя?)@@valungamedev
@Defis_22
@Defis_22 8 месяцев назад
А у тебя как?)@@valungamedev
@szizoid4987
@szizoid4987 2 месяца назад
В целом курс полезный, чтобы быстро вкатиться в юнити Но, скажем так. В большинстве случаев (не только это видео, но и предыдущие) вместо грамотных решений используются какие-то костыли. Например проблему с Update() и частотой кадров решает не Time.deltaTime, а FixedUpdate(). Это вариация Update, которая делает расчёты ровно нужное количество раз в секунду (количество задаётся в настройках юнити. По умолчанию вроде универсальные 60)
@mem-tube-app
@mem-tube-app 2 года назад
Ещё важно сказать для новичков в программировании, что C# - строго типизированный(нужно явно указать тип, float, int, bool. string), объектно - ориентированный язык.
@Женькапека
@Женькапека 10 месяцев назад
Спасибо очень полезная информация
@yagamesdev
@yagamesdev 9 месяцев назад
Здравствуйте. Рады, что видео оказалось полезным. Спасибо, что поделились 🙂
@МаксимКаськов-ч4п
@МаксимКаськов-ч4п Месяц назад
Что-то не понял, а где урок про эту дорожку в горизонт, синий фон и импорте персонажа для этого урока?
@ClouD7472
@ClouD7472 11 месяцев назад
Большое спасибо за обучающие уроки, все разжевано до мелочей:) Появился вопрос. Я у фигурки человечка (gameObject Player) сделал поле _camera. В это поле просто перетащил в инспекторе объект Main Camera. Учитывая, что это Uniti, с точки зрения ООП, на сколько верно такое решение?
@yagamesdev
@yagamesdev 10 месяцев назад
Здравствуйте. Если скрипт будет отвечать только за действия с камерой, то это хорошее решение. При этом в скрипте не должно быть путаницы и методов, которые отвечают за разные задачи. Иначе код будет неоптимизированным и нечитаемым.
@slavoro3199
@slavoro3199 Год назад
А где-то было видео в котором Илья создает персонажа, дорогу и скайбокс. Подскажите где оно?...
@Kirvun
@Kirvun Год назад
Поищи на канале: Настройка камеры и работа с материалами
@slavoro3199
@slavoro3199 Год назад
@@Kirvun Спасибо)
@JohnyWaters
@JohnyWaters Год назад
Хм, а почему бы не взять и перенести MainCamera внутрь самого Player? Тогда не нужен даже скрипт, т.к. камера двигается относительно персонажа также. Технически это не правильно или здесь правило "распределение обязанности" под каждый отдельный объект?
@palmex1850
@palmex1850 Год назад
хз, но я просто так и сделал
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Не рекомендуем добавлять камеру в дочерний объект Player. Дело в том, что если игру расширить и добавить препятствия, которые могут нейтрализовать игрока - камера тоже уничтожится. Также это повлияет на возможность реализовать плавность камеры.
@JohnyWaters
@JohnyWaters Год назад
@@yagamesdev спасибо за объяснение!
@palmex1850
@palmex1850 Год назад
@@yagamesdev понял, спасибо
@1145831
@1145831 Год назад
Здравствуйте. Я никак не пойму, в каком месте мы обозначили, что переменная oldMousePositonX будет хранить положение мыши из предыдущего кадра? Мы просто создали эту переменную, потом создали ещё одну - deltaX - и присвоили ей значение текущего положения мыши минус переменная oldMousePositonX, значение которой не задавали. Почему это работает?)
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Дело в том, что значение oldMousePositonX обрабатывается в двух разных стадиях - MouseDown и MouseUp. Если это поле изменено и не равняется 0 или если левая кнопка мыши была нажата и отпущена, то положение мыши будет отслеживаться корректно.
@nikaklnikak6152
@nikaklnikak6152 4 месяца назад
Оно просто автоматически задаётся как "0", если при объявлении переменной не присваивать значение.
@UrilovW
@UrilovW 8 месяцев назад
Мне кажется или видео где добавляли персонажа и дорогу почему то пропало Можно его где нибудь посмотреть?
@yagamesdev
@yagamesdev 8 месяцев назад
Здравствуйте. Возможно, речь идёт о ролике про добавление анимации: clck.ru/399JuY. Посмотрите, пожалуйста.
@youpubeqwer
@youpubeqwer 11 месяцев назад
Внутри проекта который вы выложили на яндекс диск нет файла скрипта который писали в этом уроке?
@yagamesdev
@yagamesdev 11 месяцев назад
Здравствуйте. Файл скрипта из этого урока можно скачать по ссылке в описании к следующему: clck.ru/36uUeo
@kamidereneko336
@kamidereneko336 7 месяцев назад
А если я хочу сделать движение с физикой, то есть через RigidBody, код для поворота камерой останется таким же? Или там все придется менять?
@yagamesdev
@yagamesdev 7 месяцев назад
Здравствуйте. Переход на управление игрока через RigidBody не повлияет на камеру. Поэтому изменять её код передвижения необязательно.
@zetus6423
@zetus6423 2 года назад
@Яндекс Игры для Разработчиков - здравствуйте , спасибо за обучающие видео ! Интересует вот такая вещь по теме ролика. В браузере всё работает - управление мышкой и кнопками с клавиатуры. Я так понимаю, если игру запустить на мобильном устройстве через браузер, управление работать не будет ? А вот если совместить управление под андроид и клавиатуру+ мышь , то это сработает на мобильных устройствах ?
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Да, в проекте можно реализовать одновременно управление клавиатурой/мышью или через сенсор. Для этого необходимо определять устройство, на котором запущена игра, и автоматически переключать способ управления. Сделать это можно с помощью объекта deviceInfo нашего SDK. Подробнее в Руководстве разработчика: clck.ru/33oU7R
@unity3dsimplesolutions309
@unity3dsimplesolutions309 Год назад
шаблон данной игры можно использовать? используя свое оформление конечно же.
@yagamesdev
@yagamesdev Год назад
Добрый день. Для публикации игры в нашем каталоге, её механики и графическое оформление должны быть уникальными. Пишем в пункте 3.6. Требований к играм: clck.ru/344npj
@ЛеонидМальцев-с3п
@ЛеонидМальцев-с3п 7 месяцев назад
Приветствую. Кого в интернете или в ютубе можно попросить сделать тренажер-игра английского языка? Например в виде какого-то 3Д героя, он просто стоит и говорит по английски. Сначала простые слова и предложения, потом все усложняется. Дикция как носитель английского языка. Есть меню перевода, если кому не понятно что он сказал. Нужно выполнять задания, которые он говорит
@EXgraF
@EXgraF 10 месяцев назад
Здравствуйте! Не пойму, зачем для камеры писать скрипт и вкладывать в другой объект если камеру можно кинуть в объект Player и она будет следовать за ним??
@yagamesdev
@yagamesdev 10 месяцев назад
Здравствуйте. Если прикрепить камеру к объекту игрока, она станет дочерней. В этом случае перемещаться и вращаться она будет некорректно. Наличие отдельного метода обработки следования позволяет более точно настроить логику камеры.
@shushmek3310
@shushmek3310 9 месяцев назад
А как насчёт cinemaMashin в юнити?
@yagamesdev
@yagamesdev 9 месяцев назад
Здравствуйте. «Cinemachine» можно использовать, но в этом проекте он не понадобился. Рекомендуем добавлять в игру то, что поможет улучшить её без увеличения потребляемой мощности компьютера.
@МаксимРадюш-ч6т
А почему бы не использовать Character Controller или RigidBody? Так же намного лучше и легче)
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Использование «RigidBody» понадобится для других скриптов. Рассказываем в следующих видео курса по ссылке: clck.ru/36Nnmt
@fronzayy
@fronzayy 7 месяцев назад
ахахха для этого такое использовать? лишняя нагрузка
@МаксимРадюш-ч6т
@МаксимРадюш-ч6т 7 месяцев назад
@@fronzayy нет, неправда. Лучше взять character controller, и не писать лишней хуйни
@fronzayy
@fronzayy 7 месяцев назад
@@МаксимРадюш-ч6т хаах чувак, тебе тут character controller зачем нужен? во первых character controller даёт больше нагрузку, с трансформ позишн производительность лучше это как минимум. во вторых ты бред несёшь, для трансформ позишн это одна строчка кода маленькая, для Character Controller 3-4 строчки
@МаксимРадюш-ч6т
@МаксимРадюш-ч6т 7 месяцев назад
@@fronzayy пиздец, нихуя cc не даёт нагрузку, а если даёт, то такую мизерную, на которую абсолютно поебать, и тебе сука лень написать эти 3 строчки кода? Сразу видно, челик не разбирается
@daniilv7639
@daniilv7639 Год назад
Здравствуйте! Почему на 14:43 мы можем прибавлять к _eulerY значение, если эта переменная не инициализирована?
@yagamesdev
@yagamesdev Год назад
Здравствуйте. На момент прибавления значения переменная _eulerY инициализирована на 10 строке.
@daniilv7639
@daniilv7639 Год назад
@@yagamesdev В 10 строчке просто переменная объявлена как "private float _eulerY;", но значение не присвоено. Не понимаю, объясните пожалуйста)
@DIY-PropaCarlo
@DIY-PropaCarlo Год назад
ей по умолчанию присвоен ноль@@daniilv7639
@mamas111
@mamas111 6 месяцев назад
@@daniilv7639 Числовые типы при объявлении по умолчанию имеют значение "0". Подробнее Значения по умолчанию типов C# (справка по C#)
@nekto2436
@nekto2436 2 года назад
что делать если пустой объект "player" не двигается вместе с персонажем а стоит на месте ?
@meosart1758
@meosart1758 Год назад
Объект player и есть персонаж, скрипт должен висеть на нем и двигать именно его, а меш(моделька) персонажа, должен быть дочерним объектом для player'a
@yagamesdev
@yagamesdev Год назад
Если мы верно поняли, то объект «Player» двигается по координатам, однако координаты объекта «Man» не меняются. Тогда это корректное поведение объектов. Дело в том, что у дочерних объектов центр находится на родительском объекте. Поэтому дочерний объект «Man» движется по координатам родительского объекта «Player».
@nekto2436
@nekto2436 Год назад
@@yagamesdev С этим я уже разобрался. Теперь новая проблема. Яндекс игры не может взять данные игрока. А в консоли пишется куча ошибок.
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Сохранять внутриигровые данные можно с помощью методов объекта Player. Метод player.setData сохраняет прогресс на сервер. Максимальный размер данных - 200 KБ. Чтобы асинхронно возвращать внутриигровой прогресс пользователя, который записан в базе Яндекса, используйте player.getData. Численные данные можно получать через метод player.setStats. Чтобы проверить, удалось ли сохранить прогресс, используйте метод Promise. Подробнее рассказываем по ссылке: clck.ru/34aKsq
@user-oz2eg7zr2c
@user-oz2eg7zr2c Год назад
Если у нас в коде управление мышью, то как пользователь будет играть в мобильной версии игры?
@yagamesdev
@yagamesdev Год назад
Егор, добрый день. В играх с поддержкой нескольких устройств необходимо настроить адаптивное управление в зависимости от платформы пользователя. На десктопе оно должно осуществляться с помощью мыши и/или клавиатуры, на мобильных - жестами и/или с использованием акселерометра. Чтобы определять устройство игрока и автоматически менять управление, рекомендуем использовать метод ysdk.deviceInfo. Инструкция по настройке в Руководстве разработчика: clck.ru/33oU7R
@Studio-ql6fo
@Studio-ql6fo Год назад
Подскажите, я создаю пустой объект, вставляю в него камеру и пустой объект автоматически соединяется с камерой. Что не так делаю?
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Всё верно, если создавать пустой объект и добавлять на него камеру, они будут автоматически соединяться.
@taliondocoto6686
@taliondocoto6686 11 месяцев назад
Я выбрал 3D Icons но у меня значки не отображаются.
@yagamesdev
@yagamesdev 11 месяцев назад
Здравствуйте. Такое бывает, если вы не активировали Gizmo - визуально его меню похоже на 3D сферу с точками. Подробнее по ссылке: clck.ru/36soGW
@-_tip_-7046
@-_tip_-7046 Год назад
у меня код с поворотом персонажа написан в точь в точь как у вас, но сам персонаж поворачивается с большой скоростью и я не знаю в чем может быть проблема
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Дело может быть в методе Update - если поворот персонажа прописан с его помощью, то он может меняться в зависимости от устройства. Рекомендуем использовать метод FixedUpdate(). Тогда движение персонажа будет происходит на основании заданной величины.
@de43gy
@de43gy 2 года назад
Не понял, зачем камере скрипт. Она уже следует за челом, как ее добавляем в объект Player
@Невходить-н2н
@Невходить-н2н 2 года назад
Она слишком жёстко привязана к игроку будет. Будет поворачиваться за ним при повороте игрока, не получится реализовать плавное перемещение и т.п. В некоторых случаях это важно, поэтому лучше скриптить
@yagamesdev
@yagamesdev Год назад
Константин, здравствуйте. Как уже подсказали, скрипт движения камеры добавляется, чтобы она не была привязана только к объекту Player. Это помогает сделать повороты камеры более плавными.
@ZirKino
@ZirKino Год назад
А как сделать также только на клавиатуре?
@ARAB-nj4rx
@ARAB-nj4rx Год назад
Я бы сделал так: Объявляем в начале (до методов Start и Update) поле, которое будет хранить скорость поворота. Например [SerializeField] private float _rotationRate; Дальше в методе Update пишем if (Input.GetKey(KeyCode.D)) { _eulerY += (_rotationRate * Time.deltaTime); _eulerY = Mathf.Clamp(_eulerY, -70, 70); transform.eulerAngles = new Vector3(0, _eulerY, 0); } if (Input.GetKey(KeyCode.A)) { _eulerY -= (_rotationRate * Time.deltaTime); _eulerY = Mathf.Clamp(_eulerY, -70, 70); transform.eulerAngles = new Vector3(0, _eulerY, 0);
@oldborodach
@oldborodach Год назад
Так немного не понял ✅ 1. У меня не трясся персонаж закинул своего ☝ почему Unity 2023.1.12f1 2. Не увидел разницы между между 👉❗👈 тем что скрипт весит на камере пустого объекта и без него 🧐🤔 почему все тоже самое. Грубо говоря ☝ создал я пустой объект закинул туда как дочерний камеру и выставил её как надо 🤔 а скрипт тогда зачем если все так же работает?
@yagamesdev
@yagamesdev 11 месяцев назад
Здравствуйте. Ответим на всё по порядку: 1. Тряска персонажа может быть заметней из-за разницы в FPS, а также при более низкой частоте кадров. 2. Не рекомендуем добавлять камеру в дочерний объект Player. Дело в том, что если игру расширить и добавить препятствия, которые могут нейтрализовать игрока - камера тоже уничтожится. Также это повлияет на возможность реализовать плавность камеры.
@Rom4ikRu
@Rom4ikRu 8 месяцев назад
У меня ничего не работает( Я уже день сижу переделываю... Я даже код скопировал от готовой работы, ничего не поменялось. Может мне какой то параметр поменять?
@nigahon5070
@nigahon5070 4 месяца назад
скрипт на папку пустую с персонажем перекинь
@koloskov_pavel
@koloskov_pavel 2 года назад
Почему у меня камера поворачивается в сторону, в которую смотрит персонаж? У вас камера идет за персом, а у меня + поворачивается
@gamerovn5229
@gamerovn5229 Год назад
Объект CameraCenter нужно вытащить из объекта Player, чтобы он стоял отдельно.
@koloskov_pavel
@koloskov_pavel Год назад
@@gamerovn5229 понял, спасибо
@BiGSplush
@BiGSplush Год назад
У меня почему то при привязке поворота к клавишам KeyCode.A/D, при попытке ограничить через Clamp() угол имеет диапазон с 0 до 360, то есть Clamp(y, -70, 70) не работает (у него нет отрицательного значения в принципе). Пробовал по разному обойти этот нюанс, но не канает почему то. Версия 2022.3.4f1, тачка: Mac os m1 pro. Если кто сталкивался/знает, буду благодарен за ответ, ну или хак как обойти.
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Предлагаем 2 варианта кода, которые могут решить вопрос: 1. Скрипт, который используется в курсе: if (Input.GetMouseButton(0)) { Vector3 newPosition = transform.position + transform.forward * Time.deltaTime * _speed; newPosition.x = Mathf.Clamp(newPosition.x, -2.5f, 2.5f); transform.position = newPosition; float deltaX = Input.mousePosition.x - _oldMousePositionX; _oldMousePositionX = Input.mousePosition.x; _eulerY += deltaX; _eulerY = Mathf.Clamp(_eulerY, -70f, 70f); transform.eulerAngles = new Vector3(0, _eulerY, 0); } 2. Можно заменить строку «_eulerY = Mathf.Clamp(_eulerY, -70f, 70f);» на «_eulerY = ClampAngle(_eulerY, -70f, 70f);». В таком случае скрипт будет выглядеть так: public static float ClampAngle(float current, float min, float max) { float dtAngle = Mathf.Abs(((min - max) \+ 180) % 360 - 180); float hdtAngle = dtAngle \* 0.5f; float midAngle = min \+ hdtAngle; float offset = Mathf.Abs(Mathf.DeltaAngle(current, midAngle)) - hdtAngle; if (offset \> 0) current = Mathf.MoveTowardsAngle(current, midAngle, offset); return current; }
@DIY-PropaCarlo
@DIY-PropaCarlo Год назад
есть еще более простой и стандартный вариант- привязка к Get.Axis
@roiz5204
@roiz5204 Год назад
Камера за персонажем не двигается, в чем может быть причина ?
@Кекс-р8н
@Кекс-р8н Год назад
Проверь,накинул скрипт камерамув на камеру центр И еще проверь накинул на таргет плеера
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Попробуйте, пожалуйста, добавить на камеру скрипт CameraMove и перенести Player в поле Target скрипта CameraMove - должно помочь.
@mikhailserfinger7564
@mikhailserfinger7564 Год назад
В ролике во время 21:33 на объекте Player создается пустой объект CameraCenter, который является подчиненным для объекта Player. Во время 21:51 на объект CameraCenter переносится MainCamera. При этом объект CameraCenter непонятно каким образом уходит из под объекта Player и становится с ним одинаковым в иерархии. Дальше везде CameraCenter является одинаковым в иерархии по отношению к объекту Player. В чем тут смысл? Почему надо создавать объект CameraCenter подчиненным объекту Player вместо того, чтобы сразу не создать объект CameraCenter на пустом месте?
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Объект «CameraCenter» создаётся в объекте «Player» для того, чтобы сменить глобальные координаты на те, которые будут находиться внутри игрока. «MainCamera» используется для того, чтобы стать дочерним объектом - он всегда следует за родителем.
@nigahon5070
@nigahon5070 4 месяца назад
у меня мозги закипели с этим положением мышки
@kerofx
@kerofx Год назад
Помогите, пожалуйста. У меня во время вращения персонаж очень сильно крутится, при этом перемещаясь по окружности. Как можно сделать так, чтобы он крутился только на месте
@Ritme
@Ritme Год назад
возможно у тебя 3д модель персонажа не в центре родительского объекта стоит , нажми на Man в иерархии и проверь чтобы все координаты были 0 0 0, также сделай с Base Human
@kerofx
@kerofx Год назад
@@Ritme да, так и было, спасибо
@Ritme
@Ritme Год назад
@@kerofx пожалуйста, я сам уже задолбался с всякими ошибками и прЭколами юнити, поэтому хочу чтобы у других этого не было
@Seafrodit
@Seafrodit Год назад
​@@Ritme Thanks
@-_tip_-7046
@-_tip_-7046 Год назад
у меня такая же проблема как у того человека, но координаты модельки man и player идентичны то есть 0 0 0 @@Ritme
@Владислав-э5т2м
@Владислав-э5т2м 2 года назад
eу меня в этом коде выдает ошибку на моменте ограничения движения по дороге, ссылаясь на Mathf.Clamp Vector3 newPosition = transform.position + transform.forward * Time.deltaTime * _speed; newPosition.x = Mathf.Clamp(newPosition.x -2.5f, 2.5f); transform.position = newPosition; float deltaX = Input.mousePosition.x - _oldMousePositionX; _oldMousePositionX = Input.mousePosition.x; _eulerY += deltaX; _eulerY = Mathf.Clamp(_eulerY, -70, 70); transform.eulerAngles = new Vector3(0, _eulerY, 0); Assets\Scripts\Playermove.cs(26,35): error CS1501: No overload for method 'Clamp' takes 2 arguments подскажите, с чем может быть связано?
@Dianom
@Dianom 2 года назад
Тут ошибка - newPosition.x = Mathf.Clamp(newPosition.x -2.5f, 2.5f); Забыл запятую между newPosition.x и -2.5f. Должно быть так: newPosition.x = Mathf.Clamp(newPosition.x, -2.5f, 2.5f);
@Владислав-э5т2м
@Владислав-э5т2м 2 года назад
@@Dianom спасибо.
@goosesuka
@goosesuka Год назад
camera.position = transform.position + new Vector3(0, 2.5f, -2.3f); я её прилепил как в предыдущем и не дёргалось ничего
@themachine9329
@themachine9329 Год назад
сказано же было что может просто повести
@igorcoolman
@igorcoolman Год назад
у меня трансформ позицион меняется примерно так 0.00137952 и движения не видно это потому что + перед = забыл поставить +=))
@nealeks
@nealeks Год назад
У меня перс просто вместо того чтобы смотреть вперед смотрит назад
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Обычно так случается, если объекты на сцене повёрнуты в другом направлении. Если персонаж «Man» также двигается в обратную сторону, нужно развернуть все объекты на сцене - это должно помочь.
@rovshanbadirkhanov
@rovshanbadirkhanov 2 года назад
А почему бы не использовать "FixedUpdate", вместо того чтобы умножать что-то на `Time.deltaTime"? Это не наставление, просто реально интересно :)
@КтоТо-х6ь6ь
@КтоТо-х6ь6ь 2 года назад
FixedUpdate стандартно срабатывает 50 раз в секунду, и его используют для изменения физических компонентов. (потому что физика с такой частотой обновляется). 1. В данном случае у нас нет никакой физики. 2. У нас идёт постоянное считывание клавиш которые игрок нажал, и если мы будет проверять в FixedUpdate (50 раз) он может пропустить нажатие игрока.
@rovshanbadirkhanov
@rovshanbadirkhanov 2 года назад
@@КтоТо-х6ь6ь Спасибо, большое что отозвались и разъяснили. А что имеется ввиду, когда вы говорите "физический компонент"? Разве игрок - это не физический компонент?
@КтоТо-х6ь6ь
@КтоТо-х6ь6ь 2 года назад
@@rovshanbadirkhanov Игрок это обычный объект и Юнити его просто перемещает по сцене. Юнити для обработки физической симуляции использует физический движок nvidia PhysX, а он начинает работать когда на объект добавляешь физический компонент например Rigidbody и его движок начинает обрабатывать. А в данной игре у нас нет физических компонентов)
@rovshanbadirkhanov
@rovshanbadirkhanov 2 года назад
@@КтоТо-х6ь6ь Аа, терпеть более менее понятно, спасибо)
@youpubeqwer
@youpubeqwer 11 месяцев назад
@@КтоТо-х6ь6ь Сколько раз в секунду Time.deltaTime ?
@ihabia
@ihabia Год назад
Странно, но у меня почему то нет никаких дерганий камеры, как в уроке, без LateUpdate нормально работает.
@themachine9329
@themachine9329 Год назад
сказали же что может повести
@haryz846
@haryz846 8 месяцев назад
Блин, ну вот я смотрю этот курс и... ничего не понимаю. Просто тупо списываю код... Эхх, совсем не интересно так. Хочется же понимать что ты делаешь, а не тупо делать тоже самое
@Games2Dev
@Games2Dev 18 дней назад
Не очень понял зачем на камеру вешать скрипт с апдейтом? Может просто сделать камеру дочерним объектом игрока и она автоматом будет следовать за персонажем без всяких апдейтов?
Далее
Добавление анимации
23:40
Просмотров 24 тыс.
Написание скрипта для ворот
30:29
Работа с префабами
10:05
Просмотров 12 тыс.