Utilidades
Las herramientas de edición masiva (Resize, Retime, Hue, Clipboard, Shifter) comparten el patrón de “seleccionar algo, modificar sus propiedades”. Las cuatro herramientas de utilidad que se presentan aquí hacen algo diferente — te ayudan a encontrar emisores, empaquetar el runtime del plugin, generar código para scripts del juego y supervisar la carga de rendimiento. Las propiedades no cambian; en cambio, estas herramientas exponen información o producen artefactos.
Este capítulo cubre las cuatro juntas, ya que cada una es pequeña.
Scan recorre todos los lugares del workspace y encuentra los emisores de Part-Icles. Es un diagnóstico, no un modificador — útil para catalogar los emisores en una escena compleja y para detectar aquellos con problemas de formato.
Qué hace
Sección titulada «Qué hace»Haz clic en el botón Scan All del QMenu, y el plugin:
- Recorre
workspace,ServerStorageyReplicatedStoragede forma recursiva. - Por cada instancia, comprueba si hay evidencia de ser un emisor de Part-Icles — ya sea el atributo
Transformed(formato actual), o un hijo llamadoFactors/BakedFactors(formatos más antiguos). - Clasifica las coincidencias en dos grupos — Fix (formato actual con problemas estéticos que pueden corregirse) y Migrate (formato antiguo que necesita conversión estructural).
- Muestra un banner en la parte superior del panel con un resumen de los recuentos.
Los grupos Fix y Migrate
Sección titulada «Los grupos Fix y Migrate»Las versiones anteriores del plugin almacenaban las propiedades de los emisores utilizando convenciones ligeramente distintas (nombres de atributos diferentes, estructuras de hijos diferentes). Cuando cargas un lugar creado con una versión antigua del plugin en una versión más nueva, esos emisores siguen funcionando, pero se marcan para Migrate — el plugin puede convertirlos al formato actual.
Los emisores en formato actual que tienen pequeños problemas — valores predeterminados de atributos desactualizados, carpetas hijas que el código más nuevo espera y que faltan — se marcan para Fix. El plugin puede corregirlos en su lugar.
El banner de Scan muestra dos recuentos y tres botones:
Fix N— aplica las correcciones estéticas a los N elementos marcados.Migrate N— ejecuta la conversión estructural en los N elementos marcados.Dismiss— cierra el banner sin realizar ninguna acción.
Cuándo usar Scan
Sección titulada «Cuándo usar Scan»Ejecuta Scan después de:
- Cargar un lugar creado con una versión antigua del plugin, para detectar lo que necesita migración.
- Hacer una reestructuración significativa de los emisores de tu escena, para confirmar que el plugin sigue reconociéndolos todos.
- Antes de publicar un lugar, como verificación de seguridad.
Para la mayoría del desarrollo activo, el banner de Scan no muestra nada que corregir. Es más útil como un pase de “antes de publicar” o “tras actualizar”.
Insert es la herramienta que proporciona a los scripts de tu juego algo que requerir. El plugin Part-Icles mantiene un módulo de runtime internamente; Insert copia ese módulo en tu workspace como una instancia Part_Icles, lista para ser utilizada por el código del juego.
Qué hace
Sección titulada «Qué hace»Haz clic en Insert Module en el QMenu:
- El plugin destruye cualquier
workspace.Part_Iclesexistente (para que puedas volver a insertar y actualizar). - Clona su módulo de runtime interno.
- Nombra el clon
Part_Iclesy lo emparenta bajoworkspace. - Selecciona el nuevo módulo para que puedas verlo en el Explorer de Studio.
- Crea un punto de control del historial de cambios de Studio llamado “Part-Icles: InsertScript” (para que la acción sea deshacible).
El resultado es un ModuleScript (o una Folder que lo contiene, según la versión) en workspace.Part_Icles. Tus scripts pueden requerirlo:
local Part_Icles = require(workspace:WaitForChild("Part_Icles"))Part_Icles:Activate()Por qué workspace y no ReplicatedStorage
Sección titulada «Por qué workspace y no ReplicatedStorage»La otra vía que produce un módulo de runtime es la herramienta Emit Code (más adelante en este capítulo). Abrir el panel Emit Code por primera vez clona un Part_Icles nuevo en ReplicatedStorage — esa es la convención desde la que los fragmentos que genera hacen require. Insert es un flujo separado que coloca el módulo específicamente en workspace, pensado para casos en los que:
- Quieres que el módulo se incluya con la jerarquía de un nivel/escena específico.
- Estás empaquetando un kit de VFX independiente y quieres tenerlo todo en una carpeta para mayor claridad.
- Necesitas reemplazar la copia de
ReplicatedStoragecon una versión específica más antigua o modificada.
Para la mayoría de los scripts de juego, el ReplicatedStorage.Part_Icles que obtienes al abrir Emit Code es lo que necesitas. Insert es para casos de empaquetado explícito.
Cuándo volver a usar Insert
Sección titulada «Cuándo volver a usar Insert»Cada actualización del plugin puede incluir cambios en el módulo de runtime. Las copias existentes de Part_Icles tanto en ReplicatedStorage como en workspace se actualizan automáticamente cuando reabres Studio con una versión más nueva del plugin — por lo que normalmente no necesitas volver a usar Insert solo por actualizaciones del plugin. Pero si has mantenido intencionalmente una copia antigua en workspace y quieres actualizarla, hacer clic en Insert Module de nuevo destruye la copia antigua y clona el runtime actual en su lugar.
Emit Code
Sección titulada «Emit Code»Emit Code genera un fragmento de Lua que activa los emisores seleccionados cuando se pega en un script del juego. Haz clic en el botón con una selección de emisores y el plugin produce el fragmento — una instrucción require, una llamada :Activate(), y una llamada :AbsoluteEmit() para cada elemento seleccionado.
Qué hace
Sección titulada «Qué hace»Abre el panel Emit Code con uno o más emisores seleccionados. El panel muestra:
- Un TextBox multilínea de solo lectura con el fragmento de Lua generado.
- Un botón Copy — copia el fragmento al portapapeles para pegarlo en el editor de scripts de Studio.
- Un botón Run — ejecuta el fragmento de inmediato, activando la emisión para probar sin salir del panel.
Cómo se ve el fragmento
Sección titulada «Cómo se ve el fragmento»Para un único emisor seleccionado en workspace.Sword.SparkBeam:
local Part_Icles = require(game.ReplicatedStorage:WaitForChild("Part_Icles"))Part_Icles:Activate()
local VFX = workspace.Sword.SparkBeamPart_Icles:AbsoluteEmit(VFX)Para múltiples emisores seleccionados:
local Part_Icles = require(game.ReplicatedStorage:WaitForChild("Part_Icles"))Part_Icles:Activate()
local VFX = { workspace.Effect1, workspace.Effect2, workspace.Effect3,}for _, item in VFX do Part_Icles:AbsoluteEmit(item)endLas cadenas de ruta se calculan a partir de la jerarquía de cada instancia — el plugin recorre las cadenas de padres y emite la ruta con puntos. Los elementos en ReplicatedStorage aparecen como game.ReplicatedStorage.MyEffect, los elementos en workspace aparecen como workspace.MyEffect (Workspace se reescribe en minúsculas workspace para el atajo global), y otros servicios siguen game.<Service>.<Path>. Los nombres que no son identificadores de Lua válidos usan notación de corchetes (workspace["Effect with spaces"]).
El filtro de ancestros redundantes
Sección titulada «El filtro de ancestros redundantes»Si tu selección incluye tanto un padre como sus descendientes (una Folder más los emisores que contiene), el fragmento solo incluye al padre — :AbsoluteEmit recorre los descendientes de forma recursiva, por lo que emitir el padre ya activa a los hijos. El plugin filtra cualquier elemento seleccionado cuyo ancestro también esté seleccionado, para mantener el fragmento generado limpio.
El botón Run ejecuta el fragmento ahora mismo, sin necesidad de copiar y pegar. Útil para pruebas rápidas — ajusta las propiedades del emisor en el panel, haz clic en Run, observa el resultado.
El botón Run usa el mismo flujo :AbsoluteEmit que el fragmento generado, por lo que lo que ves durante Run es exactamente lo que verán los scripts de tu juego publicado.
Cuándo usar Emit Code
Sección titulada «Cuándo usar Emit Code»- Has creado un efecto complejo y quieres escribir el código que lo activa. Emit Code te proporciona el código repetitivo.
- Estás comprobando si un efecto se reproduce correctamente cuando se activa — Run te permite activarlo sin tener que escribir un script primero.
- Estás documentando un efecto para otro programador — pega el fragmento en las notas de tu proyecto.
Optimization Indicator
Sección titulada «Optimization Indicator»Un pequeño indicador anclado en la parte inferior izquierda del HUD del plugin. Muestra Optimization: -- por defecto; una vez que seleccionas un elemento transformado (o varios), cambia a un porcentaje de 0 a 100 con un color según el rango.
Qué muestra
Sección titulada «Qué muestra»El indicador es una puntuación predictiva para la selección actual — no una lectura de carga de fotogramas en tiempo real. El plugin recorre los elementos seleccionados, lee los valores de Rate, Lifetime, EmitCount, EmitDuration, Enabled, TotalKeyFrames de cada uno, además de los indicadores de sombra, transparencia y flipbook, y calcula el coste máximo de partículas simultáneas si todos esos emisores se ejecutaran juntos. El resultado se normaliza respecto a un presupuesto interno y se muestra como porcentaje.
Los rangos de color:
- Verde (0 – 30%) — cómodamente por debajo del presupuesto. La mayoría de la autoría cae aquí.
- Amarillo (31 – 60%) — se está volviendo caro. Un puñado de estos en un mismo rig se acumulará.
- Rojo (61 – 100%) — pesado. Espera impacto en la tasa de fotogramas en hardware de gama baja una vez que esté emitiendo de verdad.
-- (dorado apagado) se muestra cuando no hay nada computable seleccionado — ni elementos transformados ni ParticleEmitters nativos.
Los elementos inactivos — emisores con EmitCount = 0, Enabled = false y sin EmitDuration configurado — se registran con coste 0. Las versiones anteriores del plugin los contaban como si estuvieran activos, lo que daba una falsa advertencia roja en una escena llena de emisores en espera aguardando a que un script los activara. A partir de la v33, solo los emisores que pueden dispararse por sí solos contribuyen a la puntuación.
Cuándo consultarlo
Sección titulada «Cuándo consultarlo»Échale un vistazo mientras creas. Si ajustas un único emisor y la puntuación sube a amarillo o rojo, ese emisor por sí solo no escala bien en una escena poblada. Reduce Rate, acorta Lifetime, baja EmitCount, simplifica los hijos anidados, o mueve el efecto a emisión del lado del cliente para repartir el coste entre clientes en lugar de en el servidor.
La puntuación depende de la selección — solo se actualiza cuando cambia tu selección. Así que ajustas una propiedad, vuelves a seleccionar para actualizar, observas cómo cambia el número. El ciclo de autoría más eficiente es: ajustar → volver a seleccionar → leer → repetir.
Qué no te dice
Sección titulada «Qué no te dice»La puntuación es una estimación predictiva del peor caso basada en las propiedades creadas, no una medición en tiempo real. No perfila el coste real de renderizado, el tiempo de carga de texturas ni la complejidad del shader — solo el coste de simulación que el plugin incurriría si cada emisor seleccionado se ejecutara continuamente a su Rate creado.
Tampoco conoce el hardware de tus jugadores. El modelo de coste está calibrado frente a un presupuesto de referencia interno ajustado para que un efecto medio típico caiga en la banda verde. Una puntuación del 30% en una sesión de Studio en una estación de trabajo sigue siendo un 30% en un dispositivo de gama baja — recurre al MicroProfiler de Roblox cuando quieras una lectura real del coste por fotograma en hardware representativo.
El botón Opt. Indicator del QMenu activa y desactiva el indicador, por si quieres ocultarlo mientras te concentras en la autoría visual.
Dónde se encuentran las herramientas de utilidad en el panel
Sección titulada «Dónde se encuentran las herramientas de utilidad en el panel»Las tres primeras (Scan, Insert, Emit Code) están en el QMenu — el menú de herramientas secundario del plugin, al que se accede mediante un botón en el panel principal. El QMenu alberga las acciones de todo el plugin (ajustes de tema, vista previa de movimiento, el inventario) — cuando una acción no encaja en una propiedad por emisor ni en una herramienta de edición masiva, vive aquí.
El Optimization Indicator está siempre activo en el propio HUD, en la parte inferior izquierda, sin necesidad de acceder a ningún menú.
Qué sigue
Sección titulada «Qué sigue»Ahora has visto el Toolbench completo — nueve herramientas (cinco de edición masiva + cuatro de utilidad) que operan sobre una selección de Studio. La siguiente sección, Referencia de API, cubre la API de runtime: cómo requerir el módulo del plugin desde un script del juego y activar emisiones programáticamente (:Emit, :EnableEmit, :Disable, :AbsoluteEmit, :EmitAnimate).