Как создать персонажа в Defold Game Engine

Как создать персонажа в Defold Game Engine Уроки

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

Подготовка.

Откроем предыдущий проект в Defold и начнем. Первым делом нужно импортировать изображения героя (они находятся в архиве в прошлом уроке). Из этих изображений мы будем делать анимированного героя (Лягушку), поэтому их получается много.
В окне Project Explorer нажмите правой кнопкой мыши и создайте новую папку New- Folder и назовите ее Hero.

folder
В папке создайте новый файл atlas hero.atlas и новую папку images

heroatlas
Перетащите все изображения героя в папку imajes

imajehero
Откройте hero.atlas и в окне Outline добавьте все эти изображения в атлас Add images

addimages

imajeitog
Далее, добавим скелет персонажа, он находится так же в архиве с ресурсами под названием hero.json. Перенесите этот файл в папку hero.

Этот файл поможет нам создать скелет персонажа и его анимацию. Добавим в папку hero еще один файл spinescene New-Spine Scene File , этот файл поможет нам связать скелет с текстурами.

spinescene
В файле hero.spinescene в строке spine_json выберете hero.json и в строке atlas, hero.atlas.

spinesceneadd

И не забываем сохранять наши сцены и атласы.

Создание объекта персонажа.

Подготовка файлов для персонажа закончена, теперь займемся созданием самого персонажа (игрового объекта)
Добавим в папку hero новый файл Add — New Game Object

herogo
Откройте hero.go и в окне Outline добавьте новый компонент Add Component Spine Model

spinemodel
И в строке spine csene, в окне Properties выберете наш hero.spinescene, в строке Defauit Animation выберете анимацию run_right.

spinesceneanim

В окне Outline добавьте новый component Collison Obgect и к нему добавьте объект Add Shape.
Выберем Sphere и Box для создания физики нашему персонажу.

addshape
Выберете объект сферу и для свободного перемещения его по сцене нажмите на панели меню Scene -Move Tool
Разместим объекты так, чтобы сфера была на голове персонажа а куб на туловище.

collisonpers
Выберете файл collisionobject и в окне Properties в строке Type выберете kinematic, в строке Group напишите hero и в строке mask geometry

kinematik
Скрипт движения.

Создадим скрипт, который будет отвечать за движение персонажа
В папке hero New -Script File.

heroscript
Удалим все из скрипта и добавим такой код

-- gravity pulling the player down in pixel units/sˆ2
local gravity = -20

-- take-off speed when jumping in pixel units/s
local jump_takeoff_speed = 900

function init(self)
    -- this tells the engine to send input to on_input() in this script
    msg.post(".", "acquire_input_focus")

    -- save the starting position
    self.position = go.get_position()

    -- keep track of movement vector and if there is ground contact
    self.velocity = vmath.vector3(0, 0, 0)
    self.ground_contact = false
end

function final(self)
    -- Return input focus when the object is deleted
    msg.post(".", "release_input_focus")
end

Видео:Знакомство с редактором Defold | Как сделать игру? | Создание игр | День 1Скачать

Знакомство с редактором Defold | Как сделать игру? | Создание игр | День 1
function update(self, dt) local gravity = vmath.vector3(0, gravity, 0) if not self.ground_contact then -- Apply gravity if there no ground contact self.velocity = self.velocity + gravity end -- apply velocity to the player character go.set_position(go.get_position() + self.velocity * dt) -- reset volatile state self.correction = vmath.vector3() self.ground_contact = false end local function handle_geometry_contact(self, normal, distance) -- project the correction vector onto the contact normal -- (the correction vector is the 0-vector for the first contact point) local proj = vmath.dot(self.correction, normal) -- calculate the compensation we need to make for this contact point local comp = (distance - proj) * normal -- add it to the correction vector self.correction = self.correction + comp -- apply the compensation to the player character go.set_position(go.get_position() + comp) -- check if the normal points enough up to consider the player standing on the ground -- (0.7 is roughly equal to 45 degrees deviation from pure vertical direction) if normal.y > 0.7 then self.ground_contact = true end -- project the velocity onto the normal proj = vmath.dot(self.velocity, normal) -- if the projection is negative, it means that some of the velocity points towards the contact point if proj < 0 then -- remove that component in that case self.velocity = self.velocity - proj * normal end end function on_message(self, message_id, message, sender) if message_id == hash("contact_point_response") then -- check if we received a contact point message. One message for each contact point if message.group == hash("geometry") then handle_geometry_contact(self, message.normal, message.distance) end end end local function jump(self) -- only allow jump from ground if self.ground_contact then -- set take-off speed self.velocity.y = jump_takeoff_speed end end local function abort_jump(self) -- cut the jump short if we are still going up if self.velocity.y > 0 then -- scale down the upwards speed self.velocity.y = self.velocity.y * 0.5 end end function on_input(self, action_id, action) if action_id == hash("jump") or action_id == hash("touch") then if action.pressed then jump(self) elseif action.released then abort_jump(self) end end end

Данный скрипт будет отвечать за скорость, движение персонажа, соприкосновение со объектами и прыжки.
Вернемся в hero.go и добавим скрипт к персонажу, нажмите правой кнопкой на Game Object в окне Outline и выберете Add Component From File.

heroscriptadd
Настроим действие прыжка для ПК (пробел) и для сенсорных экранов (прикосновение). В Project Explorer в папке input откройте game.input_building

gaimbuid

и настройте key_trigger и touch_trigger (по нажатию правой кнопкой мыши по функции add key trigger, изменить action на jump и touch и в input выбрать KEY_SPACE и TOUCH_MULTI)

gaimbuid2
Теперь, если запустить игру наш персонаж пролетит сквозь землю, поэтому нужно добавить коллизию к нашим блокам земли.

К папке main добавим новый компонент New- File Collection.

level
И откроем его. В окне Outline добавим нашу ground.collection Add Collection From File

levelground
и нашего персонажа Add Game Object File hero.go

levelinmain
Сохраним все изменения и откроем main.collection, изменим ground.collection на level.collection

Создадим в папке main еще один скрипт controller

go.property("speed", 6) 

function init(self)
    msg.post("ground/controller#script", "set_speed", { speed = self.speed })
end

Откроем level.collection и добавим в окне Outline новый объект controller Add Game Object (изменить id на controller)

controller
И к нему добавим скрипт controller.script Add Component From File.
Этот скрипт будет контролировать все что касается этого уровня, в дальнейшем появление препятствий, появление монет, но пока только скорость движения земли.
Откроем скрипт ground и добавим

function on_message(self, message_id, message, sender)
    if message_id == hash("set_speed") then 
        self.speed = message.speed 
    end
end

т.к. скрипт controller обращается к этой функции.

Ну и непосредственно добавление самой коллизии.

Откроем ground.collection и добавим к controller новый объект Сollision Object.

collisionground
К этому объекту добавим Add Share — Box и настроим его примерно так, как на скриншоте…

boxcollider
У collisionobject измените Type на Static и так же Group geometry и mask hero.

groundcolission

И вот теперь можно запустить игру Project -Build and lauch.

playerprig

Персонаж бежит по земле, проигрывается анимация, и можно прыгать.
На этот данный урок завершаю, в следующем мы добавим несколько игровых объектов (препятствий), монеты и научим персонажа умирать. Удачных проектов!

📽️ Видео

Как сделать игру? | С чего начать? | Почему Defold? | Создание игр | День 0Скачать

Как сделать игру? | С чего начать? | Почему Defold? | Создание игр | День 0

3 причины использовать Defold. Алексей Гулев на GGDT#1Скачать

3 причины использовать Defold. Алексей Гулев на GGDT#1

Способ быстро придумать интересную игру | Загрузочный экран Defold | Создание игр | День 2Скачать

Способ быстро придумать интересную игру | Загрузочный экран Defold | Создание игр | День 2

Defold. Игровой движок для создания игр 2D. Создаем игру.Скачать

Defold. Игровой движок для создания игр 2D. Создаем игру.

Сделал одинаковую игру на Unreal/Unity/GodotСкачать

Сделал одинаковую игру на Unreal/Unity/Godot

The hero controller + 3d environment. Defold.Скачать

The hero controller + 3d environment. Defold.

Руководство по Defold #1 - Установка и обзорСкачать

Руководство по Defold #1 - Установка и обзор

Как сделать игру для Game Jam в Defold - часть 1Скачать

Как сделать игру для Game Jam в Defold - часть 1

Defold Components - generic overview, beginners tutorialСкачать

Defold Components - generic overview, beginners tutorial

Создание персонажа в Godot никогда не было настолько простым! #shortsСкачать

Создание персонажа в Godot никогда не было настолько простым! #shorts

Platformer Defold Tutorial 1 - Sprites, Tilemaps, Basic SetupСкачать

Platformer Defold Tutorial 1 - Sprites, Tilemaps, Basic Setup
Поделиться или сохранить к себе:
Технологичная помощь
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.