Esta página incluye información para ayudar a los desarrolladores experimentados de Unreal Engine a comenzar con Roblox: orientación básica, una comparación conceptual y diferencias clave entre las dos plataformas.
Orientación
Outliner de Unreal y el Explorador de Roblox Studio son las ventanas principales para organizar elementos en espacios 3D. Ambos muestran una jerarquía de objetos y carpetas. Sin embargo, Outliner tiene una estructura más plana y menos definida y solo muestra Actors. La ventana del Explorador tiene una estructura profunda y estricta y muestra todos los objetos como parte de la jerarquía, incluso los objetos que se considerarían componentes en Unreal.
El administrador de activos de Roblox Studio y la caja de herramientas se superponen con el navegador de contenido irreal. El administrador de activos te permite administrar todos los activos dentro de tu experiencia, mientras que la caja de herramientas te permite acceder a cualquier recurso que hayas publicado. La caja de herramientas también te permite buscar en la tienda de creadores recursos de Roblox o de la comunidad. La tienda de creadores es similar al Mercadode Unreal Engine, pero puedes acceder a ella directamente desde la interfaz de usuario de Studio.
Diferencias filosóficas
Roblox es un "motor de simulación" en lugar de un motor de juego tradicional. Unreal Actors y Roblox Parts ambos sirven como bloques de construcción fundamentales, pero en la práctica, los dos son bastante diferentes:
- Representación : Actors en Unreal son un concepto de mayor nivel para cualquier objeto en un nivel, mientras que Parts en Roblox están diseñados para representar objetos físicos como bloques de madera y esferas de plástico.
- Física : Para realizar simulaciones de física en Unreal, habilita la física dentro de ciertos componentes (como el StaticMeshComponent ) o agregando componentes a Actors , como restricciones de física. En Roblox, la física está construida en el introducirde datos Parts; el motor maneja las interacciones automáticamente.
Puedes ver la diferencia inmediatamente si creas un Actor y un Part . El Actor tiene poco más que una ubicación, rotación y redimensionar. El Part tiene la misma información, más un material y color, valores de reflectancia y transparencia, masa y forma, y mucho más. Los dos solo comienzan a compartir propiedades similares cuando comparas un StaticMeshActor en Unreal (por ejemplo, un cubo) con un MeshPart en Roblox.
Otra comparación útil es el Unreal Actor al Roblox Model . Los modelos actúan como un contenedor para una colección de partes interconectadas de la misma manera que Actors en Unreal son contenedores para componentes. Especifica una de las partes del aplicación de modeladocomo su parte principal para definir el punto de pivote. Los modelos también contienen scripts, animaciones, efectos de sonido, indicaciones, restricciones, emisores de partículas y más.
Por ejemplo, un Unreal Actor podría tener un NiagraComponent que usa varios emisores para lograr el efecto visual deseado, una malla para la forma, una restricción física para agregar elasticidad y un script para la interactividad del jugador. En Outliner, ves un solo Actor llamado SpringyFireball .
En Roblox, un modelo comparable SpringyFireball en la ventana del Explorador podría verse así:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
La filosofía de Roblox de la física por defecto se extiende al proceso de construcción de modelos 3D. En Roblox, soldar múltiples partes juntas en un montaje es una excelente manera de construir cosas rápidamente, porque Roblox trata las partes soldadas como un solo cuerpo rígido. Este enfoque no es práctico en Unreal.
En lugar de usar unidades métricas estándar para la longitud y la masa, Roblox usa unidades nocionales llamadas studs y Roblox Mass Units (RMUs). Para obtener conversiones métricas aproximadas y recomendaciones sobre el uso, consulte Unidades .
La ubicación importa
Las experiencias de Roblox son multijugador por defecto, por lo que Roblox Studio incluye muchas ubicaciones de almacenamiento diferentes con comportamientos específicos. Por ejemplo, un script puede ejecutarse cuando lo pones en ReplicatedStorage , pero no cuando lo pones en StarterPlayerScripts . Para más información, consulta Cliente-Servidor Tiempo de Ejecución y Organización de Objetos .
Ubicación | Descripción :--- | :--- Workspace | Representa el mundo del juego y contiene todas las partes, modelos y otros objetos del juego. Puedes poner scripts en el Workspace, pero solo scripts de servidor y scripts de módulo se ejecutan cuando están relacionados con él. Esta ubicación funciona bien para scripts que controlan el comportamiento de los objetos, ya que pueden adjuntarse directamente al objeto. ReplicatedStorage | Contiene objetos que se replican tanto al cliente como al servidor, incluidos scripts. Esta ubicación es ideal para scripts que comparten datos o funcionalidad entre los dos, como la configuración del juego, los datos del jugador y los eventos. ServerScriptService | Contiene scripts de servidor, incluidos los scripts de módulo. Esta ubicación es ideal para scripts que necesitan acceder a las funcionalidades u objetos del lado del servidor, como la lógica del juego, el almacenamiento de datos y los comportamientos de IA. ServerStorage | Contiene objetos y configuraciones del lado del servidor. Esta ubicación es ideal
Programación
Las experiencias de Roblox admiten tres tipos diferentes de scripts de Luau:
Scripts de cliente
Estos scripts se ejecutan en el cliente, y el servidor no tiene visibilidad de su comportamiento. Por razones heredadas, estos scripts pueden tomar la forma de LocalScripts o Scripts con un RunContext valor de Client. Los scripts de cliente normalmente viven en ReplicatedStorage , StarterPlayerScripts o StarterCharacterScripts .
Scripts de servidor
Estos scripts se ejecutan en el servidor, y el cliente no tiene visibilidad de su comportamiento. Los scripts del servidor tienen un RunContext valor de Server y típicamente viven en ServerScriptService , cuyo contenido no se replica en el cliente del juego.
Scripts de módulo
Estos scripts son piezas de código reutilizables que devuelven exactamente un valor, típicamente una función o tabla (o una tabla de funciones). En lugar de duplicar código en scripts de cliente y servidor, use scripts de módulo para compartir código y datos entre los dos. Los scripts de módulo a menudo viven en ReplicatedStorage, pero pueden vivir en otro lugar si desea compartir código entre scripts en el mismo lado del límite cliente-servidor.
Unreal no tiene el concepto de diferentes tipos de scripts. Si eliges hacer un juego multijugador, escribes código adicional para sincronizar el estado del juego entre el servidor y los clientes.
En Unreal, gran parte de la funcionalidad del motor está disponible extendiendo las clases integradas como UObject , ACharacters , ULevel , y UWorld en C++ o Blueprint. Unreal admite eventos personalizados, pero muchas clases incluyen eventos que el motor invoca automáticamente como parte del ciclo de vida natural del nivel.
En comparación con el sistema de "ticking" de Unreal, los scripts de Roblox son mucho más orientados a eventos. Accesas a la funcionalidad del motor similar suscribiéndote a los servicios y escuchando actualizaciones.
C++ y Luau
Para scripting, Unreal usa C++. Roblox usa Luau, un lenguaje de programación derivado de Lua 5.1.
En comparación con Luau, C ++ tiene una ventaja de rendimiento general, que puede o no ser relevante para los tipos de experiencias que desea compilación. Luau se escribe gradualmente y tiene una sintaxis menos profusa. En proyectos más grandes, sin embargo, la escritura gradual puede introducir categorías de errores que los lenguajes fuertemente tipados como C ++ evitan, por lo que considere habilitar control de tipo estricto en los scripts de Roblox.
Unreal también incluye un sistema de scripts visuales llamado Blueprints. Roblox tiene complementos de terceros que ofrecen una funcionalidad similar, pero no hay un sistema comparable incorporado.
Muestra de código de Luau
La siguiente muestra de código de Luau muestra cómo, después de que un jugador equipa una caña de pescar, escucha la entrada del usuario (en este caso, la claveE) y llama funciones adicionales:
-- Obtén los servicios de juego necesarios
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Obtén un script de módulo de ReplicatedStorage que devuelve una sola función
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Asume que este guión es un hijo de la caña de pescar
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Comprueba que la tecla esté baja, luego llama a otra función
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Habilita la acción solo cuando el jugador equipa la caña de pescar
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Desactivar la acción cuando el jugador desequipa la caña de pescar
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
El script de Roblox puede ser relativamente conciso porque Roblox tiene muchas suposiciones integradas: una Player con un Humanoid carácter conectado al servidor y puede equipar Tools. Estas suposiciones no existen en Unreal, por lo que la implementación sería muy diferente.
Activos
Unreal y Roblox admiten la importación de mallas y modelos personalizados en .fbx formato. Ciertos tipos de activos pueden requerir configuraciones específicas y configuraciones de exportación de su software de modelado de terceros. Para más información, consulte las siguientes páginas:
En Unreal, los activos se importan a su Content directorio, visible en el navegador de contenido. En Roblox, los activos se importan a su espacio de trabajo y a la sección Caja de herramientas o Inventario del Asset Manager .
Roblox también ofrece un plugin de Blender de código abierto para simplificar el proceso de importación, similar a la función Enviar a Unreal de Blender Tools.
Transformaciones
Las transformaciones de props.engine y las de CFrames de Roblox sirven para propósitos similares al representar transformaciones en 3D de objetos:
- Ambas transformaciones y CFrames representan la posición y rotación de un objeto en el espacio 3D. Las transformaciones incluyen redimensionar, mientras que Roblox usa una propiedad BasePart.Size que no es parte de la CFrame .
- Ambos admiten la multiplicación (es decir, la composición) para transformaciones complejas y tienen métodos incorporados para otras manipulaciones.
Colaboración
En Unreal, colaboras con sistemas de control de versiones como Perforce o SVN, generalmente a través de la interfaz de usuario incorporada de Unreal. Estos sistemas de control de versiones usan el modelo centralizado de "checkout" que bloquea los archivos mientras una persona trabaja en ellos.
Los archivos de Roblox viven en la nube (aunque puedes exportar copias), por lo que Roblox Studio proporciona flujos de trabajo de colaboración integrados para la edición simultánea, la administración de grupos, los permisos, la redacción de scripts y más. Consulte Colaboración .
Plugins
Similar a Unreal, Roblox Studio admite plugins, que pueden simplificar o darle control adicional sobre varios aspectos del proceso de desarrollo. Los plugins están disponibles en la Creator Store, al igual que los activos, muchos de forma gratis/gratuito.
Glosario
| Irreal | Roblox | Notas | :--- | :--- | 20> no incluye información de escala. Véase Transformaciones . | | Outliner | Explorador window | | | Panel de detalles | Propiedades window | Level Viewport | Viewport | | Content Browser | Asset Manager o Paquete | | | | Transformar | CFrame | CFrame no incluye información de escala. Véase Transformaciones . | Outliner | Explorador window | | | Panel de detalles | Propiedades window | Level Viewport | Viewport | | Content Browser | Asset Manager o Caja de herramientas | | | | | Modo paisaje | Editor de terreno | | PlayerStart |