Обнаружен AdBlock!

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

  1. Найдите иконку AdBlock в панели расширений браузера
  2. Нажмите на иконку AdBlock
  3. Выберите "Отключить на этом сайте" или "Pause on this site"
  4. Обновите страницу
Уведомления

Введение в Unreal Engine 5: Blueprint и C++

Подробное руководство по основам работы с Blueprint и C++ в Unreal Engine 5. Узнайте, как создавать игровую логику, используя оба подхода.

Введение в Unreal Engine 5

Unreal Engine 5 предоставляет разработчикам два мощных инструмента для создания игровой логики: визуальное программирование через Blueprint и традиционное программирование на C++. В этой статье мы рассмотрим основы работы с обоими подходами и научимся их эффективно комбинировать.

Содержание:

  • Blueprint: основы визуального программирования
  • C++: базовая структура классов
  • Взаимодействие Blueprint и C++
  • Практические примеры

1. Blueprint: основы визуального программирования

Blueprint - это визуальная система скриптов, которая позволяет создавать игровую логику без написания кода. Давайте рассмотрим простой пример движения объекта.


Event BeginPlay
{
    // Инициализация начальных значений
    Set Initial Location (Self.Location)
    Set Movement Speed (500.0)
}

Event Tick
{
    // Получаем текущее время
    Get Game Time in Seconds
    Multiply (Time, Movement Speed)
    
    // Вычисляем новую позицию
    Make Vector (
        X: Sin(Result),
        Y: Cos(Result),
        Z: 0.0
    )
    
    // Устанавливаем позицию актора
    Set Actor Location (
        New Location: Initial Location + Result,
        Sweep: false
    )
}
    

В этом примере мы создали простое круговое движение объекта с помощью Blueprint. Объект будет двигаться по окружности с заданной скоростью.

2. C++: базовая структура классов

Теперь рассмотрим, как реализовать аналогичную функциональность на C++.


// MovingActor.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MovingActor.generated.h"

UCLASS()
class MYGAME_API AMovingActor : public AActor
{
    GENERATED_BODY()
    
public:    
    AMovingActor();

protected:
    virtual void BeginPlay() override;
    virtual void Tick(float DeltaTime) override;

    UPROPERTY(EditAnywhere, Category = "Movement")
    float MovementSpeed = 500.0f;

private:
    FVector InitialLocation;
    float TimeElapsed;
};
    

// MovingActor.cpp
#include "MovingActor.h"

AMovingActor::AMovingActor()
{
    PrimaryActorTick.bCanEverTick = true;
}

void AMovingActor::BeginPlay()
{
    Super::BeginPlay();
    InitialLocation = GetActorLocation();
    TimeElapsed = 0.0f;
}

void AMovingActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
    
    TimeElapsed += DeltaTime;
    float MovementFactor = TimeElapsed * MovementSpeed;
    
    FVector NewLocation = InitialLocation + FVector(
        FMath::Sin(MovementFactor),
        FMath::Cos(MovementFactor),
        0.0f
    );
    
    SetActorLocation(NewLocation);
}
    

3. Взаимодействие Blueprint и C++

Одно из главных преимуществ UE5 - возможность комбинировать Blueprint и C++. Давайте создадим C++ класс с функциями, доступными в Blueprint.


// CustomActor.h
UCLASS(Blueprintable)
class MYGAME_API ACustomActor : public AActor
{
    GENERATED_BODY()
    
public:
    UFUNCTION(BlueprintCallable, Category = "Custom Functions")
    float CalculateDistance(AActor* OtherActor);
    
    UFUNCTION(BlueprintImplementableEvent, Category = "Custom Events")
    void OnDistanceCalculated(float Distance);
};
    

Теперь мы можем использовать эти функции в Blueprint:


Event BeginPlay
{
    // Получаем референс на другого актора
    Get Player Character
    
    // Вызываем C++ функцию
    Calculate Distance (Other Actor: Player Character)
    
    // Обрабатываем результат в Blueprint
    Branch
    {
        Condition: Distance > 1000.0
        True: Print String ("Объект далеко")
        False: Print String ("Объект близко")
    }
}
    

4. Практические советы

  • Используйте Blueprint для быстрого прототипирования и простой игровой логики
  • Переносите производительно-критичный код в C++
  • Создавайте базовые классы на C++ и расширяйте их функциональность через Blueprint
  • Используйте UPROPERTY() и UFUNCTION() макросы для экспорта переменных и функций в Blueprint

Заключение

Unreal Engine 5 предоставляет гибкую систему разработки, где вы можете выбирать между Blueprint и C++ или использовать оба подхода вместе. Выбор инструмента зависит от ваших потребностей, опыта команды и требований к производительности.

Пример Blueprint логики


Event BeginPlay
{
    Set Actor Location (
        New Location: Vector(0, 0, 100),
        Sweep: false
    )
}