는 연결된 경우 시각적 메시를 변경하여 스튜디오와 경험 모두에서 메시를 쿼리하고 수정할 수 있도록 합니다.
An EditableMesh 는 기존의 Content 의 MeshPart 또는 메쉬 ID를 사용하여 AssetService:CreateEditableMeshAsync() 에서 생성될 수 있으며, 빈 EditableMesh 는 AssetService:CreateEditableMesh() 를 사용하여 생성될 수 있습니다.그런 다음 표시, 수정 및 충돌 모델이 업데이트될 수 있습니다.모든 단계가 필요한 것은 아닙니다; 예를 들어, 단순히 표시하지 않고 레이캐스트만 생성하려는 경우 EditableMesh를 만들 수 있습니다.
새로운 EditableMesh 에 연결되면 새로운 MeshPart 를 통해 AssetService:CreateMeshPartAsync() 가 표시됩니다.동일한 을 참조하거나 기존 을 연결하는 더 많은 인스턴스를 생성할 수 있습니다. 또는 을 통해 기존 에 링크할 수 있습니다.
편집 후 충돌 및 유체 기하를 다시 계산하려면 AssetService:CreateMeshPartAsync() 및 MeshPart:ApplyMesh() 를 다시 호출하여 기존 MeshPart를 업데이트할 수 있습니다.일반적으로 이 작업은 기하 메서드를 조작하는 개별 호출 후에 하는 것이 아니라 개념 편집의 끝에서 수행하는 것이 좋습니다.메시에 대한 시각적 변경 사항은 항상 즉시 엔진에 반영되며, AssetService:CreateMeshPartAsync() 호출할 필요가 없습니다.
게시된 경험에 편집 가능한 메쉬 활성화
보안 목적으로, 게시된 경험에서 EditableMesh를 사용하면 기본적으로 실패합니다.사용을 활성화하려면 EditableMesh , 13세 이상 나이가 확인되고 ID가 확인되어야 합니다.확인 후 Studio의 게임 설정을 열고 보안 을 선택하고 메쉬 및 이미지 API 허용 토글을 활성화합니다.토글을 활성화하기 전에 사용 조건을 검토하는 것을 잊지 마십시오.
권한
오용을 방지하기 위해 AssetService:CreateEditableMeshAsync() 는 메쉬 자산만 로드하고 편집할 수 있도록 허용합니다:
- 경험의 크리에이터가 소유하는 것(경험이 개인에게 소유된 경우).
- 그룹에 소유된 것(경험이 그룹에 소유된 경우).
- 로그인한 Studio 사용자가 소유하는 항목(장소 파일이 Roblox에 저장되거나 게시되지 않은 경우).
APIs는 위의 조건을 충족하지 않는 자산을 로드하기 위해 사용되면 오류를 발생시킵니다.
고정 크기 메쉬
기존 메쉬 자산(via AssetService:CreateEditableMeshAsync() )에서 EditableMesh 를 생성할 때, 결과 편집 가능한 메쉬는 기본적으로 고정 크기입니다.고정 크기의 메쉬는 메모리 측면에서 더 효율적이지만 버텍스, 얼굴 또는 특성 수를 변경할 수 없습니다.벡스 특성 및 위치의 값만 편집할 수 있습니다.
안정적인 벡스/얼굴 ID
많은 EditableMesh 메서드가 벡스 , 정상 , UV , 색상 및 얼굴 ID를 사용합니다.이들은 Luau에서 정수로 표시되지만 특별한 처리가 필요합니다.주요 차이점은 ID가 안정적이고 메시의 다른 부분이 변경되더라도 동일하게 유지된다는 것입니다.예를 들어, 가 5개의 변점을 가지고 있고 변점 을 제거하면 새로운 변점은 이 됩니다.
ID가 순서대로 있을 것이라고 보장되지 않으며 번호 매기기에 구멍이 있을 수 있으므로 벡터나 면을 반복할 때 GetVertices() 또는 GetFaces()에서 반환된 테이블을 반복해야 합니다.
분할 벡터 특성
A 벡스 는 얼굴의 모서리이며, 토폴로지적으로 얼굴을 연결합니다.버텍스에는 위치, 정상, UV 좌표, 색상 및 투명도와 같은 여러 특성이 있을 수 있습니다.
가끔 벡스에 접촉하는 모든 얼굴이 동일한 특성 값을 사용하는 것이 유용하지만, 때로는 다른 얼굴이 동일한 벡스에서 다른 특성 값을 사용하길 원할 것입니다.예를 들어, 부드러운 구체에서는 각 변점에 단일 정상만 있습니다.반면, 큐브의 모서리에서는 정점에 3개의 다른 정상(각각 인접 면에 하나)이 있습니다.UV 좌표에서 선이나 벡스 색상에서 급격한 변화가 있을 수도 있습니다.
얼굴을 생성할 때 모든 벡스에는 기본적으로 각 특성 중 하나가 있습니다: 하나의 정상, 하나의 UV 좌표 및 하나의 색상/투명도.섬을 만들려면 새 특성을 만들고 얼굴에 설정해야 합니다.예를 들어, 이 코드는 날카로운 큐브를 만듭니다:
local AssetService = game:GetService("AssetService")
-- 4개의 벡스 아이디를 제공하면 새로운 일반 및 2개의 삼각형을 추가하여 날카로운 쿼드를 만듭니다
local function addSharpQuad(eMesh, vid0, vid1, vid2, vid3)
local nid = eMesh:AddNormal() -- 이렇게 하면 자동으로 계산되는 일반 ID가 생성됩니다
local fid1 = eMesh:AddTriangle(vid0, vid1, vid2)
eMesh:SetFaceNormals(fid1, {nid, nid, nid})
local fid2 = eMesh:AddTriangle(vid0, vid2, vid3)
eMesh:SetFaceNormals(fid2, {nid, nid, nid})
end
-- 6면 사이의 경계가 있는 큐브를 만듭니다
local function makeSharpCube()
local eMesh = AssetService:CreateEditableMesh()
local v1 = eMesh:AddVertex(Vector3.new(0, 0, 0))
local v2 = eMesh:AddVertex(Vector3.new(1, 0, 0))
local v3 = eMesh:AddVertex(Vector3.new(0, 1, 0))
local v4 = eMesh:AddVertex(Vector3.new(1, 1, 0))
local v5 = eMesh:AddVertex(Vector3.new(0, 0, 1))
local v6 = eMesh:AddVertex(Vector3.new(1, 0, 1))
local v7 = eMesh:AddVertex(Vector3.new(0, 1, 1))
local v8 = eMesh:AddVertex(Vector3.new(1, 1, 1))
addSharpQuad(eMesh, v5, v6, v8, v7) -- 앞
addSharpQuad(eMesh, v1, v3, v4, v2) -- 뒤로
addSharpQuad(eMesh, v1, v5, v7, v3) -- 왼쪽
addSharpQuad(eMesh, v2, v4, v8, v6) -- 오른쪽
addSharpQuad(eMesh, v1, v2, v6, v5) -- 하단
addSharpQuad(eMesh, v3, v7, v8, v4) -- 위로
eMesh:RemoveUnused()
return eMesh
end
감기
메쉬 얼굴에는 앞면과 뒷면이 있습니다.메쉬를 그릴 때 기본적으로 얼굴의 앞면만 그려지지만, mesh' DoubleSided 속성을 true로 설정하여 이를 변경할 수 있습니다.
얼굴 주변의 베리스 순서는 앞이나 뒤로보고 있는지 여부를 결정합니다.각 변점이 반대 방향으로 이동할 때 얼굴의 앞면이 보입니다. The front of the face is visible when the vertices go counterclockwise around it.

제한
EditableMesh 현재 60,000개의 벡터와 20,000개의 삼각형의 제한이 있습니다. 너무 많은 벡터나 삼각형을 추가하려고 하면 오류가 발생합니다.
요약
메서드
기하학에 새 색을 추가하고 안정적인 색상 ID를 반환합니다.
기하학에 새로운 정상을 추가하고 안정적인 정상 ID를 반환합니다.
메시에 새 삼각형을 추가하고 안정적인 얼굴 ID를 반환합니다.
기하에 새 UV를 추가하고 안정적인 UV ID를 반환합니다.
기하학에 새 벡스를 추가하고 안정적인 벡스 ID를 반환합니다.
메시를 파괴합니다.
메시 표면에서 가장 가까운 점을 찾습니다.
공간에서 특정 지점까지 가장 가까운 벡스를 찾습니다.
특정 영역 내의 모든 벡터를 찾습니다.
지정된 얼굴에 인접한 얼굴 목록을 반환합니다.
주어진 벡스에 인접한 벡스 목록을 반환합니다.
지정된 색상 ID의 색을 반환합니다.
지정된 색상 ID에서 알파(투명도) 색상을 반환합니다.
메시의 모든 색상을 반환합니다.
얼굴의 벡터에 대한 얼굴의 색상 ID를 반환합니다.
얼굴의 정상 ID를 얼굴에 있는 버텍스에 반환합니다.
얼굴의 벡터에 대한 얼굴의 UV ID를 반환합니다.
얼굴의 벡스 ID를 반환합니다.
메시의 모든 얼굴을 반환합니다.
지정된 일반 ID에 대한 일반 벡터를 반환합니다.
메시의 모든 정상을 반환합니다.
벡스의 위치를 가져옵니다.
지정된 UV ID에서 UV 좌표를 반환합니다.
메시의 모든 UV를 반환합니다.
모든 벡터를 안정적인 벡터 ID 목록으로 반환합니다.
디버깅 목적에 유용한 안정 ID를 설명하는 문자열을 반환합니다.
함께 만지는 버텍스를 병합합니다.
안정적인 얼굴 ID를 사용하여 얼굴을 제거합니다.
사용되지 않은 모든 버텍스, 노멀, UV 및 색을 제거하고 제거된 ID를 반환합니다.
이 일반 ID를 자동으로 계산하도록 재설정합니다.
색상 ID에 색상을 설정합니다.
색상 알파(투명도)를 색상 ID에 설정합니다.
얼굴의 벡스 색을 새로운 색상 ID로 설정합니다.
얼굴의 벡터 정상을 새로운 정상 ID로 설정합니다.
얼굴의 벡스 UV를 새 UV ID로 설정합니다.
얼굴의 변점을 새 변점 ID로 설정합니다.
일반 ID에 대한 일반 값을 설정합니다.
메시의 로컬 개체 공간에서 벡스 위치를 설정합니다.
UV ID에 대한 UV 좌표를 설정합니다.
메쉬의 모든 얼굴을 삼각형으로 분할합니다.
속성
메서드
AddColor
기하학에 새 색을 추가하고 안정적인 색상 ID를 반환합니다.
매개 변수
반환
새 색상의 안정적인 색상 ID.
AddNormal
기하학에 새로운 정상을 추가하고 안정적인 정상 ID를 반환합니다. 정상 값이 지정되지 않으면 정상이 자동으로 계산됩니다.
매개 변수
일반 벡터. 일반 값이 지정되지 않으면 일반이 자동으로 계산됩니다.
반환
새로운 정상의 안정적인 일반 ID.
AddTriangle
메시에 새 삼각형을 추가하고 안정적인 얼굴 ID를 반환합니다.
매개 변수
삼각형의 첫 번째 벡스 아이디.
삼각형의 두 번째 꼭짓점 ID.
삼각형의 세 번째 꼭짓점 ID.
반환
새 얼굴의 안정적인 얼굴 ID.
AddUV
기하에 새 UV를 추가하고 안정적인 UV ID를 반환합니다.
매개 변수
새로운 UV 좌표.
반환
새 UV의 안정적인 UV ID.
AddVertex
기하학에 새 벡스를 추가하고 안정적인 벡스 ID를 반환합니다.
매개 변수
메시의 로컬 개체 공간에서의 위치.
반환
새 벡스의 안정 벡스 ID.
Destroy
메시의 콘텐츠를 즉시 파괴하여 사용된 메모리를 즉시 회수합니다.
반환
FindClosestPointOnSurface
메시 표면에서 가장 가까운 점을 찾습니다.면 ID를 반환하고 로컬 개체 공간의 메쉬에 포인트를 지정하며 얼굴 내의 위치에 대한 바리센트릭 좌표를 제공합니다.바리센트릭 좌표에 대한 자세한 정보는 RaycastLocal()에 참조하십시오.
매개 변수
메시의 로컬 개체 공간에서 포인트 위치.
반환
얼굴 ID, 로컬 개체 공간의 메쉬에 대한 포인트 및 얼굴 내부의 위치에 대한 바리센트릭 좌표입니다.
FindClosestVertex
공간에서 특정 지점까지 가장 가까운 벡스를 찾아 안정적인 벡스 ID를 반환합니다.
매개 변수
메시의 로컬 개체 공간에서 포인트 위치.
반환
공간에서 지정된 지점까지의 가장 가까운 안정 벡스 ID.
FindVerticesWithinSphere
특정 영역 내의 모든 벡스를 찾아 안정적인 벡스 ID 목록을 반환합니다.
매개 변수
반환
요청된 영역 내의 안정적인 벡스 ID 목록.
GetAdjacentFaces
안정적인 얼굴 ID를 제공하면 인접 얼굴 목록을 반환합니다.

매개 변수
반환
지정된 얼굴에 인접한 얼굴 ID 목록.
GetAdjacentVertices
안정적인 벡스 아이디를 제공하면 인접 벡스 목록을 반환합니다.

매개 변수
인접 버텍스를 가져올 범위의 벡스 ID.
반환
지정된 벡스 ID 주위의 인접 벡스 ID 목록.
GetColorAlpha
지정된 안정 색상 ID에서 알파(투명도) 색상을 반환합니다.
매개 변수
알파를 가져올 색상 ID.
반환
요청 안정 색상 ID에서 알파 색상.
GetFaceColors
얼굴의 벡터에 대한 얼굴의 색상 ID를 반환합니다.
매개 변수
색상 ID를 가져올 페이스 ID.
반환
지정된 면의 베리스에 사용되는 색상 ID 목록.
GetFaceNormals
얼굴의 정상 ID를 얼굴에 있는 버텍스에 반환합니다.
매개 변수
정상 ID를 가져올 페이스 ID.
반환
지정된 면의 베리스에 사용되는 일반 ID 목록.
GetFaceUVs
얼굴의 벡터에 대한 얼굴의 UV ID를 반환합니다.
매개 변수
UV ID를 가져올 페이스 ID.
반환
지정된 면의 베리스에 사용되는 UV ID 목록.
GetNormal
지정된 일반 ID에 대한 일반 벡터를 반환합니다.
매개 변수
정상 벡터를 가져올 정상 ID.
반환
요청된 일반 ID에서의 일반 벡터.
GetPosition
메쉬의 로컬 개체 공간에서 벡스의 위치를 가져옵니다.
매개 변수
위치를 가져올 안정 벡터 ID.
반환
메쉬의 로컬 개체 공간에서 벡스의 위치.
GetUV
지정된 UV ID에서 UV 좌표를 반환합니다.
매개 변수
UV 좌표를 가져올 UV ID.
반환
요청된 UV ID에서 UV 좌표.
IdDebugString
안정 ID를 설명하는 문자열을 반환하여 디버깅 목적으로 유용합니다(예: f17 또는 v12 , 입력, ID 번호 및 버전을 포함).
매개 변수
디버깅 정보 문자열을 반환할 ID.
반환
인간이 읽을 수 있는 형식으로 ID를 설명하는 문자열.
MergeVertices
함께 만지는 베리스를 병합하여 단일 벡터 ID를 사용하지만 다른 원래 특성 ID를 유지합니다.
매개 변수
서로 만지는 것으로 간주되는 버텍스의 거리입니다.
반환
병합된 버전의 벡스 아이디를 새 벡스 아이디로 매핑하는 작업입니다.A mapping of old vertex ID to new vertex ID for vertices that have been merged.
RaycastLocal
광선을 던지고 교차점, 얼굴 ID 및 바리센트릭 좌표의 포인트를 반환합니다.이 메서드의 입력과 출력은 메시의 로컬 개체 공간에 있습니다.
A 바리센트릭 좌표 는 얼굴 내의 포인트를 얼굴의 3개 변점의 무게 조합으로 지정하는 방법입니다.이는 벡스 특성을 혼합하는 일반적인 방법으로 유용합니다.이 메서드의 코드 샘플을 일러스트레이션으로 참조하세요.
매개 변수
반환
교차점, 얼굴 ID 및 바리센트릭 좌표의 튜플.
코드 샘플
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
ResetNormal
이 일반 ID를 메쉬의 모양에 따라 자동으로 계산되도록 설정하기 위해 수동으로 설정하는 대신 재설정합니다.
매개 변수
재설정할 안정적인 일반 ID.
반환
SetColor
색상 ID에 색상을 설정합니다.
매개 변수
반환
SetColorAlpha
색상 알파(투명도)를 색상 ID에 설정합니다.
매개 변수
반환
SetFaceColors
얼굴의 벡스 색을 새로운 색상 ID로 설정합니다.
매개 변수
반환
SetFaceNormals
얼굴의 벡터 정상을 새로운 정상 ID로 설정합니다.
매개 변수
반환
SetFaceUVs
얼굴의 벡스 UV를 새 UV ID로 설정합니다.
매개 변수
반환
SetFaceVertices
얼굴의 변점을 새 변점 ID로 설정합니다.
매개 변수
반환
SetFacsBonePose
매개 변수
반환
SetNormal
일반 ID의 일반값을 설정합니다. 이렇게 하면 일반 ID를 사용하는 모든 얼굴 벡스의 일반값이 변경됩니다.
매개 변수
반환
SetPosition
메시의 로컬 개체 공간에서 벡스 위치를 설정합니다.
매개 변수
반환
SetUV
UV ID에 대한 UV 좌표를 설정합니다.
매개 변수
반환
Triangulate
메쉬의 모든 얼굴을 삼각형으로 분할합니다.현재 삼각형만 생성할 수 있으므로 아무것도 수행하지 않지만, 코드가 삼각형에 의존하는 경우 AssetService:CreateEditableMeshAsync()를 호출한 후 이 메서드를 호출하는 것이 좋습니다.