Найти тему

Как добавиьт 3д персонажа в Godot.

Оглавление

Ссылка на персонажа, которого я использую - https://poly.pizza/m/DgOCW9ZCRJ

Загрузка модели.

Добавил модель я просто перенеся его из папки и после загрузки перенес его на сцену:

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

-2

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

-3

И последнее, что остается сделать, так же в дереве нажмем на корневой элемент и выберем "добавить дочерний узел", теперь добавим CharacterBody3D и перенесем в неё нашу модель.

Движение персонажа

Теперь нужно написать скрипт для написания передвижения персонажа. Перейдем в Sсripts-> файл-> новый скрипт.

-4

Создаем скрипт с такими настройками:

-5

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

-6

Сохраняем, добавляем скрипт к персонажу:

-7

Нажимаем пуск в правом верхнем углу, у вас должно открыться окно и можно протестировать как двигается персонаж.

Но двигается он только при нажатии на стрелки...

-8

Это часть кода отслеживает действия, они настраиваются отдельно.

Нужно нажать проект -> настройки проект-> список действий.

-9

Я вбил в поиск left первая запись и есть действие, которе используется в скрипте.

Нажимаем на плюс и добавляем нужную кнопку. У меня тут уже добавлена "А".

Добавляем анимацию.

Так как анимация уже готова, то что бы добавить анимацию нужно немного изменить код.

Подключаем наши проигрыватель анимации при активации скрипта.

func _ready():
animation_player = get_node("Root Scene/AnimationPlayer")
if direction:
animation_player.play("Run")
else:
animation_player.play("Idle")

Если мы нажали на кнопку, то играет анимация "Run", иначе "Idle".

Весь код:

extends CharacterBody3D

const SPEED = 5.0
const JUMP_VELOCITY = 4.5

var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
var animation_player

func _ready():
animation_player = get_node("Root Scene/AnimationPlayer")


func _physics_process(delta):
## Add the gravity.
#if not is_on_floor():
#velocity.y -= gravity * delta

# Handle jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY

var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * -SPEED
velocity.z = direction.z * -SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)

if direction:
animation_player.play("Run")
else:
animation_player.play("Idle")

move_and_slide()