EditableMesh 改變鏈接到 MeshPart 的視覺網格,讓您可以在 Studio 和體驗中兩者的網格進行查詢和修改。
Class.EditableMesh 可以從 Content 的 MeshPart 或網格 ID 使用
Class.EditableMesh 會顯示在通過 MeshPart 連接到新 AssetService:CreateMeshPartAsync() 的鏈接上。 您可以通過 1>Class.EditableMesh1> 更多例子,或
要重新計算衝突和流體 геометria後,您可以再次呼叫 AssetService:CreateMeshPartAsync() 和 MeshPart:ApplyMesh() 來更新現有 MeshPart 。 一般來說,建議您在
啟用已發佈的體驗編輯網格
為了安全目的,使用 EditableMesh 對發佈的體驗會因預設而失敗。若要啟用使用,請 EditableMesh 必須是 13+ 歲,並且身份驗ID 驗證。在您被��
許可
為了防止濫用,AssetService:CreateEditableMeshAsync() 只允許您載入和編輯網格資產:
- 那些是擁有體驗的創作者的 (如果體驗屬於個人).
- 那些是由群組所擁有的 (如果體驗屬於群組)。
- 那些是由已登入的 Studio 使用者擁有的(如果該位置檔案尚未儲存或發佈到 Roblox)。
使用 APIs 載入資產,不符合上述條件,將會發生錯誤。
固定尺寸網格
從現有網格資產( via EditableMesh )創建新的 AssetService:CreateEditableMeshAsync() 時,結果的編輯網格會以預設大小固定。 編輯網格的大小會在記憶體上更有效率,但您無法編輯特徵、面或屬性。 僅能編輯值的網格屬性和位置。
穩定的頂點/面 ID
很多 EditableMesh 方法會取
注意,ID 不能保證是順序,因此當你在垂直或面上移動時,你應該在 GetVertices() 或 GetFaces() 的表中移動時,你應該移動到表。
分割垂直領域屬性
vertex 是面的角,並且上下文結合面。vertex 可以有多個屬性:位置、正常、uv坐標、顏色和2>透明度2>。
有時候會有用於所有接觸樹角的面使用相同的屬性值,但有時候您可能想要不同的面使用不同的屬性值在同一個樹角上。例如,在平滑球上,每個樹角只會有一個普通。 與此相反,在方塊角的角落,樹角將有 3 個不同的普通值 (一個為每個鄰近面)。
當創建面時,每個邊緣將預設有一個屬性:一個正常,一個 UV 坐標和一個顏色/透明度。如果您想要創建一個縫隙,您應該創建新屬性並將它設置在面上。例如,此代碼將創建一個鋒利的方塊:
local AssetService = game:GetService("AssetService")
-- 提供 4 個邊緣 ID,並且增加 2 個三角形,以形成銳利的四角形
local function addSharpQuad(eMesh, vid0, vid1, vid2, vid3)
local nid = eMesh:AddNormal() -- 這會創建一個正常的 ID,該 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
結束
網格面有前面和後面。當畫網格時,只有面的前部分被預設畫畫,雖然您可以通過設置網格的 DoubleSided 屬性將其變更為 true。
臉周圍的垂直排列是否表示您正在查看前方或返回方。臉前方的垂直排列會顯示,當垂直排列的角度向前或向後移動。
限制
EditableMesh 目前有 60,000 個邊緣和 20,000 個三角形的限制。嘗試添加太多邊緣或三角形會導致錯誤。
概要
方法
新增一個顏色至幾何圖形,並且返回一個穩定的顏色 ID。
新增一個新的正常值至 геометrie,並且返回一個穩定的正常 ID。
新增新三角形到網格,並且返回一個穩定的面ID。
新增一個新的 UV 至 геометria,並且返回一個穩定的 UV ID。
新增一個新節點到 геометrie,並且返回一個穩定的節點 ID。
摧毀網格。
在網格的表面上尋找最近的點。
找到空間中的最接近點。
查找特定球體內的所有角度。
返回指定面的鄰近面的列表。
返回指定垂直邊緣的列表。
返回指定的顏色 ID 的顏色。
返回指定顏色 ID 的顏色 alpha (透明度)。
返回網格的所有顏色。
返回面的顏色 ID 為面上的垂直。
返回面的正常 ID 為面上的垂直。
返回面的 UV 標識,對面上的垂直。
返回面的頂點 ID。
返回網格的所有面。
返回使用指定屬性 ID 的面。
返回指定的普通 ID 的普通 vector。
返回網格的所有普通值。
取得邊緣的位置。
返回指定的 UV ID 上的 UV 坐標。
返回網格的所有 UV。
返回所有垂直為穩定垂直 ID 列表。
返回使用指定屬性 ID 的邊緣列表。
返回一個描述穩定 ID 的字串,有助於調查問題。
結合相觸的邊緣。
使用其穩定的面ID移除一個面。
移除所有未使用的邊緣、普通、 UV 和顏色,並且返回已移除的 ID。
將此正常 ID 重設,以自動計算。
設定顏色以取得顏色 ID。
設定顏色 ID 的顏色 alpha (透明度)。
設定面的頂點顏色為新的顏色 ID。
設定面的頂點正常值為新的正常 ID。
將面的 UV 設為新的 UV ID。
將面的垂直設為新的垂直 ID。
設定正常的ID。
設定網格的本地對象空間中的垂直位置。
設定 UV 坐標以取得 UV ID。
將網格上的所有面分為三角形。
屬性
方法
AddColor
新增一個顏色至幾何圖形,並且返回一個穩定的顏色 ID。
參數
返回
新顏色的穩定顏色 ID。
AddNormal
新增一個新的正常值至 геометrie,並且返回一個穩定的正常ID。如果未指定正常值,則會自動計算。
參數
正常向向量力。如果未指定正常值,將自動計算。
返回
新正常的標識ID。
AddTriangle
新增新三角形到網格,並且返回一個穩定的面ID。
參數
三角形的第一個 вер節ID。
三角形的第二個 вершина的 ID。
三角形的第三個 вер節的 ID。
返回
新面的穩定面ID。
Destroy
立即摧毀網格的內容,並且立即重新佔領使用的內存。
返回
FindClosestPointOnSurface
在網格表面上找到最近的點。返回面部 ID、指向本地對象空間中的網格、和位置內面的 barycentric 坐標。請參閱 RaycastLocal() 以取得更多關於 barycentric 坐標的資訊。
參數
指向網格的本地對象空間。
返回
面 ID 的複素,指向本地對象空間中的網格,並且位置內的位置中心坐標。
FindClosestVertex
找到空間中的最接近點,並且返回一個穩定的vertex ID。
參數
指向網格的本地對象空間。
返回
最接近空間指定點的 stabile 垂直 ID。
FindVerticesWithinSphere
在特定球體內尋找所有角色,並且返回一個穩定的角色 ID 列。
參數
返回
在要求的球體內的穩定範圍 ID 列表。
GetAdjacentVertices
提供一個穩定的垂直 ID 時,返回一個列表的鄰近垂直。
參數
Vertex ID 在哪裡可以取得鄰近的邊緣。
返回
提供鄰近垂直 ID 的列 of IDs 。
GetColorAlpha
返回指定的顏色 ID 上的顏色 alpha (透明度)。
參數
可取得 alpha 的顏色 ID。
返回
在要求的穩定顏色 ID 上變更顏色。
GetFacesWithAttribute
返回使用指定 вер維 ID、普通 ID、UV ID 或顏色 ID 的面。
參數
屬性 ID 可以找到使用它的面。
返回
使用指定屬性 ID 的面部 ID 清單。
GetUV
返回指定的 UV ID 上的 UV 坐標。
參數
擁有此 ID 的 UV 可獲得擁有此 ID 的 UV 坐標。
返回
在要求的 UV ID 上輸入 UV 坐標。
GetVerticesWithAttribute
返回使用指定面 ID、普通 ID、UV ID 或顏色 ID 的邊緣列表。
參數
屬性 ID 可以找到使用它的垂直。
返回
使用指定屬性 ID 的頂點列表。
IdDebugString
返回一個包含類型、ID 號碼和版本的描述式字串,例如 f17 或 v12,包含類輸入、ID 號碼和版本。
參數
一個可以返回調試資訊字串的 ID。
返回
一個人類可以讀取的格式描述 ID 的字串。
MergeVertices
結合相觸的邊緣,以使用單個邊緣 ID ,但保留其他原始屬性 ID。
參數
垂直邊緣之間的距離。
返回
將舊的垂直 ID 重新分配到新的垂直 ID 以對合併後的垂直重新分配。
RaycastLocal
投射一個光束,並且返回一個交叉點、面部 ID 和對稱點。這個方法的輸入和輸出在網格的本地對象空間中。
barycentric coordinate 是指定面內點的重量化組合 3 邊的方法。這是一種用於一般方法的擬合方法的方法。請參閱此方法的代碼示例作為說明。
參數
返回
交叉點、臉部 ID 和楔形坐標的樣本。
範例程式碼
local AssetService = game:GetService("AssetService")
-- Initialize EditableMesh in space
local success, editableMesh = pcall(function()
return AssetService:CreateEditableMeshAsync(Content.fromUri("rbxassetid://ASSET_ID"))
end)
local meshPart = nil
if success then
local initialSize = Vector3.new(1, 1, 1)
meshPart = editableMesh:CreateMeshPartAsync(initialSize)
meshPart.Parent = workspace
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
SetColorAlpha
設定顏色 ID 的顏色 alpha (透明度)。
參數
返回
SetFaceNormals
設定面的頂點正常值為新的正常 ID。
參數
返回
SetFaceUVs
將面的 UV 設為新的 UV ID。
參數
返回
SetFaceVertices
將面的垂直設為新的垂直 ID。
參數
返回
SetNormal
設定正常ID的正常值。這會改變使用正常ID的每個面頰。
參數
返回
Triangulate
將網格上的所有面分為三角形。目前,這並不會發生任何效果,因為只有三角形才能創建,但如果您的代碼使用三角形,建議您在 AssetService:CreateEditableMeshAsync() 之後呼叫此方法。