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

แชร์
ฝัง
  • เผยแพร่เมื่อ 16 พ.ย. 2024
  • #КурсыЯндексИгр В этом уроке напишем скрипт, позволяющий управлять персонажем с помощью мыши, и настроим следование камеры за персонажем.
    Версию проекта по итогам прошлого урока можно скачать здесь: disk.yandex.ru...
    Чтобы открыть файл проекта в Unity, воспользуйтесь инструкцией: disk.yandex.ru...
    Следующее видео «Добавление анимации»: • Добавление анимации
    Удобная рабочая тетрадь по курсу: yandexgames-un...
    TH-cam-канал Ильи Карельцева: / @eccentricgames
    Хотите быть в курсе всех главных новостей платформы? Подписывайтесь на наш канал в Telegram: t.me/yangamesd...
    Вам важно быть на связи с сообществом, иметь возможность задать вопрос или помочь новичкам? Присоединяйтесь к нашему дружному комьюнити: t.me/yagamedev
    #ЯндексИгры #РазработкаИгр #HTML5

ความคิดเห็น • 130

  • @kroshka_vseznayka_tv
    @kroshka_vseznayka_tv 9 หลายเดือนก่อน +12

    Илья, хочу выразить вам огромную благодарность за этот курс 🤗. Все очень понятно и упорядоченно 💪Отдельно хочу Вас поблагодарить, что уделяете внимание разным мелочам, таким как горячие кнопки и настройки инструментов! Для меня, как новичка, это гипер важно))) Вы очень приятный учитель у которого хочется учится дальше!
    Пока всё получается!)))

    • @yagamesdev
      @yagamesdev  9 หลายเดือนก่อน +1

      Здравствуйте. Рады, что курс вам понравился. Спасибо за такой позитивный отзыв. Желаем вам успехов и развития ❤️

  • @dmitrygubin5377
    @dmitrygubin5377 2 ปีที่แล้ว +36

    Если у кого то камера поворачивает вместе с персонажем, то вытащите "Camera Center" из родительской ветки в системе иерархии "Player" и поместите просто её так, чтобы она сама стала родительской. Т.к все движения она наследует от объекта "Player" и совершает все те же движения. У автора на видео это сделалось автоматически на 21:50.

    • @sedmoy_
      @sedmoy_ ปีที่แล้ว +2

      😁спасибо что написал, кучу времени мне съэкономил, я подумал что гдето в коде накосячил, но решил сначала посмотреть коментарии 😁

    • @ihabia
      @ihabia ปีที่แล้ว +1

      Можно и не вытаскивать, но в скрипте прописать, что Rotate всегда ноль )

    • @alexoem7633
      @alexoem7633 ปีที่แล้ว +1

      @@ihabia Это костыль, если в будущем понадобится вращать, то придется искать и исправлять. Не факт, что быстро получится разобраться.

    • @themachine9329
      @themachine9329 ปีที่แล้ว

      @@alexoem7633 + лишнее процессорное время тратить

    • @ElenaBabicheva
      @ElenaBabicheva ปีที่แล้ว +1

      Спасибо! Пришлось искать где косяк, вовремя решила посмотреть комменты. 👍

  • @Artem-ol1rw
    @Artem-ol1rw ปีที่แล้ว +11

    Спасибо познавательные уроки! Но я думаю что кое где можно сделать по-проще:
    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 หลายเดือนก่อน +3

      Да с камерой можно сделать ещё проще - просто сделать её дочерней, например, к объекту Player и всё. Всё работает и без скрипта, камеру не трясёт, она прекрасно следует за игроком.
      Что бы не дать игроку выйти за рамки дороги ( или любого другого игрового поля), достаточно просто добавить логичное препятствие и воспользоваться коллайдерами + Regidboby. Эффект тот же самый но выглядит логично, без костылей в виде *невидимых стен*. Да и в игре так и так придётся использовать эти компоненты.
      Я конечно только учусь делать игры, но как говорил мой друг программист со стажем работы 7 лет: "Если можно не писать код - не пиши. Меньше кода пишешь > меньше вероятности совершить ошибку > меньше рыскать в поиске ошибки > тратить меньше времени на отладку > получать в среднем больше денег за строчку кода".
      П.С.: Это не про то что нужно вообще отказываться от написания кода, просто те задачи, решение для которых уже реализовано, в том же интерфейсе Unity, лучше решить именно так, а не придумывать велосипед заново. Например в том же Unreal используют BluePrints, и знание этого инструмента очень часто значится в вакансиях как требуемый навык. Быстрее решить простые задачи готовыми скриптами, лишь может быть немного переписав скрипт, а остальное время потратить на более сложные задачи.

    • @kudes668
      @kudes668 4 หลายเดือนก่อน

      Здравствуйте подскажите пожалуйста разница между Camera.main.WorldToScreenPoint(transform.position); и Camera.main.transform.position . я попробовал оба варианта и никакой разницы (в строке объявления diff)

  • @DIY-PropaCarlo
    @DIY-PropaCarlo ปีที่แล้ว +3

    Мега полезный урок! Благодарю!

  • @ВладГороховатский-б1ч
    @ВладГороховатский-б1ч หลายเดือนก่อน +1

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

  • @imnetzus
    @imnetzus 2 หลายเดือนก่อน

    Для тех, у кого не работает метод Clamp, проверьте MathF ли у вас или Mathf, у меня была большая и из-за этого были ошибки.
    Спасибо за курс!

    • @yagamesdev
      @yagamesdev  2 หลายเดือนก่อน

      Здравствуйте. Спасибо, что делитесь решением с другими разработчиками 🙂

  • @mem-tube-app
    @mem-tube-app 2 ปีที่แล้ว +8

    Ещё важно сказать для новичков в программировании, что C# - строго типизированный(нужно явно указать тип, float, int, bool. string), объектно - ориентированный язык.

  • @АлександрКоваленко-т8я
    @АлександрКоваленко-т8я ปีที่แล้ว

    У тебя хорошие уроки, и ты очень хорошо объясняешь для новичков в с#. Было бы круто, если бы ты сделал ещё какой-нибудь курс по С# для Unity, где ещё показал примеры работы с массивами, циклами, использование корутинов, ну и так далее. Именно уклон на С#. Юнити не должно вызывать трудности, а вот само программирование для многих остаётся пробелом и сдерживает в создании проектов.

    • @AK_NoB_E8
      @AK_NoB_E8 ปีที่แล้ว

      может еще игру написать? chatGP в помощь

  • @szizoid4987
    @szizoid4987 2 หลายเดือนก่อน

    В целом курс полезный, чтобы быстро вкатиться в юнити
    Но, скажем так. В большинстве случаев (не только это видео, но и предыдущие) вместо грамотных решений используются какие-то костыли. Например проблему с Update() и частотой кадров решает не Time.deltaTime, а FixedUpdate(). Это вариация Update, которая делает расчёты ровно нужное количество раз в секунду (количество задаётся в настройках юнити. По умолчанию вроде универсальные 60)

  • @Igorek055
    @Igorek055 ปีที่แล้ว +14

    Видимо на этом моё изучение юнити заканчивается. Логику управления через мышь вообще не понял

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว +7

      Здравствуйте. В 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 หลายเดือนก่อน +1

      А у тебя?)@@valungamedev

    • @Defis_22
      @Defis_22 9 หลายเดือนก่อน +1

      А у тебя?)@@valungamedev

    • @Defis_22
      @Defis_22 9 หลายเดือนก่อน +1

      А у тебя как?)@@valungamedev

  • @Женькапека
    @Женькапека 10 หลายเดือนก่อน

    Спасибо очень полезная информация

    • @yagamesdev
      @yagamesdev  10 หลายเดือนก่อน

      Здравствуйте. Рады, что видео оказалось полезным. Спасибо, что поделились 🙂

  • @whiteout4062
    @whiteout4062 12 ชั่วโมงที่ผ่านมา

    Почему изменения скрипта в инспекторе в Юнити не отображаются в игровой в сцене, а только после запуска игры?

  • @ClouD7472
    @ClouD7472 11 หลายเดือนก่อน

    Большое спасибо за обучающие уроки, все разжевано до мелочей:)
    Появился вопрос.
    Я у фигурки человечка (gameObject Player) сделал поле _camera. В это поле просто перетащил в инспекторе объект Main Camera. Учитывая, что это Uniti, с точки зрения ООП, на сколько верно такое решение?

    • @yagamesdev
      @yagamesdev  11 หลายเดือนก่อน +1

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

  • @МаксимКаськов-ч4п
    @МаксимКаськов-ч4п 2 หลายเดือนก่อน

    Что-то не понял, а где урок про эту дорожку в горизонт, синий фон и импорте персонажа для этого урока?

  • @zetus6423
    @zetus6423 2 ปีที่แล้ว

    @Яндекс Игры для Разработчиков - здравствуйте , спасибо за обучающие видео !
    Интересует вот такая вещь по теме ролика. В браузере всё работает - управление мышкой и кнопками с клавиатуры. Я так понимаю, если игру запустить на мобильном устройстве через браузер, управление работать не будет ? А вот если совместить управление под андроид и клавиатуру+ мышь , то это сработает на мобильных устройствах ?

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว +5

      Здравствуйте. Да, в проекте можно реализовать одновременно управление клавиатурой/мышью или через сенсор. Для этого необходимо определять устройство, на котором запущена игра, и автоматически переключать способ управления. Сделать это можно с помощью объекта deviceInfo нашего SDK. Подробнее в Руководстве разработчика: clck.ru/33oU7R

  • @unity3dsimplesolutions309
    @unity3dsimplesolutions309 2 ปีที่แล้ว

    шаблон данной игры можно использовать?
    используя свое оформление конечно же.

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว +1

      Добрый день. Для публикации игры в нашем каталоге, её механики и графическое оформление должны быть уникальными. Пишем в пункте 3.6. Требований к играм: clck.ru/344npj

  • @1145831
    @1145831 ปีที่แล้ว +1

    Здравствуйте. Я никак не пойму, в каком месте мы обозначили, что переменная oldMousePositonX будет хранить положение мыши из предыдущего кадра? Мы просто создали эту переменную, потом создали ещё одну - deltaX - и присвоили ей значение текущего положения мыши минус переменная oldMousePositonX, значение которой не задавали. Почему это работает?)

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว +1

      Здравствуйте. Дело в том, что значение oldMousePositonX обрабатывается в двух разных стадиях - MouseDown и MouseUp. Если это поле изменено и не равняется 0 или если левая кнопка мыши была нажата и отпущена, то положение мыши будет отслеживаться корректно.

    • @nikaklnikak6152
      @nikaklnikak6152 5 หลายเดือนก่อน

      Оно просто автоматически задаётся как "0", если при объявлении переменной не присваивать значение.

  • @ЛеонидМальцев-с3п
    @ЛеонидМальцев-с3п 8 หลายเดือนก่อน

    Приветствую. Кого в интернете или в ютубе можно попросить сделать тренажер-игра английского языка? Например в виде какого-то 3Д героя, он просто стоит и говорит по английски. Сначала простые слова и предложения, потом все усложняется. Дикция как носитель английского языка. Есть меню перевода, если кому не понятно что он сказал. Нужно выполнять задания, которые он говорит

  • @UrilovW
    @UrilovW 8 หลายเดือนก่อน

    Мне кажется или видео где добавляли персонажа и дорогу почему то пропало
    Можно его где нибудь посмотреть?

    • @yagamesdev
      @yagamesdev  8 หลายเดือนก่อน

      Здравствуйте. Возможно, речь идёт о ролике про добавление анимации: clck.ru/399JuY. Посмотрите, пожалуйста.

  • @kamidereneko336
    @kamidereneko336 8 หลายเดือนก่อน

    А если я хочу сделать движение с физикой, то есть через RigidBody, код для поворота камерой останется таким же? Или там все придется менять?

    • @yagamesdev
      @yagamesdev  8 หลายเดือนก่อน

      Здравствуйте. Переход на управление игрока через RigidBody не повлияет на камеру. Поэтому изменять её код передвижения необязательно.

  • @slavoro3199
    @slavoro3199 ปีที่แล้ว +1

    А где-то было видео в котором Илья создает персонажа, дорогу и скайбокс. Подскажите где оно?...

    • @Kirvun
      @Kirvun ปีที่แล้ว +1

      Поищи на канале: Настройка камеры и работа с материалами

    • @slavoro3199
      @slavoro3199 ปีที่แล้ว

      @@Kirvun Спасибо)

  • @JohnyWaters
    @JohnyWaters ปีที่แล้ว +1

    Хм, а почему бы не взять и перенести MainCamera внутрь самого Player? Тогда не нужен даже скрипт, т.к. камера двигается относительно персонажа также. Технически это не правильно или здесь правило "распределение обязанности" под каждый отдельный объект?

    • @palmex1850
      @palmex1850 ปีที่แล้ว

      хз, но я просто так и сделал

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว +2

      Здравствуйте. Не рекомендуем добавлять камеру в дочерний объект Player. Дело в том, что если игру расширить и добавить препятствия, которые могут нейтрализовать игрока - камера тоже уничтожится. Также это повлияет на возможность реализовать плавность камеры.

    • @JohnyWaters
      @JohnyWaters ปีที่แล้ว +1

      @@yagamesdev спасибо за объяснение!

    • @palmex1850
      @palmex1850 ปีที่แล้ว +1

      @@yagamesdev понял, спасибо

  • @EXgraF
    @EXgraF 11 หลายเดือนก่อน

    Здравствуйте! Не пойму, зачем для камеры писать скрипт и вкладывать в другой объект если камеру можно кинуть в объект Player и она будет следовать за ним??

    • @yagamesdev
      @yagamesdev  11 หลายเดือนก่อน

      Здравствуйте. Если прикрепить камеру к объекту игрока, она станет дочерней. В этом случае перемещаться и вращаться она будет некорректно. Наличие отдельного метода обработки следования позволяет более точно настроить логику камеры.

  • @youpubeqwer
    @youpubeqwer 11 หลายเดือนก่อน

    Внутри проекта который вы выложили на яндекс диск нет файла скрипта который писали в этом уроке?

    • @yagamesdev
      @yagamesdev  11 หลายเดือนก่อน

      Здравствуйте. Файл скрипта из этого урока можно скачать по ссылке в описании к следующему: clck.ru/36uUeo

  • @МаксимРадюш-ч6т
    @МаксимРадюш-ч6т ปีที่แล้ว +1

    А почему бы не использовать Character Controller или RigidBody? Так же намного лучше и легче)

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว +1

      Здравствуйте. Использование «RigidBody» понадобится для других скриптов. Рассказываем в следующих видео курса по ссылке: clck.ru/36Nnmt

    • @fronzayy
      @fronzayy 8 หลายเดือนก่อน

      ахахха для этого такое использовать? лишняя нагрузка

    • @МаксимРадюш-ч6т
      @МаксимРадюш-ч6т 8 หลายเดือนก่อน +1

      @@fronzayy нет, неправда. Лучше взять character controller, и не писать лишней хуйни

    • @fronzayy
      @fronzayy 8 หลายเดือนก่อน

      @@МаксимРадюш-ч6т хаах чувак, тебе тут character controller зачем нужен? во первых character controller даёт больше нагрузку, с трансформ позишн производительность лучше это как минимум. во вторых ты бред несёшь, для трансформ позишн это одна строчка кода маленькая, для Character Controller 3-4 строчки

    • @МаксимРадюш-ч6т
      @МаксимРадюш-ч6т 8 หลายเดือนก่อน

      @@fronzayy пиздец, нихуя cc не даёт нагрузку, а если даёт, то такую мизерную, на которую абсолютно поебать, и тебе сука лень написать эти 3 строчки кода? Сразу видно, челик не разбирается

  • @user-oz2eg7zr2c
    @user-oz2eg7zr2c 2 ปีที่แล้ว +1

    Если у нас в коде управление мышью, то как пользователь будет играть в мобильной версии игры?

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว

      Егор, добрый день. В играх с поддержкой нескольких устройств необходимо настроить адаптивное управление в зависимости от платформы пользователя. На десктопе оно должно осуществляться с помощью мыши и/или клавиатуры, на мобильных - жестами и/или с использованием акселерометра.
      Чтобы определять устройство игрока и автоматически менять управление, рекомендуем использовать метод ysdk.deviceInfo. Инструкция по настройке в Руководстве разработчика: clck.ru/33oU7R

  • @shushmek3310
    @shushmek3310 9 หลายเดือนก่อน

    А как насчёт cinemaMashin в юнити?

    • @yagamesdev
      @yagamesdev  9 หลายเดือนก่อน

      Здравствуйте. «Cinemachine» можно использовать, но в этом проекте он не понадобился. Рекомендуем добавлять в игру то, что поможет улучшить её без увеличения потребляемой мощности компьютера.

  • @Studio-ql6fo
    @Studio-ql6fo ปีที่แล้ว

    Подскажите, я создаю пустой объект, вставляю в него камеру и пустой объект автоматически соединяется с камерой. Что не так делаю?

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว

      Здравствуйте. Всё верно, если создавать пустой объект и добавлять на него камеру, они будут автоматически соединяться.

  • @nekto2436
    @nekto2436 2 ปีที่แล้ว +1

    что делать если пустой объект "player" не двигается вместе с персонажем а стоит на месте ?

    • @meosart1758
      @meosart1758 2 ปีที่แล้ว +1

      Объект 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

  • @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

  • @daniilv7639
    @daniilv7639 ปีที่แล้ว

    Здравствуйте! Почему на 14:43 мы можем прибавлять к _eulerY значение, если эта переменная не инициализирована?

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว

      Здравствуйте. На момент прибавления значения переменная _eulerY инициализирована на 10 строке.

    • @daniilv7639
      @daniilv7639 ปีที่แล้ว +1

      @@yagamesdev В 10 строчке просто переменная объявлена как "private float _eulerY;", но значение не присвоено. Не понимаю, объясните пожалуйста)

    • @DIY-PropaCarlo
      @DIY-PropaCarlo ปีที่แล้ว

      ей по умолчанию присвоен ноль@@daniilv7639

    • @mamas111
      @mamas111 7 หลายเดือนก่อน

      @@daniilv7639 Числовые типы при объявлении по умолчанию имеют значение "0".
      Подробнее
      Значения по умолчанию типов C# (справка по C#)

  • @taliondocoto6686
    @taliondocoto6686 11 หลายเดือนก่อน

    Я выбрал 3D Icons но у меня значки не отображаются.

    • @yagamesdev
      @yagamesdev  11 หลายเดือนก่อน +1

      Здравствуйте. Такое бывает, если вы не активировали Gizmo - визуально его меню похоже на 3D сферу с точками. Подробнее по ссылке: clck.ru/36soGW

  • @kerofx
    @kerofx ปีที่แล้ว +1

    Помогите, пожалуйста. У меня во время вращения персонаж очень сильно крутится, при этом перемещаясь по окружности. Как можно сделать так, чтобы он крутился только на месте

    • @Ritme
      @Ritme ปีที่แล้ว +3

      возможно у тебя 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

  • @-_tip_-7046
    @-_tip_-7046 ปีที่แล้ว

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

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว

      Здравствуйте. Дело может быть в методе Update - если поворот персонажа прописан с его помощью, то он может меняться в зависимости от устройства. Рекомендуем использовать метод FixedUpdate(). Тогда движение персонажа будет происходит на основании заданной величины.

  • @oldborodach
    @oldborodach ปีที่แล้ว

    Так немного не понял ✅
    1. У меня не трясся персонаж закинул своего ☝ почему Unity 2023.1.12f1
    2. Не увидел разницы между между 👉❗👈 тем что скрипт весит на камере пустого объекта и без него 🧐🤔 почему все тоже самое.
    Грубо говоря ☝ создал я пустой объект закинул туда как дочерний камеру и выставил её как надо 🤔 а скрипт тогда зачем если все так же работает?

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว

      Здравствуйте. Ответим на всё по порядку:
      1. Тряска персонажа может быть заметней из-за разницы в FPS, а также при более низкой частоте кадров.
      2. Не рекомендуем добавлять камеру в дочерний объект Player. Дело в том, что если игру расширить и добавить препятствия, которые могут нейтрализовать игрока - камера тоже уничтожится. Также это повлияет на возможность реализовать плавность камеры.

  • @de43gy
    @de43gy 2 ปีที่แล้ว +1

    Не понял, зачем камере скрипт.
    Она уже следует за челом, как ее добавляем в объект Player

    • @Невходить-н2н
      @Невходить-н2н 2 ปีที่แล้ว +3

      Она слишком жёстко привязана к игроку будет. Будет поворачиваться за ним при повороте игрока, не получится реализовать плавное перемещение и т.п. В некоторых случаях это важно, поэтому лучше скриптить

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว +1

      Константин, здравствуйте. Как уже подсказали, скрипт движения камеры добавляется, чтобы она не была привязана только к объекту Player. Это помогает сделать повороты камеры более плавными.

  • @ZirKino
    @ZirKino ปีที่แล้ว

    А как сделать также только на клавиатуре?

    • @ARAB-nj4rx
      @ARAB-nj4rx ปีที่แล้ว +2

      Я бы сделал так:
      Объявляем в начале (до методов 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);

  • @Rom4ikRu
    @Rom4ikRu 9 หลายเดือนก่อน

    У меня ничего не работает( Я уже день сижу переделываю... Я даже код скопировал от готовой работы, ничего не поменялось. Может мне какой то параметр поменять?

    • @nigahon5070
      @nigahon5070 5 หลายเดือนก่อน

      скрипт на папку пустую с персонажем перекинь

  • @koloskov_pavel
    @koloskov_pavel 2 ปีที่แล้ว +1

    Почему у меня камера поворачивается в сторону, в которую смотрит персонаж? У вас камера идет за персом, а у меня + поворачивается

    • @gamerovn5229
      @gamerovn5229 2 ปีที่แล้ว

      Объект CameraCenter нужно вытащить из объекта Player, чтобы он стоял отдельно.

    • @koloskov_pavel
      @koloskov_pavel 2 ปีที่แล้ว

      @@gamerovn5229 понял, спасибо

  • @goosesuka
    @goosesuka ปีที่แล้ว

    camera.position = transform.position + new Vector3(0, 2.5f, -2.3f); я её прилепил как в предыдущем и не дёргалось ничего

    • @themachine9329
      @themachine9329 ปีที่แล้ว

      сказано же было что может просто повести

  • @roiz5204
    @roiz5204 ปีที่แล้ว

    Камера за персонажем не двигается, в чем может быть причина ?

    • @Кекс-р8н
      @Кекс-р8н ปีที่แล้ว

      Проверь,накинул скрипт камерамув на камеру центр
      И еще проверь накинул на таргет плеера

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว

      Здравствуйте. Попробуйте, пожалуйста, добавить на камеру скрипт CameraMove и перенести Player в поле Target скрипта CameraMove - должно помочь.

  • @Владислав-э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 ปีที่แล้ว +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 спасибо.

  • @nigahon5070
    @nigahon5070 5 หลายเดือนก่อน

    у меня мозги закипели с этим положением мышки

  • @mikhailserfinger7564
    @mikhailserfinger7564 ปีที่แล้ว

    В ролике во время 21:33 на объекте Player создается пустой объект CameraCenter, который является подчиненным для объекта Player.
    Во время 21:51 на объект CameraCenter переносится MainCamera. При этом объект CameraCenter непонятно каким образом уходит из под объекта Player и становится с ним одинаковым в иерархии. Дальше везде CameraCenter является одинаковым в иерархии по отношению к объекту Player.
    В чем тут смысл? Почему надо создавать объект CameraCenter подчиненным объекту Player вместо того, чтобы сразу не создать объект CameraCenter на пустом месте?

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว

      Здравствуйте. Объект «CameraCenter» создаётся в объекте «Player» для того, чтобы сменить глобальные координаты на те, которые будут находиться внутри игрока. «MainCamera» используется для того, чтобы стать дочерним объектом - он всегда следует за родителем.

  • @РемонтКитайскихГаджетов

    +1

  • @nealeks
    @nealeks ปีที่แล้ว

    У меня перс просто вместо того чтобы смотреть вперед смотрит назад

    • @yagamesdev
      @yagamesdev  ปีที่แล้ว

      Здравствуйте. Обычно так случается, если объекты на сцене повёрнуты в другом направлении. Если персонаж «Man» также двигается в обратную сторону, нужно развернуть все объекты на сцене - это должно помочь.

  • @Games2Dev
    @Games2Dev หลายเดือนก่อน +1

    Не очень понял зачем на камеру вешать скрипт с апдейтом? Может просто сделать камеру дочерним объектом игрока и она автоматом будет следовать за персонажем без всяких апдейтов?

  • @igorcoolman
    @igorcoolman ปีที่แล้ว

    у меня трансформ позицион меняется примерно так 0.00137952 и движения не видно это потому что + перед = забыл поставить +=))

  • @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 ปีที่แล้ว +2

      @@rovshanbadirkhanov Игрок это обычный объект и Юнити его просто перемещает по сцене. Юнити для обработки физической симуляции использует физический движок nvidia PhysX, а он начинает работать когда на объект добавляешь физический компонент например Rigidbody и его движок начинает обрабатывать. А в данной игре у нас нет физических компонентов)

    • @rovshanbadirkhanov
      @rovshanbadirkhanov 2 ปีที่แล้ว

      @@КтоТо-х6ь6ь Аа, терпеть более менее понятно, спасибо)

    • @youpubeqwer
      @youpubeqwer 11 หลายเดือนก่อน

      @@КтоТо-х6ь6ь Сколько раз в секунду Time.deltaTime ?

  • @ihabia
    @ihabia ปีที่แล้ว +1

    Странно, но у меня почему то нет никаких дерганий камеры, как в уроке, без LateUpdate нормально работает.

    • @themachine9329
      @themachine9329 ปีที่แล้ว +1

      сказали же что может повести

  • @haryz846
    @haryz846 9 หลายเดือนก่อน

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