КАК СДЕЛАТЬ ИГРУ. Часть 9. Враги НПС

  Рет қаралды 18,252

Mr. D

Mr. D

Күн бұрын

#Враги #GodotEngine #GodotУрокиНаРусском #РазработкаДляНачинающих #НПС
В этом уроке я покажу, как создать базовых врагов для игры. Они будут ходить по области и преследовать игрока.
Перед просмотром советую просмотреть весь цикл видео по созданию игры в Godot Engine: • КАК СДЕЛАТЬ ИГРУ. Част...
||=====================================||
Мой Facebook: / dasipos
Группа в VK: youtube...
||=====================================||

Пікірлер: 35
@Kamingos
@Kamingos 2 жыл бұрын
10:35 - очень важный момент, который помог мне (.normalized() превращает длину между точками в направление)
@ВиталийВоронов-ч3ь
@ВиталийВоронов-ч3ь Жыл бұрын
да очень полезно, хорошо запомнилось когда погуглил normalized и построил график вектора
@КостяАндреев-ь2к
@КостяАндреев-ь2к 2 жыл бұрын
Привет, не мог бы ты помочь? У меня движок выдаёт эту ошибку в твоём коде:"Invalid operands 'Vector2' and 'int' in operator '
@imohcfurry
@imohcfurry 2 жыл бұрын
ты случайно написал не distance_to, а direction_to
@jasonvoorhees8659
@jasonvoorhees8659 4 жыл бұрын
Отличные уроки, спасибо! По урокам делать легко, а когда хочешь сделать что то свое (в плане кода), наступает ступор. mrD посоветуй литературу/документацию что бы можно было с нуля свободно научится кодить в Gobot Engine. Есть опыт GML больше 7 лет там как рыба в воде, но это совсем разные языки.
@mr.d418
@mr.d418 4 жыл бұрын
Спасибо за поддержку!) docs.godotengine.org/ru/latest/getting_started/step_by_step/your_first_game.html Вот официальная документация языка - там есть и гайды, как сделать небольшие игры, и примеры использования функций, и просто справочник по функциям и узлам, очень была полезна в начале, и когда нужно найти конкретную функцию/узел. Много материалов я почерпнул на английском языке в Ютубе, поэтому я и начал выпускать свои уроки на русском)
@chel7400
@chel7400 8 ай бұрын
Когда написал участок кода, отвечающий за преследования игрока, то он не работал. Решил увеличить расстояние на котором враг обнаруживает игрока-теперь нпс движется наискосок за пределы карты, не преследуя игрока :/
@DanDiablo
@DanDiablo 4 жыл бұрын
Так, то ли я ку ку, то ли Годо ку ку... То ли он меня до ку ку доведет скоро... Есть главный герой со своей сценой и вот его скрипт: extends KinematicBody2D var player_speed = 200 func _physics_process(_delta): #движение персоонажа и анимация при ходьбе var velocity = Vector2() if Input.is_action_pressed("ui_up"): $Anim.playing = true velocity.y -= player_speed $Anim.play("player_up") if Input.is_action_pressed("ui_down"): $Anim.playing = true velocity.y += player_speed $Anim.play("player_down") if Input.is_action_pressed("ui_left"): $Anim.playing = true velocity.x -= player_speed $Anim.play("player_left") if Input.is_action_pressed("ui_right"): $Anim.playing = true velocity.x += player_speed $Anim.play("player_right") move_and_slide(velocity) if velocity.x == 0 and velocity.y == 0: $Anim.playing = false #ограничение передвижения position.x = clamp(position.x, -1000, 1850) position.y = clamp(position.y, -1000, 950) #Конец движения персоонажа и анимации при ходьбе Так же есть наследуемая сцена от героя Enemy, вот ее скрипт: extends "res://Scripts/Player.gd" var stands = true #существо стоит var destination = Vector2() #координаты цели var velocity = Vector2() #вектор передвижения var enemy_speed = 45 func _physics_process(_delta): if velocity: move_and_slide(velocity) position.x = clamp(position.x, -1000, 1850) position.y = clamp(position.y, -1000, 950) wander() func cancel_movement(): #остановить движение velocity = Vector2() destination = Vector2() func set_destination(dest): #задание движения destination = dest velocity = (destination - position).normalized() * enemy_speed stands = false $StandingTimer.start(2) func wander(): #бродить var pos = position if stands: randomize() var x = int(rand_range(pos.x - 150, pos.x + 150)) var y = int(rand_range(pos.y - 150, pos.y + 150)) x = clamp(x, -1000, 1850) y = clamp(y, -1000, 950) set_destination(Vector2(x, y)) elif velocity != Vector2(): if pos.distance_to(destination)
@ЕвгенийИванов-м6ж
@ЕвгенийИванов-м6ж 4 жыл бұрын
Волчары зачетные. Лайк!
@pixel_divas
@pixel_divas 4 жыл бұрын
Все топ, продолжай!! Спасибо за урок.
@mr.d418
@mr.d418 4 жыл бұрын
Спасибо за поддержку!)
@kostyan_play8228
@kostyan_play8228 3 жыл бұрын
После добавления функций с 17:00 у меня волки перестали двигаться что делать?
@Wekote
@Wekote Жыл бұрын
очень хороший вопрос
@Тимур-с3х9ь
@Тимур-с3х9ь 2 жыл бұрын
* Привет, подскажи пожалуйста. Я создал NPC для 2D Платформера , поэтому когда за мной бежит NPC и я прыгаю он просто летит за мной, а когда я убегаю на достаточное расстояние он продолжает передвигаться по воздуху. Как это можно пофиксить? Может гравитацию добавить (напиши пожалуйста код) *
@mr.d418
@mr.d418 2 жыл бұрын
Тимур, я не разбирался в платформерах, точно не знаю, какой код нужен, но скорее всего проблема в том, что твой NPC передвигается и по оси-x и по оси-y. У тебя платформер, поэтому передвижение по Оси-y произвольное просто невозможно - это либо прыжки, либо падения. Попробуй отключить для NPC передвижение по y при погоне за игроком.
@medvedchimgansky
@medvedchimgansky 4 жыл бұрын
Волчары класс! Но, Ди, почему они жопой вперёд ходят? Угарал долго 😂😲😉👍🏼
@medvedchimgansky
@medvedchimgansky 4 жыл бұрын
Давай поворачивать их 😉
@mr.d418
@mr.d418 4 жыл бұрын
Оо, рад, что ты оценил!) Волчар повернем в видео про анимацию, которое я тоже запилю! Они там и поскачут и поворачиваться будут)
@ВиталийВоронов-ч3ь
@ВиталийВоронов-ч3ь Жыл бұрын
случайно поместил животных под карту. Облепили в другом измерении
@Blade_Ruiner
@Blade_Ruiner Жыл бұрын
Имхо, но лучше сделать для врага новый базовый/родительский класс и прилепить второй shape с маской на Игрока. И теперь уже будет готовый метод реакции при попадании Игрока в зону этого Shape. Более - так можно регулировать зону видимости врага (враг видит перед собой, а за спиной нет), просто подвинув shape куда надо, да и визуально проще регулировать его размеры, чем в коде.
@PcPrincipal-w2c
@PcPrincipal-w2c 2 жыл бұрын
Не знаете как можно ограничить дивжение персоонажа не от начала осей, а от его начальной позиции? Есть конечно варик в clamp вместо нуля начальные координаты, а вместо второго числа то насколько далеко будет , но это у каждого начальные смотреть , может есть какой то варик скриптом задать это
@dekay99
@dekay99 2 жыл бұрын
когда вторая чаcть?
@vladislavtimirbaev47
@vladislavtimirbaev47 4 жыл бұрын
Если волк стоит то лучше его не останавливать.
@moya_mama
@moya_mama 4 жыл бұрын
Огромное спасибо за этим чудесные уроки. Благодаря им я наконец-то научился создавать какие никакие игры с пиксельной графикой. Спасибо !!!😃🙂
@bailly8111
@bailly8111 2 жыл бұрын
Привет! Я понимаю что ты скорее всего не ответишь, но когда в 22:59 на ролике я запустил, у меня выдало ошибку что get_player() не существующая функция это в var pl = get_parent().get_parent().get_player() если что, подскажи пожалуйста если сможешь
@mr.d418
@mr.d418 2 жыл бұрын
возможно, узел (которому принадлежит скрипт с этой строчкой) лежит у тебя не там, где надо Либо в скрипте мира не прописана функция get_player()
@bailly8111
@bailly8111 2 жыл бұрын
@@mr.d418 привет спасибо что так быстро ответил, как оказалась так и есть, в скрипте мира не была этой функции. Спасибо большое за помощь!
@itslittleboi
@itslittleboi 7 ай бұрын
​@@mr.d418 привет у меня такая же ошибка. Invalid call. Nonexistent function 'get_player' in base 'Node2D (Root.gd)'. узелы Enemy лежат там же как и у тебя на видео (в Tilemap) да и в самом мире прописана функция уже. Вот скрипт мира: extends Node2D onready var item = preload("res://Scenes/Item.tscn") var item_amount = rand_range(12,32) func get_player(): return $Player func update_label(value): get_parent().update_label(value) func _ready(): var items=["kamen", "vetka"] for i in range(item_amount): randomize() var a = int(rand_range(0,2)) var new_item=item.instance() $Items.add_child(new_item) new_item.set_item(items[a]) new_item.position=Vector2(int(rand_range(0, 32*68)), int(rand_range(0, 32*50))) pass Вот кусок кода врага где и просиходит ошибка: func search_for_target(): var pl = get_parent().get_parent().get_player() if position.distance_to(pl.position)
@falongor6836
@falongor6836 2 жыл бұрын
У меня открытие инвенторя не работает:( Помогите:(
@GatsHanma
@GatsHanma Жыл бұрын
"Настоящий волк стоять не должен, он должен ну как минимум ходить. Ауф." - Евлампий Осетин 2000 лет до нашей эры.
The day of the sea 😂 #shorts by Leisi Crazy
00:22
Leisi Crazy
Рет қаралды 2,2 МЛН
💩Поу и Поулина ☠️МОЧАТ 😖Хмурых Тварей?!
00:34
Ной Анимация
Рет қаралды 2 МЛН
Spongebob ate Patrick 😱 #meme #spongebob #gmod
00:15
Mr. LoLo
Рет қаралды 18 МЛН
Наследование скриптов / ООП в Godot Engine
4:53
Фронтенд Паштет
Рет қаралды 21 М.
Возможно ли Пройти Майнкрафт в Суперплоском Мире?
19:07
Всё о Tilemap в Godot Engine 4
19:48
Oktopus Skills
Рет қаралды 43 М.
Наследование сцен в Godot Engine
2:37
Фронтенд Паштет
Рет қаралды 43 М.