Esta página incluye información para ayudar a los desarrolladores de Unity experimentados a comenzar con Roblox: orientación básica, una comparación conceptual y diferencias clave entre las dos plataformas.
Obtener orientación
La ventana de jerarquía de Unity y el explorador de Roblox Studio son las ventanas principales para organizar elementos en escenas 3D:
- Ambos te permiten administrar y organizar objetos (por ejemplo, personajes y recursos ambientales).
- Ambos usan una estructura de árbol para las relaciones padre-hijo entre objetos.
Sin embargo, la ventana de jerarquía no tiene una estructura predefinida, mientras que la ventana del explorador tiene una estructura estricta.Podría ayudar a pensar en la ventana del Explorador como una combinación de la jerarquía de Unity y las ventanas de proyecto, con la carpeta del espacio de trabajo como el elemento más reconocible.
Del mismo modo, el administrador de recursos de Roblox Studio y la caja de herramientas se superponen con la ventana del proyecto de Unity.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 activo que hayas publicado.La caja de herramientas también te permite buscar en la tienda de creadores recursos de Roblox o de la comunidad, similar a la tienda de recursos de Unity.
Diferencias filosóficas
Roblox es un "motor de simulación" en lugar de un motor de juego tradicional.Unity GameObjects y Roblox Parts ambos sirven como los bloques de construcción fundamentales para crear objetos en un entorno, ambiente3D, pero en la práctica, los dos son bastante diferentes:
- Representación : GameObjects en Unity son un concepto de nivel superior para cualquier objeto en una escena, mientras que Parts en Roblox están diseñados para representar objetos físicos como bloques de madera y esferas de plástico, en lugar de geometría abstracta como objetos primitivos en Unity.
- Física : Para realizar simulaciones de física en Unity, le adjuntas componentes como Rigidbody y Collider a un GameObject .En Roblox, la física se integra en el introducirde datos Parts ; el motor maneja las interacciones automáticamente.
Puedes ver la diferencia de inmediato si creas un GameObject y un Part.El GameObject no tiene más que una posición, rotación y redimensionar.El Part tiene esa misma información—más un material y color, valores para el reflejo y la transparencia, masa y forma, y mucho más.Convertir un Part en algo más parecido a un vacío GameObject significa eliminar muchas propiedades predeterminadas.Al revés, puedes hacer un GameObject que se parece mucho a un Part agregando MeshFilter , MeshRenderer , Collider , y Rigidbody componentes a él.
Desde una perspectiva de programación, GameObject es más similar a la Roblox Instance, la clase base para todas las otras ClasesRoblox, pero porque no creas objetos de tipo Instance, la comparación no es especialmente práctica.
Otra comparación es la Unidad GameObject con el Roblox Model .Los modelos actúan como contenedor para una colección de partes interconectadas de la misma manera que podrías establecer una relación padre-hijo entre muchos GameObjects en Unity.Especificas 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, emisores de partículas y más.
Por ejemplo, una Unidad GameObject podría tener componentes para ParticleSystem , Physics3D , SpringConstraint y un script.En la ventana de jerarquía, ves un solo GameObject llamado SpringyFireball .La ventana del inspector muestra la colección de componentes y propiedades.
En Roblox, un modelo comparable SpringyFireball en la ventana Explorador podría parecer algo así:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
La filosofía de física por defecto de Roblox se extiende al proceso de construcción de modelos 3D.En Roblox, soldar múltiples piezas juntas en una ensamble es una excelente manera de construir rápidamente cosas, porque Roblox trata las piezas soldadas como un solo cuerpo rígido.Este enfoque no está disponible en Unity.
En lugar de usar unidades métricas estándar para longitud y masa, Roblox usa unidades conceptuales llamadas tachuelas y unidades de masa de Roblox (RMU).Para conversiones y recomendaciones de métricas aproximadas alrededor del uso, vea Unidades.
Importa la ubicación
Las experiencias de Roblox son multijugador por defecto, por lo que Roblox Studio incluye muchos almacenamientos diferentes con comportamientos específicos.Por ejemplo, un script podría ejecutarse cuando lo pongas en ReplicatedStorage , pero no cuando lo pongas en StarterPlayerScripts .Para obtener más información, vea tiempo de ejecución cliente-servidor y organización de objetos.
Ubicación | Descripción :--- | :--- Espacio de trabajo | Representa el mundo del juego.Esta ubicación funciona bien para los scripts del servidor que se adhieren directamente a los objetos y controlan su comportamiento.ReplicatedFirst | Contiene objetos que se replican al cliente antes que cualquier otra cosa.Esta ubicación es ideal para el conjunto mínimo absoluto de objetos y scripts de cliente necesarios para mostrar una pantalla de carga.ReplicatedStorage | Contiene objetos que se replican tanto al cliente como al servidor.Esta ubicación es ideal para Class.ModuleScript\|ModuleScripts que quieres usar tanto en el servidor como en el cliente.Class.LocalScript\|LocalScripts no corra de esta ubicación, pero Class.Script\|Scripts con un contexto de ejecución de Client lo hace.ServerScriptService | Contiene scripts del servidor.Esta ubicación es ideal para scripts que necesitan acceder a la funcionalidad o a los objetos del lado del servidor, como la lógica del juego y el almacenamiento en la nube.ServerStorage | Contiene objetos del lado del servidor.Esta ubicación es ideal para objetos grandes que no necesitan ser replicados inmediatamente a los clientes cuando se unen a una experiencia.Los scripts no se ejecutan desde esta ubicación, pero puedes almacenar el lado del servidor Class.ModuleScript\|ModuleScripts aquí.StarterPlayer.StarterCharacterScripts | Contiene Class.LocalScript\|LocalScripts que se ejecuta cuando se genera el personaje.StarterPlayer.StarterPlayerScripts | Contiene Class.LocalScript\|LocalScripts scripts de propósito general que se ejecutan cuando el jugador se une a la experiencia.StarterGui | Contiene elementos de interfaz de usuario que el cliente muestra cuando carga el juego.Class.LocalScript\|LocalScripts puede correr desde esta ubicación.Esta ubicación es ideal para scripts que modifiquen la interfaz de usuario del juego, como agregar botones, menús y ventanas emergentes.Paquete de inicio | Generalmente solo contiene Class.Tool\|Tools , pero también puede incluir Class.LocalScript\|LocalScripts para configurar mochilas de jugador.
Programación
Las experiencias de Roblox admiten tres tipos diferentes de scripts Luau:
Scripts del cliente
Estos scripts se ejecutan en el cliente y el servidor no tiene visibilidad sobre su comportamiento.Por razones legadas, estos scripts pueden tomar la forma de LocalScripts o Scripts con un valor de RunContext de Client.Los scripts del cliente suelen vivir en ReplicatedStorage , StarterPlayerScripts o StarterCharacterScripts .
Scripts del servidor
Estos scripts se ejecutan en el servidor y el cliente no tiene visibilidad de su comportamiento.Los scripts del servidor tienen un valor de RunContext de Server y, por lo general, viven en ServerScriptService, el contenido del cual no se replica al cliente del juego.
Scripts de módulo
Estos scripts son piezas reutilizables de código que devuelven exactamente un valor, por lo general una función o una tabla (o una tabla de funciones).En lugar de duplicar el código en los scripts del cliente y del servidor, utilice los 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.
Unity no tiene el concepto de diferentes tipos de guiones.Si elige crear un juego multijugador, Unity usa sus bibliotecas de red para indicar cuándo un GameObject (y sus scripts) deberían ser exclusivos para el servidor.
En Unity, gran parte de la funcionalidad del motor está disponible a través de los métodos de MonoBehaviour .Por ejemplo, para ejecutar código antes del bucle de renderizado, agregas código al método Update().Para manejar eventos de colisión física, agregas código al método OnCollideEnter().
Los scripts de Roblox son más impulsados por eventos. Accedes a funcionalidades similares suscribiéndote a servicios y escuchando actualizaciones.
C# y Luau
Para scripting, Unity usa C#. Roblox usa Luau, un lenguaje de programación derivado de Lua 5.1.
En comparación con C#, Luau se escribe gradualmente y generalmente tiene una sintaxis menos verbosa.En proyectos más grandes, sin embargo, el tecleo gradual puede introducir categorías de errores que los lenguajes fuertemente tipados como C# evitan, por lo que considere habilitar verificación de tipo estricto en los scripts de Roblox.
Para diferencias de sintaxis básicas entre los lenguajes de programación, vea comparación de Luau y C#.
Ejemplo de código Luau
El siguiente ejemplo de código Luau muestra cómo, después de que un jugador equipa una caña de pescar, escuchar la entrada del usuario (en este caso, la claveE ) y llamar funciones adicionales:
-- Obtener los servicios de juego necesarios
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Obtenga un guión de módulo de ReplicatedStorage que devuelve una sola función
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Supone que este script es un hijo de la caña de pescar
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Compruebe que la clave está hacia abajo, luego llame a otra función
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Solo habilita la acción 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: un Player con un personaje Humanoid conectado al servidor y puede equipar Tools .Estas suposiciones no existen en Unity, por lo que la implementación sería muy diferente.
Activos
Unity y Roblox ambos admiten la importación de mallas y modelos personalizados en formato .fbx .Ciertos tipos de activos pueden requerir configuraciones y opciones de exportación específicas de tu software de modelado de terceros.Para obtener más información, consulte las siguientes páginas:
En Unity, los objetos se importan en tu directorio Assets visible en la ventana del proyecto.En Roblox, las importaciones de activos se realizan en tu espacio de trabajo y en la sección Caja de herramientas o Inventario de la sección Gestor de activos.
Roblox también ofrece un plugin de código abierto Blender para simplificar el proceso de importación.
Transformaciones
Las transformaciones de props.engine y las de Roblox CFrames sirven para representar transformaciones 3D de objetos similares:
- 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 forma parte del CFrame.
- Ambos admiten multiplicación (es decir, composición) para transformaciones complejas y tienen métodos integrados para otras manipulaciones.
Colaboración
En Unity, colaboras con sistemas de control de versiones estándar o servicios pagados como Unity Control de Versión.
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 editar simultáneamente, gestión de grupos, permisos, redacción de guiones y más.Ver Colaboración.
Plugins
Al igual que las herramientas de Unity, Roblox Studio soporta plugins, que pueden simplificar o darle control adicional sobre varios aspectos del proceso de desarrollo.Los plugins están disponibles en la Tienda del creador, al igual que los recursos, muchos de forma gratis/gratuito.
Glosario
| Unidad | Roblox | Notas | | :--- | :--- | :--- | | Escena | Lugar | | | GameObject | Part o Model | Ver Diferencias filosóficas .| | Prefab | Paquete | | | Transform | CFrame | CFrame no incluye información de escala.Vea Transformaciones.| | Ventana de jerarquía | Ventana del explorador | | | Inspector | Ventana de propiedades | | Vista de escena | Vista de ventana | | Vista del juego | Vista de ventana | Las ventanas de vista se transfieren a una vista de juego cuando pruebas tu experiencia.| | Ventana del proyecto | Administrador de recursos o Caja de herramientas | | | Inspector de terreno | Editor de terreno | | | Punto de generación | SpawnLocation | | | Consola | Salida | | | Tienda de recursos | Tienda de creadores | | | Superposiciones | Barra de menú | | | Herramienta | Plugin | | |