EditableMesh
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
EditableMesh cambia la malla visual aplicada cuando se enlaza a una MeshPart, permitiendo la búsqueda y la modificación de la malla tanto en Studio como en la experiencia.
Activación para experiencias publicadas
Para fines de seguridad, el uso de EditableMesh falla por defecto para las experiencias publicadas.Para habilitar el uso, debe tener 13 años o más verificados y verificado el ID.Después de verificarse, abra las Configuraciones de juego de Studio, seleccione Seguridad y habilite el botón Permitir API de malla / imagen .
Permisos
Para evitar el mal uso, AssetService:CreateEditableMeshAsync() solo te permitirá cargar y editar recursos de malla:
- Que son propiedad del creador de la experiencia (si la experiencia es propiedad de un individuo).
- Que son propiedad de un grupo (si la experiencia es propiedad del grupo).
- Que son propiedad del usuario de Studio iniciado de sesión (si el archivo del lugar aún no se ha guardado o publicado en Roblox).
Límites de memoria
Los recursos editables son actualmente costosos para el uso de memoria.Para minimizar su impacto en el rendimiento del cliente, EditableMesh tiene presupuestos estrictos de memoria del lado del cliente, aunque el servidor, Studio y los plugins operan con memoria ilimitada.El uso de FixedSize puede ayudarle a mantenerse dentro del presupuesto de memoria y, en algunos escenarios, vincular uno EditableMesh a múltiples MeshParts (multirespaldo) puede ayudar con la optimización de la memoria.
Creación y visualización
Un EditableMesh se puede crear a partir de un existente Content de un MeshPart o una ID de malla usando AssetService:CreateEditableMeshAsync() , o un vacío EditableMesh se puede crear con AssetService:CreateEditableMesh() .Luego se puede mostrar, modificar y actualizar su modelo de colisión.No todos los pasos son necesarios; por ejemplo, quizás quieras crear un EditableMesh sólo para raycast sin mostrarlo nunca.
local AssetService = game:GetService("AssetService")
-- Crear malla editable vacía
local editableMesh = AssetService:CreateEditableMesh()
-- Crear EditableMesh a partir de la ID del activo
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID))
end)
-- Crear EditableMesh a partir de otro EditableMesh
local editableMeshFromAnother = nil
local success, errorMessage = pcall(function()
editableMeshFromAnother = AssetService:CreateEditableMeshAsync(Content.fromObject(OTHER_EDITABLE_MESH))
end)
-- Crear EditableMesh a partir de MeshPart
local editableMeshFromMeshPart = nil
local success, errorMessage = pcall(function()
editableMeshFromMeshPart = AssetService:CreateEditableMeshAsync(MESH_PART.MeshContent)
end)
Un EditableMesh se muestra cuando está vinculado a un nuevo MeshPart , a través de AssetService:CreateMeshPartAsync() .Puedes crear más instancias que hagan referencia al mismo , o enlazar a una existente a través de .
local AssetService = game:GetService("AssetService")
local Workspace = game:GetService("Workspace")
-- Crear EditableMesh a partir de la ID del activo
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID))
end)
-- Crear una nueva pieza de malla vinculada a la EditableMesh
local newMeshPart = nil
local success, errorMessage = pcall(function()
newMeshPart = AssetService:CreateMeshPartAsync(Content.fromObject(editableMeshFromAsset))
end)
-- Alternativamente, enlaza la nueva pieza de malla creada anteriormente a una pieza de malla existente
local existingMeshPart = Workspace:FindFirstChild("EXISTING_MESH_PART")
existingMeshPart:ApplyMesh(newMeshPart)
Para recalcular la geometría de colisión y fluidos después de editar, puedes volver a llamar AssetService:CreateMeshPartAsync() y MeshPart:ApplyMesh() para actualizar un MeshPart existente.Generalmente se recomienda hacer esto al final de una edición conceptual, no después de llamadas individuales a métodos que manipulan la geometría.Los cambios visuales en la malla siempre se reflejarán inmediatamente por el motor, sin la necesidad de llamar AssetService:CreateMeshPartAsync() .
Mallas de tamaño fijo
Al crear un EditableMesh desde un recurso de malla existente (a través de AssetService:CreateEditableMeshAsync() ), el resultante malla editable se fija de tamaño predeterminado por defecto.Las mallas de tamaño fijo son más eficientes en términos de memoria, pero no puedes cambiar el número de vértices, caras o atributos.Solo se pueden editar los valores de los atributos y posiciones de vértice.
local AssetService = game:GetService("AssetService")
-- Crear EditableMesh sin predeterminado de tamaño fijo
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID), {FixedSize = false})
end)
ID de vértice/cara estable
Muchos métodos EditableMesh toman vértice , normal , UV , color y cara IDs.Estos se representan como enteros en Luau, pero requieren un manejo especial.La diferencia principal es que las identidades son estables y se mantienen iguales incluso si cambian otras partes de la malla.Por ejemplo, si un EditableMesh tiene cinco vértices {1, 2, 3, 4, 5} y eliminas el vértice 4 , los nuevos vértices serán {1, 2, 3, 5} .
Tenga en cuenta que los ID no se garantizan que estén en orden y puede haber agujeros en la numeración, por lo que al iterar a través de vértices o caras, debe iterar a través de la tabla devuelta por GetVertices() o GetFaces() .
Atributos de vértice dividido
Un vértice es una esquina de una cara y se conecta topológicamente caras juntas.Los vértices pueden tener varios atributos: posición, normal, coordenada UV, color y transparencia.
A veces es útil para todas las caras que tocan un vértice usar los mismos valores de atributo, pero a veces querrás que diferentes caras usen diferentes valores de atributo en el mismo vértice.Por ejemplo, en una esfera lisa, cada vértice solo tendrá un normal.En contraste, en la esquina de un cubo, el vértice tendrá 3 normales diferentes (uno por cada cara adyacente).También puedes tener costuras en las coordenadas UV o cambios bruscos en los colores del vértice.
Al crear caras, cada vértice tendrá por defecto uno de cada atributo: uno normal, una coordenada UV y un color/transparencia.Si quieres crear una costura, deberás crear nuevos atributos y ponerlos en la cara.Por ejemplo, este código creará un cubo afilado:
local AssetService = game:GetService("AssetService")
-- Dados 4 ID de vértice, añade un nuevo normal y 2 triángulos, haciendo un cuadrado afilado
local function addSharpQuad(editableMesh, vid0, vid1, vid2, vid3)
local nid = editableMesh:AddNormal() -- Esto crea una identificación normal que se calcula automáticamente
local fid1 = editableMesh:AddTriangle(vid0, vid1, vid2)
editableMesh:SetFaceNormals(fid1, {nid, nid, nid})
local fid2 = editableMesh:AddTriangle(vid0, vid2, vid3)
editableMesh:SetFaceNormals(fid2, {nid, nid, nid})
end
-- Hace un cubo con bordes rebajados entre los 6 lados
local function makeSharpCube()
local editableMesh = AssetService:CreateEditableMesh()
local v1 = editableMesh:AddVertex(Vector3.new(0, 0, 0))
local v2 = editableMesh:AddVertex(Vector3.new(1, 0, 0))
local v3 = editableMesh:AddVertex(Vector3.new(0, 1, 0))
local v4 = editableMesh:AddVertex(Vector3.new(1, 1, 0))
local v5 = editableMesh:AddVertex(Vector3.new(0, 0, 1))
local v6 = editableMesh:AddVertex(Vector3.new(1, 0, 1))
local v7 = editableMesh:AddVertex(Vector3.new(0, 1, 1))
local v8 = editableMesh:AddVertex(Vector3.new(1, 1, 1))
addSharpQuad(editableMesh, v5, v6, v8, v7) -- Delante
addSharpQuad(editableMesh, v1, v3, v4, v2) -- Volver
addSharpQuad(editableMesh, v1, v5, v7, v3) -- Izquierda
addSharpQuad(editableMesh, v2, v4, v8, v6) -- Derecha
addSharpQuad(editableMesh, v1, v2, v6, v5) -- Inferior
addSharpQuad(editableMesh, v3, v7, v8, v4) -- Superior
editableMesh:RemoveUnused()
return editableMesh
end
Enrollado
Las caras de malla tienen un lado frontal y un lado trasero.Cuando se dibujan mallas, solo se dibuja el frente de las caras por defecto, aunque puedes cambiar esto al establecer la propiedad de malla DoubleSided en true.
El orden de los vértices alrededor de la cara determina si estás mirando al frente o a la espalda.La frente del rostro es visible cuando los vértices van en sentido contrario alrededor de ella.

Posiciones de FACS
Las cabezas animables usan el Sistema de codificación de acciones faciales (FACS).Vea la referencia de poses de FACS para información útil al usar GetFacsPoses() y métodos similares.
Cada posición de FACS se especifica por un valor Enum.FacsActionUnit .Para la postura FACS, las huesos virtuales pueden tener cada una un CFrame que transforma el inicial CFrame de los huesos en la postura de enlazamiento de la malla en la postura de CFrame para la unidad de acción de FACS para esa postura.Todo el hueso CFrames está en el espacio local de la malla.
Estas poses de FACS se mezclan durante la animación.A veces, la mezcla de las poses base produce malos resultados.En esos casos, puedes anular la mezcla de combinaciones específicas de poses de base con una postura correctora que sea más agradable.Una postura correctiva se especifica por 2 o 3 valores Enum.FacsActionUnit correctivos.Al igual que una posa de FACS de base, para una posa correctiva, los huesos virtuales pueden tener cada uno un CFrame que transforme el CFrame inicial de los huesos en la posa de enlazamiento del modelo en el CFrame para ese corrector de FACS.
Limitaciones
EditableMesh actualmente tiene un límite de 60,000 vértices y 20,000 triángulos. Intentar agregar demasiados vértices o triángulos causará un error.
Resumen
Propiedades
Devuelve true si una malla es de tamaño fijo.
Métodos
Agrega un nuevo color a la geometría y devuelve una identificación de color estable.
Añade un nuevo normal a la geometría y devuelve un ID normal estable.
Añade un nuevo triángulo a la malla y devuelve una identificación de cara estable.
Añade un nuevo UV a la geometría y devuelve una identificación UV estable.
Añade un nuevo vértice a la geometría y devuelve un ID de vértice estable.
Destruye la malla.
Encuentra el punto más cercano en la superficie del malla.
Encuentra el vértice más cercano a un punto específico en el espacio.
Busca todos los vértices dentro de una esfera específica.
Devuelve una lista de caras adyacentes a una cara dada.
Devuelve una lista de vértices adyacentes a un vértice dado.
Devuelve el color para el ID de color dado.
Devuelve el color alpha (transparencia) en el ID de color dado.
Devuelve todos los colores de la malla.
Devuelve las ID de color del rostro para los vértices en el rostro.
Devuelve las ID normales del rostro para los vértices en el rostro.
Devuelve las ID UV del rostro para los vértices en el rostro.
Devuelve las ID de vértice del rostro.
Devuelve todos los rostros de la malla.
Devuelve el vector normal para el ID normal dado.
Devuelve todos los normales de la malla.
Obtiene la posición de un vértice.
Devuelve las coordenadas UV en el ID UV dado.
Devuelve todos los UVs de la malla.
Devuelve todos los vértices como una lista de ID de vértice estables.
Devuelve una cadena que describe una identificación estable, útil para fines de depuración.
Fusiona vértices que se tocan entre sí.
Elimina una cara usando su ID de cara estable.
Elimina todos los vértices no utilizados, normales, UVs y colores, y devuelve las ID eliminadas.
Restablece esta identificación normal para que se cálcula automáticamente.
Establece el color para un ID de color.
Establece el color alpha (transparencia) para un ID de color.
Establece los colores de vértice del rostro a nuevos ID de color.
Establece las normales del vértice de la cara a nuevas identidades normales.
Establece los UV del vértice de la cara a nuevas identidades de UV.
Establece los vértices del rostro a nuevas identidades de vértice.
Establece el normal para una identificación normal.
Establece una posición de vértice en el espacio de objeto local de la malla.
Establece las coordenadas UV para un ID UV.
Separa todas las caras en la malla para que sean triángulos.
Propiedades
FixedSize
Las mallas de tamaño fijo permiten cambiar los valores de los atributos de vértice, pero no permiten agregar o eliminar vértices y triángulos.
Métodos
AddColor
Agrega un nuevo color a la geometría y devuelve una identificación de color estable.
Parámetros
El nuevo color.
El color alfa (transparencia).
Devuelve
ID de color estable del nuevo color.
AddNormal
Añade un nuevo normal a la geometría y devuelve un ID normal estable. Si el valor normal no se especifica, el normal se calculará automáticamente.
Parámetros
El vector normal. Si no se especifica el valor normal, se calculará automáticamente.
Devuelve
ID normal estable del nuevo normal.
AddTriangle
Añade un nuevo triángulo a la malla y devuelve una identificación de cara estable.
Parámetros
ID del primer vértice del triángulo.
ID del segundo vértice del triángulo.
ID del tercer vértice del triángulo.
Devuelve
ID de cara estable del nuevo rostro.
AddUV
Añade un nuevo UV a la geometría y devuelve una identificación UV estable.
Parámetros
La nueva coordenada UV.
Devuelve
ID UV estable del nuevo UV.
AddVertex
Añade un nuevo vértice a la geometría y devuelve un ID de vértice estable.
Parámetros
Posición en el espacio de objeto local de la malla.
Devuelve
ID de vértice estable del nuevo vértice.
Destroy
Destruye el contenido de la malla, recuperando inmediatamente la memoria utilizada.
Devuelve
FindClosestPointOnSurface
Encuentra el punto más cercano en la superficie del malla.Devuelve la identificación del rostro, apunta en la malla en el espacio de objeto local y la coordenada barycentrica de la posición dentro del rostro.Vea RaycastLocal() para más información sobre las coordenadas barycéntricas.
Parámetros
Posición de punto en el espacio de objeto local de la malla.
Devuelve
Triple de la identificación del rostro, punto en la malla en el espacio de objeto local y la coordenada barycentrica de la posición dentro del rostro.
FindClosestVertex
Encuentra el vértice más cercano a un punto específico en el espacio y devuelve una identificación de vértice estable.
Parámetros
Posición de punto en el espacio de objeto local de la malla.
Devuelve
ID de vértice estable más cercano al punto especificado en el espacio.
FindVerticesWithinSphere
Encuentra todos los vértices dentro de una esfera específica y devuelve una lista de ID de vértice estable.
Parámetros
Centro de la esfera en el espacio de objeto local de la malla.
Radio de la esfera.
Devuelve
Lista de ID de vértice estable dentro de la esfera solicitada.
GetAdjacentFaces
Dada una identificación de cara estable, devuelve una lista de caras adyacentes.

Parámetros
Devuelve
Lista de ID de cara adyacente al rostro dado.
GetAdjacentVertices
Dada una ID de vértice estable, devuelve una lista de vértices adyacentes.

Parámetros
ID de vértice alrededor del cual obtener vértices adyacentes.
Devuelve
Lista de ID de vértices adyacentes alrededor del vértice dado.
GetColor
Devuelve el color para el ID de color dado.
Parámetros
ID de color para obtener el color.
Devuelve
Color para el ID de color estable solicitado.
GetColorAlpha
Devuelve el color alpha (transparencia) en el ID de color estable dado.
Parámetros
ID de color para obtener la alfa.
Devuelve
Color alpha en el ID de color estable de la solicitud.
GetColors
Devuelve todos los colores de la malla como una lista de ID de color estable.
Devuelve
Lista de ID de color estable.
GetFaceColors
Devuelve las ID de color del rostro para los vértices en el rostro.
Parámetros
ID de cara para obtener los ID de color.
Devuelve
Lista de ID de color utilizados para los vértices en la cara dada.
GetFaceNormals
Devuelve las ID normales del rostro para los vértices en el rostro.
Parámetros
ID de cara para obtener las ID normales.
Devuelve
Lista de ID normales utilizados para los vértices en la cara dada.
GetFaceUVs
Devuelve las ID UV del rostro para los vértices en el rostro.
Parámetros
ID de cara para obtener los ID de UV.
Devuelve
Lista de ID de UV utilizados para los vértices en la cara dada.
GetFaceVertices
Devuelve las ID de vértice del rostro.
Parámetros
Devuelve
Lista de ID de vértice alrededor del rostro dado.
GetFaces
Devuelve todos los rostros de la malla como una lista de ID de rostros estables.
Devuelve
Lista de ID de cara estables.
GetNormal
Devuelve el vector normal para el ID normal dado.
Parámetros
ID normal para obtener el vector normal.
Devuelve
Vectores normales en la ID normal solicitada.
GetNormals
Devuelve todos los normales de la malla como una lista de ID normales estables.
Devuelve
Lista de ID normales estables.
GetPosition
Obtiene la posición de un vértice en el espacio de objeto local de la malla.
Parámetros
ID de vértice estable para el cual obtener la posición.
Devuelve
Posición de un vértice en el espacio de objeto local de la malla.
GetUV
Devuelve las coordenadas UV en el ID UV dado.
Parámetros
ID UV para el cual obtener la coordenada UV.
Devuelve
Coordenadas UV en la ID UV solicitada.
GetUVs
Devuelve todos los UV de la malla como una lista de ID UV estables.
Devuelve
Lista de ID de UV estables.
GetVertices
Devuelve todos los vértices como una lista de ID de vértice estables.
Devuelve
Lista de ID de vértice estable.
IdDebugString
Devuelve una cadena que describe un ID estable, útil para fines de depuración, como f17 o v12 , que contiene el tipo, el número de ID y la versión.
Parámetros
ID para el cual devolver una cadena de información de depuración.
Devuelve
Texto que describe el ID en formato legible por el hombre.
MergeVertices
Fusiona vértices que se tocan entre sí, para usar un solo ID de vértice pero mantener los otros ID de atributos originales.
Parámetros
La distancia en la que se considera que los vértices se tocan entre sí.
Devuelve
Un mapeo de la antigua identificación de vértice a la nueva identificación de vértice para los vértices que se han fusionado.
RaycastLocal
Lanza un rayo y devuelve un punto de intersección, una identificación de cara y coordenadas barycéntricas.Los inputs y outputs de este método están en el espacio de objeto local de la malla.
Un coordinada barycentrica es una manera de especificar un punto dentro de una cara como una combinación ponderada de los 3 vértices de la cara.Esto es útil como una forma general de mezclar atributos de vértice.Vea el ejemplo de código de este método como una ilustración.
Parámetros
Origen del rayo en el espacio de objeto local de la malla.
Dirección del rayo.
Devuelve
Triple del punto de intersección, ID de cara y coordenadas barycéntricas.
Muestras de código
This code finds the position and UV coordinates of the closest point on an EditableMesh to the input point.
local AssetService = game:GetService("AssetService")
-- Initialize EditableMesh in space
local editableMesh = nil
local success, errorMsg = pcall(function()
editableMesh = AssetService:CreateEditableMeshAsync(Content.fromUri("rbxassetid://ASSET_ID"))
end)
local meshPart = nil
if success and editableMesh then
meshPart = AssetService:CreateMeshPartAsync(
Content.fromObject(editableMesh),
{ CollisionFidelity = Enum.CollisionFidelity.Hull }
)
meshPart.Parent = workspace
else
print(errorMsg)
end
local function castRayFromCamera(position)
if not meshPart then
return
end
-- Create ray from camera along the direction of a clicked point
local camera = workspace.CurrentCamera
local ray = camera:ScreenPointToRay(position.X, position.Y)
-- Convert to object space to use with RaycastLocal()
local relativeOrigin = meshPart.CFrame:PointToObjectSpace(ray.Origin)
local relativeDirection = meshPart.CFrame:VectorToObjectSpace(ray.Direction)
local triangleId, point, barycentricCoordinate
triangleId, point, barycentricCoordinate = editableMesh:RaycastLocal(relativeOrigin, relativeDirection * 100)
if not triangleId then
-- Didn't hit any triangles
return
end
-- Interpolate UVs within the triangle
local vert1, vert2, vert3 = editableMesh:GetTriangleVertices(triangleId)
local uv0 = editableMesh:GetUV(vert1)
local uv1 = editableMesh:GetUV(vert2)
local uv2 = editableMesh:GetUV(vert3)
local u = (barycentricCoordinate.x * uv0.x) + (barycentricCoordinate.y * uv1.x) + (barycentricCoordinate.z * uv2.x)
local v = (barycentricCoordinate.x * uv0.y) + (barycentricCoordinate.y * uv1.y) + (barycentricCoordinate.z * uv2.y)
return Vector2.new(u, v)
end
RemoveFace
Elimina una cara usando su ID de cara estable.
Parámetros
Devuelve
RemoveUnused
Elimina todos los vértices, normales, UVs y colores que no se usan en ninguna cara, y devuelve las ID eliminadas.
Devuelve
Todas las ID estables eliminadas.
ResetNormal
Restablece esta identificación normal para que se cálcula automáticamente en función de la forma de la malla, en lugar de establecerse manualmente.
Parámetros
ID normal estable para restablecer.
Devuelve
SetColor
Establece el color para un ID de color.
Parámetros
ID de color estable para el cual establecer el color.
Color para establecer.
Devuelve
SetColorAlpha
Establece el color alpha (transparencia) para un ID de color.
Parámetros
ID de color estable para el cual establecer el alfa de color.
Alpha para establecer.
Devuelve
SetFaceColors
Establece los colores de vértice del rostro a nuevos ID de color.
Parámetros
ID de cara para actualizar los colores de vértice.
Lista de nuevos ID de color estable para usar para los vértices del rostro dado.
Devuelve
SetFaceNormals
Establece las normales del vértice de la cara a nuevas identidades normales.
Parámetros
ID de cara para actualizar los normales de vértice.
Lista de nuevas identidades estables normales para usar para los vértices del rostro dado.
Devuelve
SetFaceUVs
Establece los UV del vértice de la cara a nuevas identidades de UV.
Parámetros
ID de cara para actualizar los UV de vértice.
Lista de nuevas identidades UV estables para usar para los vértices del rostro dado.
Devuelve
SetFaceVertices
Establece los vértices del rostro a nuevas identidades de vértice.
Parámetros
ID de cara para actualizar los vértices.
Lista de nuevos ID de vértice estable para usar para el rostro dado.
Devuelve
SetNormal
Establece el normal para una identificación normal. Esto cambiará el valor normal para cada vértice de cara que use la identificación normal.
Parámetros
ID normal estable para el cual establecer el vector normal.
Vectores normales para establecer.
Devuelve
SetPosition
Establece una posición de vértice en el espacio de objeto local de la malla.
Parámetros
ID de vértice estable del vértice a posicionar.
Posición en el espacio de objeto local de la malla.
Devuelve
SetUV
Establece las coordenadas UV para un ID UV.
Parámetros
ID UV para el cual establecer las coordenadas UV.
Coordenadas UV.
Devuelve
Triangulate
Separa todas las caras en la malla para que sean triángulos.Actualmente esto no hace nada ya que solo se pueden crear triángulos, pero si tu código depende de triángulos, se recomienda que llames a este método después de llamar AssetService:CreateEditableMeshAsync() .