Puedes realizar un proyecto de Unreal Engine (UE) usando solamente Blueprint o C++, pero la mayoría de los proyectos se benefician con una mezcla de los dos. Entonces, ¿cómo elegir la mejor mezcla de Blueprint y de C++ para tu proyecto? Este documento ofrece una guía para responder esa pregunta.
Programación contra Secuencias de comandos
Para saber mejor cuándo usar Blueprint o C++, primero debes entender la diferencia entre programar y secuenciar.
Programación: instrucciones que definen los sistemas.
Secuencias de comandos: instrucciones que definen los comportamientos al interactuar con sistemas existentes.
Por ejemplo, quizás puedas usar la programación para definir un sistema de vehículo que controla la funcionalidad de base, como la aceleración y la dirección, y usar la secuencia para definir tipos de vehículo específicos, como autos o botes.
En este contexto, C++ es un lenguaje de programación, y Blueprint es un lenguaje de secuencia. Sin embargo, no es una distinción clara, ya que puedes usar C++ para definir comportamientos o blueprint para definir sistemas. Además, hay veces que, en los proyectos, las líneas entre programación y secuencia se vuelven borrosas, y la mejor división entre los dos depende del escenario.
Blueprint funciona como un lenguaje de secuencia al interactuar con funcionalidad UE expuesta. De la misma manera, puedes exponer su funcionalidad personalizada a los blueprints. Para más información, consulta Cómo combinar Blueprints y C++.
Comparación entre Blueprint y C++
Ya que cada proyecto y equipo es único, no hay una "decisión correcta" al decidir si usar blueprint o C++, pero recomendamos considerar las fortalezas antes de que las uses.
Fortalezas de Blueprint
Secuencias de comandos: Blueprint puede definir comportamientos más fácilmente.
Iteración más rápida: Blueprint es excelente para hacer un prototipo ya que es más rápido crear, modificar, compilar y evaluar clases de blueprint.
Accesibilidad más amplia: la representación del flujo visual de Blueprint es más fácil de entender y usar, lo que lo hace accesible para programadores y no programadores orientados a lo visual, como diseñadores y artistas.
Mayor capacidad de descubrimiento: con Blueprint, es más fácil encontrar e incluir API y referencias de recursos.
Modelo de memoria más seguro: diseñamos blueprints para tener un modelo de memoria seguro para evitar fallos.
Fortalezas de C++
Programación: C++ puede construir sistemas nuevos más fácilmente.
Rendimiento de tiempo de ejecución más rápido: C++ es más eficaz, pero la importancia depende del contexto. Consulta la sección de Problemas de rendimiento, que se encuentra más abajo, para información más detallada.
Acceso más amplio: C++ tiene acceso a una funcionalidad UE de un nivel menor.
Extensibilidad más amplia: con C++, puedes crear e interactuar con bibliotecas y sistemas externos.
Mayor control: C++ otorga control de bajo nivel sobre sistemas, recursos y algoritmos complejos.
Colaboración más fluida: C++ se almacena como texto, lo que facilita comparar, combinar y compartir entre proyectos. Sin embargo, puedes usar la Herramienta de comparación de Unreal con Blueprints.
Mejor escalabilidad: los archivos de C++ grandes son más fáciles de modificar que los gráficos grandes de Blueprint.
Mejor depuración: hay herramientas de depuración más poderosas para C++ que el Depurador de blueprints.
Problemas de rendimiento
Fundamentalmente, C++ es más eficaz que Blueprint por las siguientes razones:
C++ se compila en un código de equipo que se ejecuta directamente en la CPU.
Los blueprints se compilan en un código de byte que se ejecuta en un equipo virtual.
Esto significa que Blueprint tiene un gasto general de ejecución de secuencia adicional. Sin embargo, las diferencias de rendimiento entre Blueprint y de C++ son generalmente insignificantes y dependen del contexto. Los ejemplos siguientes son contextos donde se puede esperar el mayor impacto:
Infraestructura de bajo nivel de base.
Bucles ajustados que utilizan mucho recursos de procesamiento o E/S.
Sistemas que procesan grandes conjuntos de datos.
Clases dependientes de tic con muchas instancias.
Los escenarios que se benefician de múltiples procesos, ya que Blueprint no los admite.
Para mejorar el rendimiento, usa temporizadores o delegados para programar el trabajo en blueprints en lugar de usar tic.
Si usas blueprint y tienes problemas de rendimiento, describe tu proyecto con Unreal Insights y optimiza la sobrecarga más significativa antes de considerar convertir tu blueprint a C++.
Combinación de blueprint y C++
El mejor método para combinar Blueprint y C++ es usar C++ como base y construir clases de blueprint sobre ella. En la práctica, esto significa exponer tu C++ para que sea utilizable desde blueprints.
Puedes exponer C++ a Blueprint con los siguientes métodos:
Con la creación de una clase de blueprint que extiende una clase C++ y usa especificadores de metadatos, como
UPROPERTY(BlueprintReadWrite)oUFUNCTION(BlueprintCallable), para exponer elementos específicos.Crea una clase C++ que extiende
UBlueprintFunctionLibrarypara exponer las funciones estáticas de clase.
En algunos casos menos comunes, quizás quieras exponer Blueprint a C++ y podrías hacerlo con los siguientes métodos:
Con el uso del especificador
FUNCTION(BlueprintImplementableEvent)para definir una función virtual pura que puede implementar en Blueprint.Con el uso del especificador
UFUNCTION(BlueprintNativeEvent)para definir una función virtual pura que puede anular opcionalmente en Blueprint.Con la creación de una interfaz de usuario, puedes acceder a UserWidget creado en blueprint con
UPROPERTY(meta=(BindWidget)).
Para obtener más información sobre estos métodos, consulta las siguientes páginas:
C++ y Blueprint: un ejemplo detallado sobre cómo crear una clase C++ extensible a Blueprint.
Exposición de C++ a los blueprints: consejos y trucos sobre cómo escribir un API amigable con Blueprint.
Exposición de elementos de jugabilidad a los blueprints: una guía técnica para programadores de jugabilidad sobre cómo exponer elementos de jugabilidad a Blueprint.
Biblioteca de funciones de Blueprint: aprende a usar
UBlueprintFunctionLibrary.Juego de muestra Lyra: aprende sobre el proyecto Lyra, que tiene ejemplos de cada uno de los métodos mencionados anteriormente.
Conversión de Blueprint a C++
Si quieres convertir tu blueprint a C++, puedes comenzar usando la Vista de encabezado de blueprint para generar un archivo de cabecera C++ para una estructura o clase de blueprint. El archivo .h generado contiene todas las declaraciones de funciones y variables de tu blueprint, pero debe convertir su implementación de función manualmente al archivo .cpp correspondiente.
Luego de convertir un blueprint a C++, puede que tengas que actualizar referencias para usar la nueva clase C++. Si esto da como resultado muchas actualizaciones necesarias, considera usar redirecciones del núcleo para reasignar esas referencias automáticamente.