Игровой движок 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
если 100 * 0,01 = 10000 матика!
Это я так сказал? Блет. На каком моменте???
Ты такого не говорил ты просто перменную rot_y * ROT(она ровна 0.01) ожидал что камера будет двиться медленьней
это если разделить
если делить будет 1, а ели умножить, 10000
Да вы серьезно что ли?
Ух, спасибо! Хоть и переписал почти под копирку, но теперь хоть базовое управление персонажем есть, при относительно небольшом скрипте, я сколько мануал не читал, так сам и не смог написать адекватное управление с физикой.
Спасибо за то, что видео теперь выходят регулярно.
Дружище ты лучше любого профессора в институте!!!!!!! Благодарю!!!!!
Спасибо за такие уроки я очень рад что есть такие люди😉
10:20 Чтобы не было накопления, достаточно ведь каждый раз переприсваивать переменным rot_y и rot_x соответствующие значения, т.е. поменять += на =
Классный урок! Ваши видео мотивируют.
Спасибо за уроки по Godot!
Спасибо, парень. Теперь я и моя команда сможем наконец сделать игру.
Ты превосходен! Спасибо :)
Автор лучший побольше бы таких . Кто обьеснит чтото на человеческом языке
Вот скрипт камеры из ролика:
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)
Но ролик всё равно посмотрите что бы понять как она работает.
Хелп камера не работает
Спасибо
Отличный урок, спасибо. Но из за этих гачи ремиксов не могу без смеха слушать слово кам)
тоже
А мне понравился урок, в одном видео создали полностью управление для персонажа где можно уже модернизировать и добавить прокачку, двойной прыжок, скорость и тд.
По поводу вращения камеры, можно обойтись и без базиса. Вот код:
#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)
Есть несколько вопросов.
1) зачем вообще нужен узел сцены "cam" в первом варианте камеры? почему нельзя обойтись просто камерой?
2) почему мы не можем обойтись просто rotation.y, а должны использовать basis?
3) 14:40 почему бы не использовать *rot_x = clamp(rot_x, -PI/2, PI/2)*
4) 16:47 зачем вложенная проверка, если можно объединить условия в одно?
Кстати, с Новым Годом тебя!
1.) Можно сказать это универсальный ответ на многие вопросы. С помощью "cam", можно указать дополнительный угол поворота камеры.
2.) Возможно Basis более простой вариант в расчете. (Оптимизация)
3.) Просто ошибка автора. Я сам пользуюсь именно Clamp.
Чувствуется, что Вы уже в годоте, как рыба в воде.
Неплохо бы ещё общий урок по всем этим векторам. И их использование в годоте.
Спасибо
Если что, mouse mod в godot 4 тепер так:
func _ready():
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
Спасибо. Прошу урок по ноде GridMap. У меня там текстуры глючат)
Привет! Урок отличный! ЛАЙК!!!! Хотелось бы научиться переключать камеры от первого и от третьего лица. Спасибо...
Я бы посоветовал для поворотов вокруг векторов, совпадающих с основными направлениями, использовать константы вроде Vector3.UP и другие. Для ограничения числа, например поворота, в рамках от одного значения до другого можно использовать встроенную функцию clamp(). А вообще, хороший FPS-контроллер - это довольно сложная тема.
Невозможно! ВСЕ ВАЖНЫЕ ЧАСТИ ГАЙДА РАЗДРОБЛЕННЫ ПО ДРУГИМ ВИДОСАМ, А КОГДА ОБРАЩАЕШЬСЯ К НИМ ОНИ ОТСЫЛАЮТ НА СЛЕДУЮЩИЙ ВИДОС
Здравствуй,я бы хотел посмотреть серию видео как ты сделаешь простенькую выживалку в гадоте
skaner заюзал мэйд ин хэвэн
Мы явно поладим)
Помогите, мне пишет Function "move_and_slide()" not found in base self
Godot 3.5.1 чето Input.set_mouse_mode в автодополнении не находит
Большое спасибо помог
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)"
@@mizabmdgg я просто взял готовый шаблон
А как создать cam бл ти не мог показать
rotate_y > Все повороты работают
transform.Basis > Камера просто поворачивается к нулю
А прибавлять к координате Cam x или Cam y не дает
Второй путь для камеры это кодом что ле? (помимо скорости)
А вот мне нужна помощь не могу понять 4:17 я переписал 29 строчку как у вас но у меня выдоет ошибку очень нужно понять в чем ошибка
А где в коде у нас вызывается функция input(e)? Подзабыл немного GDscript и что-то не совсем ясна логика работы такого кода. Насколько я помню еще перед инициализацинй сцены выполняется функция ready, и уже потом бесконечно выполняется функция process(delta).
Рекомендую посмотреть плейлист по GDScript, одно из последних видео там как раз про системные события. Это функция обработчик вызывается системой.
проблема, когда стою на месте и нажимаю влево или вправо или назад то персонаж двигается относительно глобальным координатам а не камеры, но когда я в движении жму влево или вправо то все ок
if rot_x < -PI/2: rot_x = -PI/2
elif rot_x > PI/2: rot_x = PI/2
Радианы же!
Один фиг получишь единицу с половиной) Так шо необязательно еще и пи делить) Проще границы самому установить и в коде записать числа)
Так красивше! По фен шую 😎
PI = 3.14... 3.14 / 2 = 1,57
почему у меня вот в этой строке dir = dir.rotated(Vector3(0,1,0), rotation.y)
метод rotated не на ходится в спске автодополнения
Все круто, только курсор не пропадает почему то
the identifier vel isn't declared in the current scope
Я сделал всё точно также, но игрок не двигается туда куда смотрит камера
Ребят, такая проблема
Вверх и вниз камера двигается очень быстро
А как назначить смену видо на кнопки и сочитание клавиш ?
Хочу просто назначить вид от третьего лица на Shift а на Shift+ПКМ вид от первого лица
а почему у меня базис не кликабельный
Identifier "rot_y" is not declared in the curent scope...
ты переменную создать забыл (var rot_y = 0)
Привет, такой вопрос у меня, я поворачиваю своего персонажа с помощью InputEventMouseMotion, сам объект поворачивается, но ходит он по глобальной координате, а не относительно своих координат, как исправить?
Если вид от первого лица - смотреть видео полностью.
Если от третьего, вам сюда: ruclips.net/video/q1zzOlQfjh4/видео.html
@@SkanerSoft Это я знаю, но мне интересно, почему если объект поворачивается, то после он движется не по своим координатам, а по глобальным
А я в видео не сказал?
@@SkanerSoft Может я мимо ушей пропустил, но помогло мне
"if Input.is_action_pressed("W"):
dir -= transform.basis.z;
Если оставить dir.z = -1; он по глобальным координатам движется :(
как выделить персонажа мышкой и указать мышкой куда ему перемещаться
можно исходник, пожалуйста?
Делаю движение камеры все как в видео, но у меня не чего не двигается
А почему на ruclips.net/video/-wBBEmq8ku0/видео.html выдает ошибку get_node: (Node not found: "cam" (relative to "/root/Spatial/KinematicBody").), но cam есть?
Я пытаюсь повернуть А у меня он не поворачивается
почему-то не работает гравитация и прыжок
при этом скрипте мой персонаж почему-то проваливается сквозь землю.Что делать?
почему-то при прыжке я падаю только в том случае , если двигаюсь(wasd) .
возможно это потому что в настройках скрипта я не поставил "встроенный скрипт
"
нет , не по этому.
Что за музыка на 4:00 минуте ?
Я ВСЁ СДЕЛАЛ ПРАВИЛЬНО НО ОН У МЕНЯ НЕ ХОДИТ ошибки не показывает типо все ок НО НЕ ОК
На моменте с бесконечным прыжком решил попытаться исправить проблему сам - мучился полчаса с рейкастом из жопы, а оказалось что всё уже давно реализовано в API ._.
а где это API?
Понимаю,что вопрос,возможно,покажется глупым,но не могу не задать.
Упускаю вот какой момент.
Если объект "Player" находится внутри объекта "сцены" ,он там нормально "живет". Т.е. как положено,реагирует на скрипт.
Стоит его вынести как отдельную сцену, "Player" не реагирует ни на что.
P.S. В узел "сцены" переношу.
Позже в видео это решается) И довольно просто)
@@SkanerSoft видимо не конкретно в этом видео))Возможно я просто не умею правильно задавать вопросы по материалу в котором вообще не разбираюсь)Но спасибо,я обязательно пересмотрю еще раз(точнее много раз)Ваши уроки!)
Имел ввиду в следующих видео) Всё хорошо, спасибо за комментарии)
Сканер у меня одна проблема "Когда я написал код для прыжка и проверил у меня player полетел вверх" как это исправить?
Вот тут можно подглядеть. Там есть узел с управлением от первого лица.
godot-engine.ru/?sources:nodes
@@SkanerSoft не получается камеру сделать от 1 лица , пишет ошибка в _input
Можно ли на нём делать кат-сцены?
На втором канале всякие эксперименты на движке
очень маленькое видео
Блин... Я слишком глуп для этого движка, хотя с Анриал такого не замечалось. Помогите кто-то, а то откажусь от этого движка, так как даже самая простая игра что я мог решить написать не работает... Кто поможет, отправлю файлы гляньте, подскажите пожалуйста!
Здравствуйте, помогите как мне добавить обэкт cam 1:14
это просто нода 3d
Извини конечно твой урок мне немного помог НО! ты мог код оставить в описании я до сих пор не могу его переписать!
Зайди на сайт godot-engine.ru
@@SkanerSoft,где там можно найти готовые скрипты?
Это шутка такая? Там в меню так и написано "ИСХОДНИКИ"
Зря музло добавил :D
Что-то я сделал всё по инструкции, а ничего не работает...
Если бы делал всё по видео, то всё бы работало
@РУССКАЯ ВОДКА Там у вас код не работает или... локация?
@РУССКАЯ ВОДКА Модель должна экспортироватся без текстур. Текстуры нужно накладывать отдельно в движке.
Код у него рабочий, пытайтесь разбирайтесь, если что задавай'те вопросы.
Скиньте скрипт пожалуйста
Камера не шевелиться что делать?
Уже ответил в одном комментарии) Плейлист Хоррор в помощь!
Что то персонаж у меня слишком резко подпрыгивает, а падает плавно. А на видео все плавно. На дельту умножал, нет разницы.
Слишком резко подпрыгивает это значит что он телепортируется?
@@istpmncrft, скрипт описывает импульс прыжка с вычетом гравитации. Телепорта не может быть.
@@Alex_Forest ну тогда объясни как это происходит
@@Alex_Forest может очень быстро прыгает вверх и и плавно падает?
@@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, получается не то, что нужно. Либо тело стоит на месте, ему не хватает импульса для прыжка. Либо мгновенно подпрыгивает. Скрипт я переписал с видео.
почему когда я прыгаю я улетаю в космос?
Причины без кода понять невозможно. Универсальное решение - проверь как меняется переменная, с которой что-то не то, от первой до последней строчки кода, отслеживая значение.
не работает
Создайте джостик
Как тут все сложно. да еще код самому надо писать. есть уже намного лучше и проще уроки как сделать камеру от первого лица
так зачем этот смотришь?
+
123123