Миграция с Godot 3.X

Это постоянно обновляющийся список основных изменений и «подводных камней», на которые следует обратить внимание при переходе на Godot 4.0.

Новые Названия

Одним из крупнейших изменений в Godot 4 является полное переименование — узлов, функций и имен свойств. Большая часть этого сделана для улучшения последовательности и ясности. Вот несколько из наиболее значительных, на которые стоит обратить внимание:

  • Узлы 2D/3D — В Godot 3.x узлы 2D имели суффикс «2D», а ноды 3D не имели такого. Теперь у всех нод есть суффиксы «2D» или «3D». Например: RigidBody2D и RigidBody3D.
  • Также в категории 3D узел Spatial переименован в Node3D для соответствия.
  • Один из самых популярных узлов, KinematicBody, переименован в CharacterBody2D/CharacterBody3D.
  • Функция instance() у PackedScene была переименована в instantiate().
  • Свойства position и global_position заменяют translation и global_translation в 3D, что делает их согласованными с 2D.

Сигналы и Вызовы

Работа с сигналами более удобна в 4.0. Теперь Signal — это встроенный тип, поэтому вы будете использовать меньше строк, что означает уменьшение времени на проверку ошибок. То же самое относится и к функциям, на которые теперь можно прямо ссылаться.

Вот пример определения, подключения и вызова сигнала.

extends Node

signal my_signal

func _ready():
    my_signal.connect(signal_handler)

func _input(event):
    if event.is_action_pressed("ui_select"):
        my_signal.emit()

func signal_handler():
    print("signal received")

Твины

Если вы начали использовать SceneTreeTween в Godot 3.5, то вам будет знакомо использование Tween в Godot 4.0.

Tween больше не является узлом. Вместо этого вы создаете отдельные объекты анимации tween при необходимости. Как только вы к этому привыкнете, он станет гораздо более мощным и удобным в использовании методом по сравнению со старым.

AnimatedSprite[2D|3D]

Самое крупное изменение, которое смущает тех, кто знаком с версией этого узла 3.x, заключается в том, что свойство playing больше не существует. Чтобы автоматически воспроизвести анимацию, вы можете включить autoplay в панели SpriteFrames. В коде используйте play() и stop() для управления воспроизведением.

CharacterBody[2D|3D]

Самое крупное изменение в этом узле касается использования move_and_slide(). Теперь он не принимает никаких параметров — теперь все они являются встроенными свойствами. Среди них есть свойство native velocity, поэтому вам больше не нужно объявлять его самостоятельно.

TileMap

Узел TileMap полностью переработан в версии 4.0. Практически все, начиная от создания TileSets и заканчивая рисованием и взаимодействием с тайлами, на 100% новое.

Генератор случайных чисел (RNG)

Есть несколько изменений во встроенных функциях генерации случайных чисел в GDScript:

  • Теперь вам не нужно вызывать randomize() — это происходит автоматически. Если вы хотите получить повторяемую «случайность», используйте seed() для установки заранее выбранного значения.
  • Функция rand_range() теперь заменена на randf_range() (для чисел с плавающей точкой) или randi_range() (для целых чисел).

Raycasting

При использовании лучей в коде появился новый API. Теперь функция PhysicsDirectSpaceState[2D|3D].intersect_ray() принимает специальный объект в качестве параметра. Этот объект указывает свойства луча. Например, для использования луча в 3D:

var space = get_world_3d().direct_space_state
var ray = PhysicsRayQueryParameters3D.create(position, destination)
var collision = space.intersect_ray(ray)
if collision:
    print("ray collided")

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

три × два =

Прокрутить вверх