EditableMesh
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
EditableMesh altera a malha visual aplicada quando vinculada a um MeshPart, permitindo a busca e modificação da malha tanto no Studio quanto na experiência.
Habilitando Experiências Publicadas
Para fins de segurança, usar EditableMesh falha por padrão para experiências publicadas.Para habilitar o uso, você deve ter idade 13+ verificada e ID verificada.Depois de verificado, abra as Configurações de Jogo do Studio, selecione Segurança e ative o botão Permitir APIs de Malha/Imagem .
Permissões
Para evitar o uso indevido, AssetService:CreateEditableMeshAsync() só permitirá que você carregue e edite recursos de malha:
- Que são de propriedade do criador da experiência (se a experiência for de propriedade de um indivíduo).
- Que pertencem a um grupo (se a experiência for de propriedade do grupo).
- Que são de propriedade do usuário do Studio logado (se o arquivo do lugar ainda não foi salvo ou publicado no Roblox).
Limites de Memória
Recursos editáveis são atualmente caros para uso de memória.Para minimizar seu impacto no desempenho do cliente, EditableMesh tem orçamentos de memória rigorosos do lado do cliente, embora o servidor, o Studio e os plugins operem com memória ilimitada.Usar FixedSize pode ajudá-lo a permanecer dentro do orçamento de memória e, em alguns cenários, ligar um EditableMesh a vários MeshParts (multiresposta) pode ajudar com a otimização de memória.
Criação e Exibição
Um EditableMesh pode ser criado a partir de um existente Content de um MeshPart ou um ID de malha usando AssetService:CreateEditableMeshAsync() , ou um vazio EditableMesh pode ser criado com AssetService:CreateEditableMesh() .Então, pode ser exibido, modificado e seu modelo de colisão atualizado.Nem todos os passos são necessários; por exemplo, você pode querer criar um EditableMesh apenas para raycast sem nunca exibi-lo.
local AssetService = game:GetService("AssetService")
-- Criar malha editável vazia
local editableMesh = AssetService:CreateEditableMesh()
-- Criar EditableMesh a partir do ID do recurso
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID))
end)
-- Criar EditableMesh a partir de outro EditableMesh
local editableMeshFromAnother = nil
local success, errorMessage = pcall(function()
editableMeshFromAnother = AssetService:CreateEditableMeshAsync(Content.fromObject(OTHER_EDITABLE_MESH))
end)
-- Criar Modelo Editável a partir de MeshPart
local editableMeshFromMeshPart = nil
local success, errorMessage = pcall(function()
editableMeshFromMeshPart = AssetService:CreateEditableMeshAsync(MESH_PART.MeshContent)
end)
Um EditableMesh é exibido quando está ligado a um novo MeshPart , através de AssetService:CreateMeshPartAsync() .Você pode criar mais instâncias que referenciam o mesmo , ou vincular a uma existente através de .
local AssetService = game:GetService("AssetService")
local Workspace = game:GetService("Workspace")
-- Criar EditableMesh a partir do ID do recurso
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID))
end)
-- Crie uma nova MeshPart ligada ao EditableMesh
local newMeshPart = nil
local success, errorMessage = pcall(function()
newMeshPart = AssetService:CreateMeshPartAsync(Content.fromObject(editableMeshFromAsset))
end)
-- Alternativamente, vincule a nova MeshPart criada acima a uma MeshPart existente
local existingMeshPart = Workspace:FindFirstChild("EXISTING_MESH_PART")
existingMeshPart:ApplyMesh(newMeshPart)
Para recalcular a colisão e a geometria do fluido após a edição, você pode novamente chamar AssetService:CreateMeshPartAsync() e MeshPart:ApplyMesh() para atualizar um MeshPart existente.Geralmente é recomendado fazer isso no final de uma edição conceitual, não após chamadas individuais a métodos que manipulam geometria.As alterações visuais na malha sempre serão refletidas imediatamente pelo motor, sem a necessidade de chamar AssetService:CreateMeshPartAsync().
Malhas de Tamanho Fixo
Ao criar um EditableMesh a partir de um recurso de malha existente (via AssetService:CreateEditableMeshAsync() ), o resultante mesh editável é de tamanho fixo por padrão.Malhas de tamanho fixo são mais eficientes em termos de memória, mas você não pode alterar o número de vértices, faces ou atributos.Apenas os valores de atributos de vértice e posições podem ser editados.
local AssetService = game:GetService("AssetService")
-- Criar EditableMesh sem padrão de tamanho fixo
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID), {FixedSize = false})
end)
ID de Vetor/Rosto Estável
Muitos métodos EditableMesh de muitos vértice , normal , UV , cor e rosto IDs.Estes são representados como inteiros em Luau, mas requerem algum manuseio especial.A principal diferença é que os IDs são estáveis e permanecem os mesmos mesmo se outras partes da malha mudarem.Por exemplo, se um EditableMesh tiver cinco vértices {1, 2, 3, 4, 5} e você remover o vértice 4 , os novos vértices serão {1, 2, 3, 5} .
Observe que os IDs não são garantidos de estar em ordem e pode haver buracos na numeração, então, ao iterar por vértices ou faces, você deve iterar pela tabela retornada por GetVertices() ou GetFaces().
Atributos do vértice dividido
Um vértice é um canto de um rosto e conecta topologicamente rostos juntos.Vérteces podem ter vários atributos: posição, normal, coordenada UV, cor e transparência.
Às vezes, é útil para todos os rostos que tocarem um vértice usar os mesmos valores de atributo, mas às vezes você vai querer que rostos diferentes usem valores de atributo diferentes no mesmo vértice.Por exemplo, em uma esfera lisa, cada vértice terá apenas um normal.Em contraste, no canto de um cubo, o vértice terá 3 normais diferentes (um para cada face adjacente).Você também pode ter costuras nas coordenadas UV ou mudanças súbitas nas cores do vértice.
Ao criar rostos, cada vértice terá por padrão um de cada atributo: um normal, uma coordenada UV e uma cor/transparência.Se você quiser criar uma junta, deve criar novos atributos e defini-los no rosto.Por exemplo, este código criará um cubo afiado:
local AssetService = game:GetService("AssetService")
-- Dada 4 identidades de vértice, adiciona um novo normal e 2 triângulos, fazendo um quadrado afiado
local function addSharpQuad(editableMesh, vid0, vid1, vid2, vid3)
local nid = editableMesh:AddNormal() -- Isso cria um ID normal que é automaticamente calculado
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
-- Cria um cubo com bordas irregulares entre os 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) -- Frente
addSharpQuad(editableMesh, v1, v3, v4, v2) -- Voltar
addSharpQuad(editableMesh, v1, v5, v7, v3) -- Esquerda
addSharpQuad(editableMesh, v2, v4, v8, v6) -- Direita
addSharpQuad(editableMesh, v1, v2, v6, v5) -- Inferior
addSharpQuad(editableMesh, v3, v7, v8, v4) -- Primeiro
editableMesh:RemoveUnused()
return editableMesh
end
Enrolamento
Rostos de malha têm um lado frontal e um lado traseiro.Ao desenhar malhas, apenas a frente das faces é desenizada por padrão, embora você possa alterar isso definindo a propriedade da malha para .
A ordem dos vértices ao redor do rosto determina se você está olhando para a frente ou para trás.A frente do rosto é visível quando os vértices vão em sentido contrário ao redor dela.

Poses de FACS
Cabeças animáveis usam o Sistema de Codificação de Ação Facial (FACS).Veja a referência de poses FACS para informações úteis ao usar GetFacsPoses() e métodos semelhantes.
Cada posição FACS é especificada por um valor Enum.FacsActionUnit .Para a posa FACS, os ossos virtuais podem cada um ter um CFrame que transforma os ossos iniciais CFrame na posa de ligação do mesh para a posa CFrame daquela unidade de ação do FACS.Todo os ossos CFrames estão no espaço local da malha.
Essas poses FACS são misturadas durante a animação.Às vezes, a mistura das poses de base produz resultados ruins.Nesses casos, você pode anular a mistura de combinações específicas de poses de base com uma postura corretiva que seja mais agradável.Uma posição corretiva é especificada por 2 ou 3 valores Enum.FacsActionUnit corretos.Como uma posição FACS de base, para uma posição corretiva, os ossos virtuais podem cada um ter um CFrame que transforma o CFrame inicial dos ossos na posição de ligação do mesh para o CFrame para aquele FACS corretivo.
Limitações
EditableMesh atualmente tem um limite de 60.000 vértices e 20.000 triângulos. Tentar adicionar muitos vértices ou triângulos causará um erro.
Resumo
Propriedades
Retorna true se uma malha for de tamanho fixo.
Métodos
Adiciona uma nova cor à geometria e retorna um ID de cor estável.
Adiciona um novo normal à geometria e retorna um ID normal estável.
Adiciona um novo triângulo ao mesh e retorna uma ID de rosto estável.
Adiciona um novo UV à geometria e retorna um ID UV estável.
Adiciona um novo vértice à geometria e retorna um ID de vértice estável.
Destrói a malha.
Encontra o ponto mais próximo na superfície do mesh.
Encontra o vértice mais próximo de um ponto específico no espaço.
Encontra todos os vértices dentro de uma esfera específica.
Retorna uma lista de rostos adjacentes a um rosto dado.
Retorna uma lista de vértices adjacentes a um vértice dado.
Retorna a cor para o ID de cor dado.
Retorna a cor alfa (transparência) no ID de cor dado.
Retorna todas as cores do mesh.
Retorna os IDs de cores do rosto para os vértices no rosto.
Retorna os IDs normais do rosto para os vértices na face.
Retorna os IDs UV do rosto para os vértices no rosto.
Retorna os IDs de vértice do rosto.
Retorna todos os rostos da malha.
Retorna o vetor normal para o ID normal dado.
Retorna todos os normais da malha.
Obtém a posição de um vértice.
Retorna coordenadas UV na ID UV dada.
Retorna todos os UVs da malha.
Retorna todos os vértices como uma lista de IDs estáveis de vértice.
Retorna uma string que descreve um ID estável, útil para fins de depuração.
Faz a fusão de vértices que se tocam.
Remove um rosto usando seu ID de rosto estável.
Remove todos os vértices não utilizados, normais, UVs e cores, e retorna os IDs removidos.
Redefina esse ID normal para ser calculado automaticamente.
Define a cor para um ID de cor.
Define a cor alfa (transparência) para um ID de cor.
Define as cores do vértice do rosto para novos IDs de cores.
Define os vértices normais do rosto para novas identidades normais.
Define os UVs de vértice do rosto para novos IDs de UV.
Define os vértices do rosto para novos IDs de vértice.
Defina o normal para um ID normal.
Define uma posição de vértice no espaço de objeto local da malha.
Define as coordenadas UV para um ID UV.
Dividi todas as faces na malha para serem triângulos.
Propriedades
FixedSize
Malhas de tamanho fixo permitem alterar os valores de atributos de vértice, mas não permitem que vértices e triângulos sejam adicionados ou excluídos.
Métodos
AddColor
Adiciona uma nova cor à geometria e retorna um ID de cor estável.
Parâmetros
The new color. Nova cor
A cor alfa (transparência).
Devolução
ID de cor estável da nova cor.
AddNormal
Adiciona um novo normal à geometria e retorna um ID normal estável. Se o valor normal não for especificado, o normal será calculado automaticamente.
Parâmetros
O vetor normal. Se o valor normal não for especificado, o normal será calculado automaticamente.
Devolução
ID normal estável do novo normal.
AddTriangle
Adiciona um novo triângulo ao mesh e retorna uma ID de rosto estável.
Parâmetros
ID do primeiro vértice do triângulo.
ID do segundo vértice do triângulo.
ID do terceiro vértice do triângulo.
Devolução
ID de rosto estável da nova face.
AddUV
Adiciona um novo UV à geometria e retorna um ID UV estável.
Parâmetros
A nova coordenada UV.
Devolução
ID UV estável do novo UV.
AddVertex
Adiciona um novo vértice à geometria e retorna um ID de vértice estável.
Parâmetros
Posição no espaço de objeto local da malha.
Devolução
ID de vértice estável do novo vértice.
Destroy
Destrói o conteúdo do mesh, imediatamente recuperando memória usada.
Devolução
FindClosestPointOnSurface
Encontra o ponto mais próximo na superfície do mesh.Retorna o ID do rosto, aponta para o mesh no espaço de objeto local e a coordenada barycentrica da posição dentro do rosto.Veja RaycastLocal() para mais informações sobre coordenadas barycêtricas.
Parâmetros
Posição de ponto no espaço de objeto local da malha.
Devolução
Tuple da identificação do rosto, ponto no espaço de objeto local e a coordenada barycentrica da posição dentro do rosto.
FindClosestVertex
Encontra o vértice mais próximo de um ponto específico no espaço e retorna um ID de vértice estável.
Parâmetros
Posição de ponto no espaço de objeto local da malha.
Devolução
ID de vértice estável mais próximo ao ponto especificado no espaço.
FindVerticesWithinSphere
Encontra todos os vértices dentro de uma esfera específica e retorna uma lista de IDs estáveis de vértice.
Parâmetros
Centro da esfera no espaço de objeto local do mesh.
Raio da esfera.
Devolução
Lista de IDs de vértice estáveis dentro da esfera solicitada.
GetAdjacentFaces
Dada uma ID de rosto estável, retorna uma lista de rostos adjacentes.

Parâmetros
Devolução
Lista de IDs de rosto adjacente ao rosto dado.
GetAdjacentVertices
Dada uma ID de vértice estável, retorna uma lista de vértices adjacentes.

Parâmetros
ID de vértice ao redor do qual obter vértices adjacentes.
Devolução
Lista de IDs de vértices adjacentes ao redor do ID de vértice dado.
GetColor
Retorna a cor para o ID de cor dado.
Parâmetros
ID de cor para obter a cor.
Devolução
Cor para o ID de cor estável solicitado.
GetColorAlpha
Retorna a cor alfa (transparência) no ID de cor estável dado.
Parâmetros
ID de cor para obter o alfa.
Devolução
Alfa de cor na ID estável de cor do pedido.
GetColors
Retorna todas as cores do mesh como uma lista de IDs de cores estáveis.
Devolução
Lista de IDs de cores estáveis.
GetFaceColors
Retorna os IDs de cores do rosto para os vértices no rosto.
Parâmetros
ID de rosto para obter os IDs de cores.
Devolução
Lista de IDs de cores usados para os vértices no rosto dado.
GetFaceNormals
Retorna os IDs normais do rosto para os vértices na face.
Parâmetros
ID de rosto para obter os IDs normais.
Devolução
Lista de IDs normais usados para os vértices no rosto dado.
GetFaceUVs
Retorna os IDs UV do rosto para os vértices no rosto.
Parâmetros
ID de rosto para obter os IDs de UV.
Devolução
Lista de IDs de UV usados para os vértices no rosto dado.
GetFaceVertices
Retorna os IDs de vértice do rosto.
Parâmetros
Devolução
Lista de IDs de vértice ao redor do rosto dado.
GetFaces
Retorna todos os rostos da malha como uma lista de IDs estáveis de rosto.
Devolução
Lista de IDs de rosto estáveis.
GetNormal
Retorna o vetor normal para o ID normal dado.
Parâmetros
ID normal para obter o vetor normal.
Devolução
Vetor normal no ID normal solicitado.
GetNormals
Retorna todos os normais da malha como uma lista de IDs normais estáveis.
Devolução
Lista de IDs normais estáveis.
GetPosition
Obtém a posição de um vértice no espaço de objeto local da malha.
Parâmetros
ID de vértice estável para obter a posição.
Devolução
Posição de um vértice no espaço de objeto local da malha.
GetUV
Retorna coordenadas UV na ID UV dada.
Parâmetros
ID UV para o qual obter a coordenada UV.
Devolução
Coordenadas UV na ID UV solicitada.
GetUVs
Retorna todos os UVs da malha como uma lista de IDs UV estáveis.
Devolução
Lista de IDs UV estáveis.
GetVertices
Retorna todos os vértices como uma lista de IDs estáveis de vértice.
Devolução
Lista de IDs de vértice estáveis.
IdDebugString
Retorna uma string que descreve um ID estável, útil para fins de depuração, como f17 ou v12, que contém o tipo, o número de ID e a versão.
Parâmetros
ID para o qual retornar uma string de informação de depuração.
Devolução
Texto que descreve o ID em formato legível por humanos.
MergeVertices
Funde vértices que se tocam, para usar um único ID de vértice, mas manter os outros IDs de atributo originais.
Parâmetros
A distância em que os vértices são considerados para tocar uns aos outros.
Devolução
Uma mapeamento de antigo ID de vértice para novo ID de vértice para vértices que foram mesclados.
RaycastLocal
Lança um raio e retorna um ponto de interseção, ID de rosto e coordenadas barycêtricas.Os inputs e outputs deste método estão no espaço de objeto local da malha.
Uma coordenada barycentrica é uma maneira de especificar um ponto dentro de um rosto como uma combinação pesada dos 3 vértices do rosto.Isso é útil como uma maneira geral de misturar os atributos de vértice.Veja o exemplo de código deste método como uma ilustração.
Parâmetros
Origem do raio no espaço de objeto local da malha.
Direção do raio.
Devolução
Tuple do ponto de interseção, ID do rosto e coordenadas barycêtricas.
Amostras 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
Remove um rosto usando seu ID de rosto estável.
Parâmetros
Devolução
RemoveUnused
Remove todos os vértices, normais, UVs e cores que não são usados em qualquer rosto e retorna os IDs removidos.
Devolução
Todos os IDs estáveis removidos.
ResetNormal
Redefina esse ID normal para ser automaticamente calculado com base na forma da malha, em vez de ser definido manualmente.
Parâmetros
ID normal estável para redefinir.
Devolução
SetColor
Define a cor para um ID de cor.
Parâmetros
ID de cor estável para definir a cor.
Cor para definir.
Devolução
SetColorAlpha
Define a cor alfa (transparência) para um ID de cor.
Parâmetros
ID de cor estável para definir a alfa de cor.
Alpha para definir.
Devolução
SetFaceColors
Define as cores do vértice do rosto para novos IDs de cores.
Parâmetros
ID de rosto para atualizar as cores do vértice.
Lista de novos IDs estáveis de cores para usar para os vértices do rosto dado.
Devolução
SetFaceNormals
Define os vértices normais do rosto para novas identidades normais.
Parâmetros
ID de rosto para atualizar os normais de vértice.
Lista de novos IDs estáveis normais para usar para os vértices do rosto dado.
Devolução
SetFaceUVs
Define os UVs de vértice do rosto para novos IDs de UV.
Parâmetros
ID de rosto para atualizar os UVs de vértice.
Lista de novos IDs estáveis de UV para usar para os vértices do dado rosto.
Devolução
SetFaceVertices
Define os vértices do rosto para novos IDs de vértice.
Parâmetros
ID de rosto para atualizar os vértices.
Lista de novos IDs estáveis de vértice para usar para o rosto dado.
Devolução
SetNormal
Defina o normal para um ID normal. Isso mudará o valor normal para cada vértice de rosto que estiver usando o ID normal.
Parâmetros
ID normal estável para o qual definir o vetor normal.
Vetor normal para definir.
Devolução
SetPosition
Define uma posição de vértice no espaço de objeto local da malha.
Parâmetros
ID de vértice estável do vértice para posicionar.
Posição no espaço de objeto local da malha.
Devolução
SetUV
Define as coordenadas UV para um ID UV.
Parâmetros
ID UV para o qual definir as coordenadas UV.
Coordenadas do UV.
Devolução
Triangulate
Dividi todas as faces na malha para serem triângulos.Atualmente, isso não faz nada desde que apenas triângulos podem ser criados, mas se o seu código depender de triângulos, é recomendado que você chame esse método após chamar AssetService:CreateEditableMeshAsync() .