Ссылка на персонажа, которого я использую - https://poly.pizza/m/DgOCW9ZCRJ
Загрузка модели.
Добавил модель я просто перенеся его из папки и после загрузки перенес его на сцену:
Если нажать на значок рядом с названием, то мы перейдем в редактор. При нажатии на проигрыватель анимации, можно увидеть, что для модели уже готова анимация, которую можно запускать и просмотреть.
Теперь опять перейдем на основную сцену и в дереве нажмем на корневой элемент и выберем "добавить дочерний узел", выбираем камеру и ставим как вам будет удобно, это нужно, что бы при запуске игры на экране хоть что то отображалось.
И последнее, что остается сделать, так же в дереве нажмем на корневой элемент и выберем "добавить дочерний узел", теперь добавим CharacterBody3D и перенесем в неё нашу модель.
Движение персонажа
Теперь нужно написать скрипт для написания передвижения персонажа. Перейдем в Sсripts-> файл-> новый скрипт.
Создаем скрипт с такими настройками:
После создания вы увидите готовый, стандартный скрипт. Я пока предлагаю закомментировать часть кода, которая дает гравитацию, это нужно что бы мы не падали в бездну, так как пола еще нету.
Сохраняем, добавляем скрипт к персонажу:
Нажимаем пуск в правом верхнем углу, у вас должно открыться окно и можно протестировать как двигается персонаж.
Но двигается он только при нажатии на стрелки...
Это часть кода отслеживает действия, они настраиваются отдельно.
Нужно нажать проект -> настройки проект-> список действий.
Я вбил в поиск 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()