Esta página incluye información para ayudar a los desarrolladores experimentados de Unity a comenzar con Roblox: orientación básica, una comparación conceptual y diferencias clave entre las dos plataformas.
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 activos ambientales).
- Ambos usan una estructura de árbol para las relaciones padre-hijo entre los 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 las ventanas de Jerarquía y Proyecto de Unity, con la carpeta Workspace como el elemento más reconocible.
Del mismo modo, el administrador de activos de Roblox Studio y la caja de herramientas se superponen con la ventana del proyecto Unity. El administrador de activos le permite administrar todos los activos dentro de su experiencia, mientras que la caja de herramientas le permite acceder a cualquier recurso que haya publicado. La caja de herramientas también le permite buscar en la tienda de creadores recursos de Roblox o de la comunidad, similar a la tienda de activos 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 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 mayor nivel 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, adjunta componentes como Rigidbody y Collider a un GameObject . 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 GameObject y un Part. El GameObject no tiene nada más que una posició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. Convertir un Part en algo más parecido a un GameObject significa eliminar muchas propiedades integradas. Por el contrario, puede hacer un GameObject que se parezca mucho a un Part agregando MeshFilter , MeshRenderer , Collider y Rigidbody.
Desde una perspectiva de scripting, GameObject es más similar al Roblox Instance, la clase base para todas las demás Clasesde Roblox, pero debido a que no puedes (y no puedes) crear objetos del tipo Instance, la comparación no es particularmente práctica.
Otra comparación es la Unidad GameObject con el Roblox Model. Los modelos actúan como un contenedor para una colección de partes interconectadas de la misma manera que puede establecer una relación padre-hijo entre muchos GameObjects en Unity. 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 Unity GameObject puede tener componentes para ParticleSystem , Physics3D , SpringConstraint y un script. En la ventana de Jerarquía, verás un solo GameObject llamado SpringyFireball. La ventana de Inspector muestra la colección de componentes y propiedades.
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 está disponible en Unity.
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.
Unity no tiene el concepto de diferentes tipos de scripts. Si eliges hacer un juego multijugador, Unity usa sus bibliotecas de red para indicar cuándo un GameObject (y sus scripts) debe ser exclusivo del 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, agrega código al método Update(). Para manejar eventos de colisión física, agrega código al método OnCollideEnter().
Los scripts de Roblox son más orientados a eventos. Accesas a una funcionalidad similar 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 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 considera habilitar la verificación de tipo estricta en los scripts de Roblox.
Para ver las diferencias básicas de sintaxis entre los lenguajes de scripting, consulta Luau y C# Comparison.
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 Unity, por lo que la implementación sería muy diferente.
Activos
Unity 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 Unity, los objetos se importan al directorio Assets, visible en la ventana del proyecto. 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.
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 Unity, colaboras con sistemas de control de versión estándar o servicios pagados como Control de Versión de Unity.
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 las herramientas de Unity, Roblox Studio admite complementos , que pueden simplificar o darle control adicional sobre varios aspectos del proceso de desarrollo. Los complementos están disponibles en la tienda de creadores, al igual que los activos, muchos de forma gratis/gratuito.
Glosario
| Unidad | Roblox | Notas | :--- | :--- | Escena | Lugar | | | GameObject | Part o Model | Véase Diferencias filosóficas | | Prefab | Paquete | | | Transformar | CFrame | CFrame no incluye información de escala. Véase Transformaciones | | | Hierarchy window | Explorer window | | | Inspector | Properties window | | Scene view | Viewport | | | Game view | Viewport | The Viewport transitions en una vista de juego cuando prueba su experiencia. | Project window | Prefab | Asset Manager o | Terrain Inspector | Terrain Editor | Spawn point | <32/32>