Portapapeles
Dos emisores en tu escena deben compartir el mismo comportamiento de desvanecimiento, pero son de tipos diferentes — uno es un Part, el otro es un Beam. Ambos tienen gráficos de Transparency, y has dibujado una curva hermosa para el Part. Quieres aplicar la misma curva al Beam.
O bien: tienes diez emisores Part que deberían compartir los mismos Speed, Drag y Acceleration, pero solo has configurado uno de ellos — y quieres que los otros nueve coincidan.
La herramienta Portapapeles se encarga de ambos casos. Elige una fuente, selecciona qué propiedades copiar y pega en uno o más destinos. Las propiedades que se superponen entre los tipos de fuente y destino se transfieren; las propiedades específicas del tipo (un gráfico Speed en un Part transformado frente a un rango Speed en un PE nativo) se convierten u omiten según corresponda.
El diseño del panel
Sección titulada «El diseño del panel»Cuando abres el Portapapeles con una selección, el panel muestra:
- Los botones Copy y Paste en la parte superior.
- Un cuadro de búsqueda para filtrar la lista de propiedades.
- Una lista desplazable de interruptores, uno por propiedad copiable, organizada por categoría (Spawning, Appearance, Movement, Shape, Flipbook, Advanced).
Los interruptores están activados de forma predeterminada — todas las propiedades se incluyen en la copia. Desactiva los que no quieras transferir. La lista se filtra para mostrar solo las categorías relevantes para los tipos de la selección actual — seleccionar un Part muestra las categorías relevantes para Part; seleccionar una mezcla muestra la unión.
Haz clic en Copy para capturar los valores de origen del primer elemento seleccionado de cada tipo aplicable. Haz clic en Paste para aplicar los valores capturados a todos los elementos seleccionados actualmente.
Cómo funciona la copia
Sección titulada «Cómo funciona la copia»Copy lee del primer elemento de cada tipo en la selección. Si tienes tres Parts y dos Beams seleccionados, Copy lee:
- Los valores del primer Part para cada propiedad relevante para Part.
- Los valores del primer Beam para cada propiedad relevante para Beam.
Los valores capturados se almacenan en el búfer del portapapeles del plugin (un mapa en memoria indexado por nombre de propiedad). El búfer persiste hasta que vuelvas a hacer Copy o cierres el panel.
El valor de cada propiedad se captura con su tipo nativo — un gráfico NumberSequence sigue siendo un NumberSequence, un NumberRange sigue siendo un NumberRange, un enum sigue siendo un enum, etc. El portapapeles no normaliza entre tipos en el momento de la copia.
Cómo funciona el pegado
Sección titulada «Cómo funciona el pegado»Paste aplica los valores del búfer a cada elemento seleccionado. Para cada elemento:
- Recorre los interruptores de propiedades. Para cada uno que esté marcado:
- Busca el valor capturado en el búfer.
- Convierte el valor al formato esperado del tipo (ver “Conversión de tipos” más abajo).
- Escribe el valor en la propiedad del elemento.
Los elementos que no tienen la propiedad se omiten. Los elementos que tienen una propiedad de un tipo diferente al que está en el búfer reciben el valor convertido si la conversión es posible, o se omiten si no lo es.
Conversión de tipos al pegar
Sección titulada «Conversión de tipos al pegar»El plugin gestiona algunas incompatibilidades de tipos comunes:
- NumberRange ↔ number.
Trail.Lifetimees un número único; elLifetimede un Part / Beam / PointLight transformado es unNumberRange. Copiar un NumberRange a un Trail usa el punto medio del rango ((Min + Max) / 2) como número único; copiar el número de un Trail a un Part lo usa como Min y Max medianteNumberRange.new(value). - Enum de Material.
Part.MaterialyMeshPart.Materialusan el mismo enum. Copiar entre ellos funciona directamente. El portapapeles almacena el nombre del enum como cadena de texto para mayor resiliencia ("Plastic"), y reconstruye el enum al pegar medianteEnum.Material[name]. - Estados de GraphBlender. Al copiar de un Beam a otro, la lista de estados del Blender (el array de instancias
Configurationdentro de la carpetaGraphBlender) se transfiere como una unidad. Los estados existentes del Beam de destino se reemplazan con los de la fuente. - Speed nativo de PE (
NumberRange) vs Speed de Part transformado (NumberSequence). Estos no se convierten — el portapapeles los omite cuando elSpeeddel destino es de un tipo diferente al que está en el búfer.
Para los casos que sí se convierten, el resultado suele ser el que se esperaba. Para el caso que no lo hace (rango vs secuencia de Speed), el plugin omite silenciosamente esa propiedad sin generar un error.
Propiedades con casos especiales
Sección titulada «Propiedades con casos especiales»Algunas propiedades tienen un almacenamiento inusual que el portapapeles gestiona específicamente:
- Material — almacenado en el Part hijo
RenderTemplate, no directamente en el Part de origen. El plugin lee deRenderTemplate.Materialy escribe de la misma manera. - Blender (Beam GraphBlender) — almacenado como una carpeta de hijos Configuration, no como un único atributo. El portapapeles captura toda la estructura de la carpeta y la reconstruye al pegar.
- EmitCount, EmitDelay, EmitDuration — almacenados como atributos a nivel de elemento en la instancia de origen, no en la Configuration
PartIcleProperties. El portapapeles los lee y escribe mediante:GetAttribute/:SetAttribute. - Propiedades de PE nativo — almacenadas directamente en la instancia PE. Misma lectura/escritura, sin indirección de Configuration.
Compatibilidad con PE nativo y Trail
Sección titulada «Compatibilidad con PE nativo y Trail»El Portapapeles funciona entre instancias transformadas y nativas cuando las propiedades se superponen. Copia el gráfico Color de un Part transformado y pégalo en el gráfico Color de un PE nativo — ambos son tipos ColorSequence, por lo que la transferencia funciona directamente. Copia el gráfico Speed de un Part transformado (NumberSequence) al Speed de un PE nativo (NumberRange) — esto se omite, porque los tipos no coinciden.
La regla general: las propiedades con nombres y tipos coincidentes se transfieren. Las propiedades con nombres coincidentes pero tipos diferentes se convierten (si el plugin lo gestiona) o se omiten.
Filtrado de la lista de interruptores mediante búsqueda
Sección titulada «Filtrado de la lista de interruptores mediante búsqueda»El cuadro de búsqueda en la parte superior filtra los interruptores de propiedades por nombre. Escribir “size” reduce la lista a todas las propiedades que contienen “size” en su nombre (SizeX, SizeY, SizeZ, BloomSize, WidthScale si coincide). El filtro no distingue entre mayúsculas y minúsculas y se basa en subcadenas. Útil cuando quieres activar o desactivar solo unas pocas propiedades de entre decenas.
Cuándo usar el Portapapeles
Sección titulada «Cuándo usar el Portapapeles»El Portapapeles es la herramienta adecuada cuando:
- Quieres copiar propiedades específicas entre emisores, con control explícito sobre cuáles se transfieren.
- La fuente y el destino son instancias diferentes que deben compartir valores para algunas propiedades.
- Necesitas transferencias entre tipos (Part → Beam para un Color compartido, por ejemplo).
Otras herramientas cubren otros casos:
- Duplicación completa de emisores — simplemente usa
Instance:Clone()en la fuente y luego vuelve a transformar si es necesario. Más rápido que copiar/pegar para duplicación estructural completa. - Cambios uniformes masivos — Resize, Retime o Hue. Modifican cada emisor en la selección por un factor; el Portapapeles transfiere valores específicos que has establecido en una fuente.
Qué viene a continuación
Sección titulada «Qué viene a continuación»Shifter es estructuralmente similar al Portapapeles — la misma lista de interruptores por propiedad — pero en lugar de copiar valores, aplica operaciones aritméticas (+, -, ×, ÷) a los valores existentes de la selección.