Игровой движок Godot Engine 3D Камера от первого лица FPS Camera in Godot Engine. Godot 3D

Поделиться
HTML-код
  • Опубликовано: 21 окт 2024
  • Мои игры в Google Play - play.google.co...
    Мои игры на Yandex Games - yandex.ru/game...
    Мои игры в App Store - apps.apple.com...
    Все мои игры на Godot - pn.studio ВАЖНО! ВСЕ НОВЫЕ МАТЕРИАЛЫ БУДУТ ВЫХОДИТЬ НА ЯНДЕКС ДЗЕН
    y2u.ru?zen
    | -- СПАСИБО -- | #Godot3D #GodotEngine #Godot Побочка: skanersoft.ru
    - - - - - - - -
    В этом видео я решил разобрать тему камеры от первого лица в Godot Engine. Полистав документацию, я понял, что реализация такой камеры дело довольно простое, и новички смогут понять это без особых усилий, а значит, стать ближе к разработке игры своей мечты!
    Друзья, поддерживать канал и скачивать исходники вы можете на сервисе по поддержке творческих проектов Patreon: goo.gl/rGBT1L
    Все Патроны смотрят видео раньше других, без рекламы и с исходниками! + ответы на вопросы в конце каждого видео!
    Сотрудничество: goo.gl/cbMSz3
    === ИНФОРМАЦИЯ ===
    График выхода уроков: onjs.ru
    Патреон: goo.gl/rGBT1L
    Канал на RUclips: goo.gl/fpOJLf
    Наш чат в Discord: / discord
    Группа ВК: skaner.soft
    Инстаграм: / skanersoft
    Автор идеи и ведущий: skaner.game
    Партнерская программа: goo.gl/dnLFNR
    === ТЕХНОЛОГИИ ===
    Операционная система: Ubuntu 18.04
    Запись видео: OBS
    Обработка звука: Audacity
    Монтаж: KDEnlive
    Музыку можно найти в группе ВКонтакте
    GitHub с некоторыми проектами (исходники НЕ ВСЕ там): github.com/Ska...
    === ПЛЕЙЛИСТЫ ===
    GDScript Book (обучение GDScript)
    • GDScript Book - изучен...
    Создание игр на Godot Engine
    • Playlist
    Написание игр и приложений на NW.js
    • Playlist
    Основы создания игр на JavaScript с нуля + интересные решения для ваших игр
    • Создание игр на JavaSc...
    Интересные решения на JavaScript
    • Playlist
    Истории игровых движков
    • История движка
    Создание "арканоида" на чистом JavaScript с нуля
    • Как создать Arkanoid н...
    Создание 3D игр на C++
    • Playlist
    Программирование в Lazarus
    • Playlist
    Теги для поиска моих видео - #SkanerSoft и #Skaner
    Друзья, копипаст должен быть адекватным! #ЗаЗдоровыйКод
    Так же, теперь видео можно искать по тегам: #GodotEngine #GodotLessons и #SkaneLikerGodot
    -- добавлено в 2020 году --
    ДРУГ, ПОДДЕРЖИ ПРОЕКТ!
    PATREON - / skaner
    БУСТИ - boosty.to/game3d
    RUclips - / @skanersoft

Комментарии • 124

  • @bogdan_ov
    @bogdan_ov 5 лет назад +14

    если 100 * 0,01 = 10000 матика!

    • @SkanerSoft
      @SkanerSoft  5 лет назад +3

      Это я так сказал? Блет. На каком моменте???

    • @bogdan_ov
      @bogdan_ov 5 лет назад +1

      Ты такого не говорил ты просто перменную rot_y * ROT(она ровна 0.01) ожидал что камера будет двиться медленьней

    • @ruslanbogatyrew4790
      @ruslanbogatyrew4790 4 года назад +3

      это если разделить

    • @protokol_223
      @protokol_223 4 года назад +2

      если делить будет 1, а ели умножить, 10000

    • @SkanerSoft
      @SkanerSoft  4 года назад +4

      Да вы серьезно что ли?

  • @Koloyojik
    @Koloyojik 5 лет назад +9

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

  • @physchemistTI
    @physchemistTI 5 лет назад +6

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

  • @gamestuff9870
    @gamestuff9870 3 года назад +1

    Дружище ты лучше любого профессора в институте!!!!!!! Благодарю!!!!!

  • @sedfollproduction8644
    @sedfollproduction8644 3 года назад +2

    Спасибо за такие уроки я очень рад что есть такие люди😉

  • @Mrguest69
    @Mrguest69 4 года назад +6

    10:20 Чтобы не было накопления, достаточно ведь каждый раз переприсваивать переменным rot_y и rot_x соответствующие значения, т.е. поменять += на =

  • @whitestorm_ut
    @whitestorm_ut 4 года назад +3

    Классный урок! Ваши видео мотивируют.

  • @droatom
    @droatom 5 лет назад +8

    Спасибо за уроки по Godot!

  • @drake7304
    @drake7304 Год назад +1

    Спасибо, парень. Теперь я и моя команда сможем наконец сделать игру.

  • @Igorrreha
    @Igorrreha 5 лет назад +5

    Ты превосходен! Спасибо :)

  • @razdywert-wz7fd
    @razdywert-wz7fd 9 месяцев назад

    Автор лучший побольше бы таких . Кто обьеснит чтото на человеческом языке

  • @sergeysherman5876
    @sergeysherman5876 5 лет назад +12

    Вот скрипт камеры из ролика:
    extends KinematicBody
    const ROT = 0.01
    const Gr = -20
    const SPEED = 120
    const J_SPEED = 10
    var vel=Vector3()
    var rot_x=0
    var rot_y=0
    func _ready():
    Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
    func _physics_process(delta):
    var dir=Vector3()
    if Input.is_action_just_pressed('ui_cancel'):
    get_tree().quit()
    if Input.is_action_pressed('ui_left'):
    dir.x = -1
    if Input.is_action_pressed('ui_right'):
    dir.x = 1
    if Input.is_action_pressed('ui_down'):
    dir.z = 1
    if Input.is_action_pressed('ui_up'):
    dir.z = -1
    if dir:
    dir *= SPEED * delta
    dir = dir.rotated(Vector3(0,1,0), rotation.y)
    vel.x = dir.x
    vel.z = dir.z
    if Input.is_action_just_pressed('ui_select'):
    if is_on_floor():
    vel.y = J_SPEED
    vel.y += Gr * delta
    vel = move_and_slide(vel, Vector3(0,1,0))
    func _input(e):
    if e is InputEventMouseMotion:
    rot_y -= e.relative.x * ROT
    rot_x -= e.relative.y * ROT
    if rot_x < -PI/2: rot_x = -PI/2
    elif rot_x > PI/2: rot_x = PI/2
    transform.basis = Basis(Vector3(0,1,0), rot_y)
    $Camera.transform.basis = Basis(Vector3(1,0,0), rot_x)
    Но ролик всё равно посмотрите что бы понять как она работает.

  • @МатвейТемников-у9ы
    @МатвейТемников-у9ы 4 года назад +2

    Отличный урок, спасибо. Но из за этих гачи ремиксов не могу без смеха слушать слово кам)

  • @DodgerEcho
    @DodgerEcho Год назад

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

  • @HavingTeam
    @HavingTeam 4 года назад +6

    По поводу вращения камеры, можно обойтись и без базиса. Вот код:
    #ROT = 0.003
    rot_y = e.relative.x * ROT
    rot_x = e.relative.y * ROT
    rotate(Vector3(0,1,0), -rot_y)
    $cam.rotate(Vector3(1,0,0), -rot_x)
    if (abs($cam.rotation.x) > 1):
    $cam.rotation.x = 1 * sign($cam.rotation.x)

  • @FoxSlyme
    @FoxSlyme 4 года назад +2

    Есть несколько вопросов.
    1) зачем вообще нужен узел сцены "cam" в первом варианте камеры? почему нельзя обойтись просто камерой?
    2) почему мы не можем обойтись просто rotation.y, а должны использовать basis?
    3) 14:40 почему бы не использовать *rot_x = clamp(rot_x, -PI/2, PI/2)*
    4) 16:47 зачем вложенная проверка, если можно объединить условия в одно?
    Кстати, с Новым Годом тебя!

    • @renamed_user1703
      @renamed_user1703 4 года назад

      1.) Можно сказать это универсальный ответ на многие вопросы. С помощью "cam", можно указать дополнительный угол поворота камеры.
      2.) Возможно Basis более простой вариант в расчете. (Оптимизация)
      3.) Просто ошибка автора. Я сам пользуюсь именно Clamp.

  • @НеизвестныйЯ-г4ь
    @НеизвестныйЯ-г4ь 5 лет назад +3

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

  • @SanyaSanyavich
    @SanyaSanyavich 5 лет назад +5

    Спасибо

  • @ВадимТимошин-ш7ъ
    @ВадимТимошин-ш7ъ 7 месяцев назад +4

    Если что, mouse mod в godot 4 тепер так:
    func _ready():
    Input.mouse_mode = Input.MOUSE_MODE_CAPTURED

  • @diver2048
    @diver2048 5 лет назад +3

    Спасибо. Прошу урок по ноде GridMap. У меня там текстуры глючат)

  • @РоманЖариков-з6з
    @РоманЖариков-з6з 5 лет назад +1

    Привет! Урок отличный! ЛАЙК!!!! Хотелось бы научиться переключать камеры от первого и от третьего лица. Спасибо...

  • @JohnSmith-mr6wp
    @JohnSmith-mr6wp 4 года назад

    Я бы посоветовал для поворотов вокруг векторов, совпадающих с основными направлениями, использовать константы вроде Vector3.UP и другие. Для ограничения числа, например поворота, в рамках от одного значения до другого можно использовать встроенную функцию clamp(). А вообще, хороший FPS-контроллер - это довольно сложная тема.

  • @SAM-LISBETH
    @SAM-LISBETH 4 года назад +4

    Невозможно! ВСЕ ВАЖНЫЕ ЧАСТИ ГАЙДА РАЗДРОБЛЕННЫ ПО ДРУГИМ ВИДОСАМ, А КОГДА ОБРАЩАЕШЬСЯ К НИМ ОНИ ОТСЫЛАЮТ НА СЛЕДУЮЩИЙ ВИДОС

  • @whiteshum5496
    @whiteshum5496 5 лет назад +3

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

  • @BARNY509
    @BARNY509 4 месяца назад

    skaner заюзал мэйд ин хэвэн

  • @Igorrreha
    @Igorrreha 5 лет назад

    Мы явно поладим)

  • @tortphonk
    @tortphonk 2 месяца назад

    Помогите, мне пишет Function "move_and_slide()" not found in base self

  • @en_li_85
    @en_li_85 2 года назад +1

    Godot 3.5.1 чето Input.set_mouse_mode в автодополнении не находит

  • @VAINTUBER0608
    @VAINTUBER0608 3 года назад

    Большое спасибо помог

  • @mizabmdgg
    @mizabmdgg 7 месяцев назад

    14:30 есть ещё более изящный способ ограничить поворот камеры по оси Х "
    rot_x -= e.relative.y * (ROT / 100) # я пошел немного иным путём и делю на 100 чтоб я мог указывать 0.2 или 1 а не 0.02 или что то подобное
    rot_y -= e.relative.x * (ROT / 100)
    rot_x = clamp(rot_x,-1,1.2)"

    • @RustER277
      @RustER277 2 месяца назад

      @@mizabmdgg я просто взял готовый шаблон

  • @sokoldolg
    @sokoldolg 14 дней назад +1

    А как создать cam бл ти не мог показать

  • @apanda1128
    @apanda1128 3 года назад

    rotate_y > Все повороты работают
    transform.Basis > Камера просто поворачивается к нулю
    А прибавлять к координате Cam x или Cam y не дает

  • @projectBP
    @projectBP 3 года назад

    Второй путь для камеры это кодом что ле? (помимо скорости)

  • @ДелайСам-э8ь
    @ДелайСам-э8ь 4 года назад +1

    А вот мне нужна помощь не могу понять 4:17 я переписал 29 строчку как у вас но у меня выдоет ошибку очень нужно понять в чем ошибка

  • @Mrguest69
    @Mrguest69 4 года назад

    А где в коде у нас вызывается функция input(e)? Подзабыл немного GDscript и что-то не совсем ясна логика работы такого кода. Насколько я помню еще перед инициализацинй сцены выполняется функция ready, и уже потом бесконечно выполняется функция process(delta).

    • @SkanerSoft
      @SkanerSoft  4 года назад +2

      Рекомендую посмотреть плейлист по GDScript, одно из последних видео там как раз про системные события. Это функция обработчик вызывается системой.

  • @gamma_game4523
    @gamma_game4523 4 года назад +1

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

  • @damascake
    @damascake 5 лет назад +2

    if rot_x < -PI/2: rot_x = -PI/2
    elif rot_x > PI/2: rot_x = PI/2
    Радианы же!

    • @SkanerSoft
      @SkanerSoft  5 лет назад +1

      Один фиг получишь единицу с половиной) Так шо необязательно еще и пи делить) Проще границы самому установить и в коде записать числа)

    • @damascake
      @damascake 5 лет назад

      Так красивше! По фен шую 😎

    • @bogdan_ov
      @bogdan_ov 5 лет назад

      PI = 3.14... 3.14 / 2 = 1,57

  • @en_li_85
    @en_li_85 2 года назад

    почему у меня вот в этой строке dir = dir.rotated(Vector3(0,1,0), rotation.y)
    метод rotated не на ходится в спске автодополнения

  • @micro_web
    @micro_web Год назад

    Все круто, только курсор не пропадает почему то

  • @ianordinary
    @ianordinary 5 месяцев назад

    the identifier vel isn't declared in the current scope

  • @walterwhiteheisenberg554
    @walterwhiteheisenberg554 7 месяцев назад

    Я сделал всё точно также, но игрок не двигается туда куда смотрит камера

  • @sdw9314
    @sdw9314 4 года назад +1

    Ребят, такая проблема
    Вверх и вниз камера двигается очень быстро

  • @maxkurczak5743
    @maxkurczak5743 2 года назад

    А как назначить смену видо на кнопки и сочитание клавиш ?
    Хочу просто назначить вид от третьего лица на Shift а на Shift+ПКМ вид от первого лица

  • @MafiaRalsei
    @MafiaRalsei 3 месяца назад

    а почему у меня базис не кликабельный

  • @alonewalker4522
    @alonewalker4522 5 лет назад +1

    Identifier "rot_y" is not declared in the curent scope...

    • @mizabmdgg
      @mizabmdgg 7 месяцев назад

      ты переменную создать забыл (var rot_y = 0)

  • @oz669
    @oz669 4 года назад +1

    Привет, такой вопрос у меня, я поворачиваю своего персонажа с помощью InputEventMouseMotion, сам объект поворачивается, но ходит он по глобальной координате, а не относительно своих координат, как исправить?

    • @SkanerSoft
      @SkanerSoft  4 года назад

      Если вид от первого лица - смотреть видео полностью.
      Если от третьего, вам сюда: ruclips.net/video/q1zzOlQfjh4/видео.html

    • @oz669
      @oz669 4 года назад +1

      @@SkanerSoft Это я знаю, но мне интересно, почему если объект поворачивается, то после он движется не по своим координатам, а по глобальным

    • @SkanerSoft
      @SkanerSoft  4 года назад

      А я в видео не сказал?

    • @oz669
      @oz669 4 года назад +2

      @@SkanerSoft Может я мимо ушей пропустил, но помогло мне
      "if Input.is_action_pressed("W"):
      dir -= transform.basis.z;
      Если оставить dir.z = -1; он по глобальным координатам движется :(

  • @ВолодимирАндрусяк-в7ъ

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

  • @mibbleyt
    @mibbleyt 4 года назад +1

    можно исходник, пожалуйста?

  • @ЕвгенийПанафидин-я3ы

    Делаю движение камеры все как в видео, но у меня не чего не двигается

  • @frindge9633
    @frindge9633 2 года назад

    А почему на ruclips.net/video/-wBBEmq8ku0/видео.html выдает ошибку get_node: (Node not found: "cam" (relative to "/root/Spatial/KinematicBody").), но cam есть?

  • @MSTUDIO12345
    @MSTUDIO12345 5 месяцев назад

    Я пытаюсь повернуть А у меня он не поворачивается

  • @xcaelestisox7074
    @xcaelestisox7074 4 года назад

    почему-то не работает гравитация и прыжок

  • @CallMe848
    @CallMe848 5 лет назад

    при этом скрипте мой персонаж почему-то проваливается сквозь землю.Что делать?

  • @mdxx6691
    @mdxx6691 3 года назад

    почему-то при прыжке я падаю только в том случае , если двигаюсь(wasd) .
    возможно это потому что в настройках скрипта я не поставил "встроенный скрипт
    "

    • @mdxx6691
      @mdxx6691 3 года назад

      нет , не по этому.

  • @Laerat616
    @Laerat616 3 года назад

    Что за музыка на 4:00 минуте ?

  • @incorrect_composition
    @incorrect_composition 3 года назад

    Я ВСЁ СДЕЛАЛ ПРАВИЛЬНО НО ОН У МЕНЯ НЕ ХОДИТ ошибки не показывает типо все ок НО НЕ ОК

  • @TheArturZh
    @TheArturZh 5 лет назад

    На моменте с бесконечным прыжком решил попытаться исправить проблему сам - мучился полчаса с рейкастом из жопы, а оказалось что всё уже давно реализовано в API ._.

  • @gamehappens358
    @gamehappens358 5 лет назад

    Понимаю,что вопрос,возможно,покажется глупым,но не могу не задать.
    Упускаю вот какой момент.
    Если объект "Player" находится внутри объекта "сцены" ,он там нормально "живет". Т.е. как положено,реагирует на скрипт.
    Стоит его вынести как отдельную сцену, "Player" не реагирует ни на что.
    P.S. В узел "сцены" переношу.

    • @SkanerSoft
      @SkanerSoft  5 лет назад

      Позже в видео это решается) И довольно просто)

    • @gamehappens358
      @gamehappens358 5 лет назад

      @@SkanerSoft видимо не конкретно в этом видео))Возможно я просто не умею правильно задавать вопросы по материалу в котором вообще не разбираюсь)Но спасибо,я обязательно пересмотрю еще раз(точнее много раз)Ваши уроки!)

    • @SkanerSoft
      @SkanerSoft  5 лет назад

      Имел ввиду в следующих видео) Всё хорошо, спасибо за комментарии)

  • @mifi4794
    @mifi4794 4 года назад

    Сканер у меня одна проблема "Когда я написал код для прыжка и проверил у меня player полетел вверх" как это исправить?

    • @SkanerSoft
      @SkanerSoft  4 года назад

      Вот тут можно подглядеть. Там есть узел с управлением от первого лица.
      godot-engine.ru/?sources:nodes

    • @user-tw7mw8rf7l
      @user-tw7mw8rf7l 4 года назад

      @@SkanerSoft не получается камеру сделать от 1 лица , пишет ошибка в _input

  • @-tv1854
    @-tv1854 5 лет назад

    Можно ли на нём делать кат-сцены?

    • @SkanerSoft
      @SkanerSoft  5 лет назад +1

      На втором канале всякие эксперименты на движке

  • @FXIT25
    @FXIT25 Год назад

    очень маленькое видео

  • @konstantinkist
    @konstantinkist 4 года назад

    Блин... Я слишком глуп для этого движка, хотя с Анриал такого не замечалось. Помогите кто-то, а то откажусь от этого движка, так как даже самая простая игра что я мог решить написать не работает... Кто поможет, отправлю файлы гляньте, подскажите пожалуйста!

  • @oleksandrskachok7099
    @oleksandrskachok7099 3 года назад

    Здравствуйте, помогите как мне добавить обэкт cam 1:14

  • @yalomusic1585
    @yalomusic1585 4 года назад

    Извини конечно твой урок мне немного помог НО! ты мог код оставить в описании я до сих пор не могу его переписать!

    • @SkanerSoft
      @SkanerSoft  4 года назад

      Зайди на сайт godot-engine.ru

    • @yalomusic1585
      @yalomusic1585 4 года назад

      @@SkanerSoft,где там можно найти готовые скрипты?

    • @SkanerSoft
      @SkanerSoft  4 года назад

      Это шутка такая? Там в меню так и написано "ИСХОДНИКИ"

  • @ИгорьЛисимов
    @ИгорьЛисимов 8 месяцев назад

    Зря музло добавил :D

  • @LAB_3279
    @LAB_3279 4 года назад

    Что-то я сделал всё по инструкции, а ничего не работает...

    • @renamed_user1703
      @renamed_user1703 4 года назад

      Если бы делал всё по видео, то всё бы работало

    • @renamed_user1703
      @renamed_user1703 4 года назад

      @РУССКАЯ ВОДКА Там у вас код не работает или... локация?

    • @renamed_user1703
      @renamed_user1703 4 года назад

      @РУССКАЯ ВОДКА Модель должна экспортироватся без текстур. Текстуры нужно накладывать отдельно в движке.
      Код у него рабочий, пытайтесь разбирайтесь, если что задавай'те вопросы.

  • @lolik5821
    @lolik5821 3 года назад +1

    Скиньте скрипт пожалуйста

  • @user-tw7mw8rf7l
    @user-tw7mw8rf7l 4 года назад

    Камера не шевелиться что делать?

    • @SkanerSoft
      @SkanerSoft  4 года назад

      Уже ответил в одном комментарии) Плейлист Хоррор в помощь!

  • @Alex_Forest
    @Alex_Forest 4 года назад

    Что то персонаж у меня слишком резко подпрыгивает, а падает плавно. А на видео все плавно. На дельту умножал, нет разницы.

    • @istpmncrft
      @istpmncrft 4 года назад

      Слишком резко подпрыгивает это значит что он телепортируется?

    • @Alex_Forest
      @Alex_Forest 4 года назад

      @@istpmncrft, скрипт описывает импульс прыжка с вычетом гравитации. Телепорта не может быть.

    • @istpmncrft
      @istpmncrft 4 года назад

      @@Alex_Forest ну тогда объясни как это происходит

    • @istpmncrft
      @istpmncrft 4 года назад

      @@Alex_Forest может очень быстро прыгает вверх и и плавно падает?

    • @Alex_Forest
      @Alex_Forest 4 года назад

      @@istpmncrft Вот фрагмент скрипта прыжка
      ...const Gr = -20... # сила гравитации
      func _physics_process(delta):
      var vel = Vector3() ...
      if is_on_floor():
      vel.y = 1000 * delta
      # импульс по вектору
      vel.y += Gr * delta...
      Менял параметры Gr и vel.y, получается не то, что нужно. Либо тело стоит на месте, ему не хватает импульса для прыжка. Либо мгновенно подпрыгивает. Скрипт я переписал с видео.

  • @ПердолинРасфуфырев

    почему когда я прыгаю я улетаю в космос?

    • @aleksandersanya1817
      @aleksandersanya1817 3 года назад

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

  • @ROBLOX_76460
    @ROBLOX_76460 4 месяца назад

    не работает

  • @shoxsanamraimova439
    @shoxsanamraimova439 3 года назад

    Создайте джостик

  • @mahlos
    @mahlos 10 месяцев назад

    Как тут все сложно. да еще код самому надо писать. есть уже намного лучше и проще уроки как сделать камеру от первого лица

    • @live5531
      @live5531 8 месяцев назад

      так зачем этот смотришь?

  • @andvar344
    @andvar344 5 лет назад

    +

  • @amirkhanabishev
    @amirkhanabishev Год назад

    123123