EditableMesh

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立

EditableMesh 將變更應用的視覺網格,當連接到 MeshPart 時,可以在 Studio 和體驗中查詢和修改網格。

一個 EditableMesh 可以從現有的 ContentMeshPart 或網格ID使用 AssetService:CreateEditableMeshAsync() 或空白 EditableMesh 來創建,或使用 AssetService:CreateEditableMesh() 來創建空白 。然後可以顯示、修改和更新其碰撞模型。不是所有步驟都是必要的;例如,你可能想創建一個 EditableMesh 只是為了射線而不顯示它。

當它與新的 EditableMesh 鏈接時,會在 MeshPart 中顯示一個 AssetService:CreateMeshPartAsync() 。您可以創建更多 引用相同 的實例,或通過 鏈接到現有的 。

要重新計算碰撞和液體幾何圖形後編輯,您可以再次呼叫 AssetService:CreateMeshPartAsync()MeshPart:ApplyMesh() 來更新現有的 MeshPart 。一般來說,在概念編輯結束之後執行此操作,而不是在個別調用操作方法來操作幾何圖形之後執行此操作。網格的視覺變化總是會立即反映在引擎上,無需呼叫 AssetService:CreateMeshPartAsync()

啟用已發布體驗的可編輯網格

為了安全目的,使用 EditableMesh 對發布的體驗會預設失敗。要啟用使用,EditableMesh,您必須年滿 13 歲且身份驗證。驗證通過後,開啟 Studio 的 遊戲設定,選擇 安全 ,並啟用 允許網格和圖像 API 切換。記得在啟用切換前查看 使用條款

許可

為了防止濫用,AssetService:CreateEditableMeshAsync()只允許您載入和編輯網格資產:

  • 這些是屬於體驗創作者的(如果體驗屬於個人)。
  • 屬於群組所有的(如果體驗屬於群組)。
  • 屬於登入的工作室用戶所擁有(如果位置檔案尚未儲存或發布到 Roblox)。

如果使用 API 載入不符合上述條件的資產,它們將發出錯誤。

固定尺寸網格

當從現有網格資產中創建 EditableMesh 時(通過 AssetService:CreateEditableMeshAsync() ),結果的可編輯網格的尺寸固定。固定尺寸的網格在記憶體效率上更高,但您無法更改垂直邊、面或屬性的數量。只能編輯vertex特性和位置的值。

穩定的vertex/面ID

許多 EditableMesh 方法使用 vertex , 正常 , UV , 顏色面部 ID。這些在 Luau 中以整數形式表示,但需要一些特殊處理。主要差異是,ID 穩定且即使其他網格部分發生變更,它們也會保持相同。例如,如果 EditableMesh 有五個邊緣 {1, 2, 3, 4, 5} ,如果你移除邊緣 4 ,那麼新的邊緣將是 {1, 2, 3, 5}

請注意,ID 不保證會按順序排列,數字編號可能會出現空白,因此當遍巡垂直或面時,您應該遍巡由 GetVertices()GetFaces() 返回的表。

分割頂點屬性

一個 邊緣 是臉部的角落,並且鏈接臉部在一起。邊緣可以擁有多個特性:位置、正常、紫外線座標、顏色和透明度。

有時候對於所有接觸頂點的面使用相同的特性值有用,但有時候你會想要不同的面使用相同的特性值在同一個頂點上。例如,在平滑球體上,每個vertex只會有一個正常。相反,在立方體的角落,頂點將有 3 種不同的正常 (每個鄰近面的一個)。你也可以在 UV 坐標中有縫紉或在vertex顏色上發生鋒利的變化。

當創建面時,每個vertex預設會擁有每個特性中的一個:一個正常、一個UV座標和一個顏色/透明度。如果您想創建縫,您應該創建新的屬性並將它們設置在面上。例如,這段代碼會創建一個鋒利的立方體:


local AssetService = game:GetService("AssetService")
-- 給予 4 個角度 ID,添加新的正常和 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
彎曲

網格面有前面和後面。當繪製網格時,只有面的前部被預設繪製,雖然您可以透過設置網格的 屬性變更此情況。

面周围的邊緣點的順序決定您是否正在查看前部或返回部。當邊緣以反時針方向繞過面時,面的前部可見。

Order of the vertices around the face
限制

EditableMesh 目前有 60,000 個節點和 20,000 個三角形的限制。如果嘗試添加過多的節點或三角形,將發生錯誤。

概要

屬性

方法

屬性

FixedSize

唯讀
未複製
Roblox 安全性
平行讀取

固定尺寸的網格允許變更vertex特性的值,但不允許添加或刪除vertex和三角形。

SkinningEnabled

平行讀取

方法

AddBone

參數

boneProperties: Dictionary
預設值:""

返回

AddColor

新增新顏色到幾何圖形並返回穩定的顏色 ID。

參數

color: Color3

新的顏色。

預設值:""
alpha: number

顏色 alpha(透明度)。

預設值:""

返回

新顏色的穩定顏色ID。

AddNormal

添加新的正常值到幾何圖形並返回穩定的正常ID。如果未指定正常值,則正常將自動計算。

參數

normal: Vector3

正常向量力。如果未指定正常值,正常將自動計算。

預設值:""

返回

新正常的穩定常規 ID。

AddTriangle

新增網格中的新三角形,並返回穩定的面 ID。

參數

vertexId0: number

三角形的第一個邊緣的 ID。

預設值:""
vertexId1: number

三角形的第二個頂點的ID。

預設值:""
vertexId2: number

三角形的第三個頂點的ID。

預設值:""

返回

新面的穩定面 ID。

AddUV

新增新的紫外線到幾何圖形並返回穩定的紫外線ID。

參數

新的紫外坐標。

預設值:""

返回

新紫外線的穩定紫外線ID。

AddVertex

新增新的vertex到幾何圖形中,並返回穩定的vertex ID。

參數

網格的本地物件空間中的位置。

預設值:""

返回

新vertex的穩定vertex ID。

Destroy

()

摧毀網格的內容,立即回收使用的記憶。


返回

()

FindClosestPointOnSurface

找到網格表面上最接近的點。返回面 ID、在本地對象空間上的網格點,以及面內位置的極坐標。請參閱 RaycastLocal() 獲得更多關於極坐標的資訊。

參數

point: Vector3

網格本地物件空間的點位置。

預設值:""

返回

面 ID 的 tuple、在本地對象空間上的網格點以及面內位置的極坐標。

FindClosestVertex

找到空間中最接近特定點的vertex並返回穩定的vertex ID。

參數

toThisPoint: Vector3

網格本地物件空間的點位置。

預設值:""

返回

最接近穩定垂直方向ID到指定點在空間。

FindVerticesWithinSphere

找到特定球體內的所有vertex並返回一個穩定vertex ID列表。

參數

center: Vector3

網格本地物件空間中球體中心。

預設值:""
radius: number

球體的半徑。

預設值:""

返回

請求領域內穩定頂點ID列表。

GetAdjacentFaces

提供穩定的面 ID,返回鄰近面的列表。

Adjacent faces indicated around requested face

參數

faceId: number
預設值:""

返回

指向給定面的面 ID 列表。

GetAdjacentVertices

提供穩定的頂點 ID,返回一個鄰近頂點列表。

Adjacent vertices indicated around requested vertex

參數

vertexId: number

圍繞垂直 ID獲得鄰近垂直。

預設值:""

返回

指向給定垂直ID的鄰近垂直點ID列表。

GetBoneByName

參數

boneName: string
預設值:""

返回

GetBoneCFrame

參數

boneId: number
預設值:""

返回

GetBoneIsVirtual

參數

boneId: number
預設值:""

返回

GetBoneName

參數

boneId: number
預設值:""

返回

GetBoneParent

參數

boneId: number
預設值:""

返回

GetBones


返回

GetCenter


返回

EditableMesh 的綁定盒子中心。

GetColor

返回指定顏色 ID 的顏色。

參數

colorId: number

取得顏色的顏色ID。

預設值:""

返回

要求的穩定顏色ID的顏色。

GetColorAlpha

返回指定穩定顏色 ID 的顏色 alpha(透明度)。

參數

colorId: number

要獲得Alpha的顏色ID。

預設值:""

返回

要求穩定顏色 ID 的顏色 alpha。

GetColors

返回網格的所有顏色為一個列表穩定顏色ID。


返回

穩定顏色標識列表。

GetFaceColors

返回面的顏色ID,用於面上的邊緣。

參數

faceId: number

用於獲得顏色標識的面部ID。

預設值:""

返回

指定面上的邊緣使用的顏色標識清單。

GetFaceNormals

返回面的正常ID,用於面上的邊緣。

參數

faceId: number

用於獲得正常ID的面ID。

預設值:""

返回

使用在指定面上的邊緣的普通ID列表。

GetFaceUVs

返回面的 UV ID,用於面上的邊緣。

參數

faceId: number

用於獲得紫外線ID的面ID。

預設值:""

返回

用於指定面上的邊緣的 UV ID 列表。

GetFaceVertices

返回面的頂點 ID。

參數

faceId: number
預設值:""

返回

給定面周圍的vertex ID列表。

GetFaces

返回網格的所有面作為一個穩定的面ID列表。


返回

穩定面 ID 列表。

GetFacesWithColor

參數

colorId: number
預設值:""

返回

GetFacesWithNormal

參數

normalId: number
預設值:""

返回

GetFacesWithUV

參數

uvId: number
預設值:""

返回

GetFacsCorrectivePose

參數

actions: Array
預設值:""

返回

GetFacsCorrectivePoses


返回

GetFacsPose

參數

預設值:""

返回

GetFacsPoses


返回

GetNormal

返回給定的普通ID的正常向量。

參數

normalId: number

正常 ID 以獲得正常向向量力。

預設值:""

返回

在要求的正常ID處的普通向量。

GetNormals

返回網格的所有正常值作為一個穩定的正常ID列表。


返回

穩定的普通ID列表。

GetPosition

獲得網格本地物件空間中vertex的位置。

參數

vertexId: number

穩定的vertex ID,用於獲得位置。

預設值:""

返回

網格本地物件空間中vertex的位置。

GetSize


返回

EditableMesh 的尺寸。

GetUV

返回指定的 UV ID 的 UV 座標。

參數

uvId: number

取得紫外線座標的 UV ID。

預設值:""

返回

在要求的 UV ID 上的 UV 座標。

GetUVs

返回網格的所有紫外線為一個穩定的紫外線ID列表。


返回

穩定的 UV ID 列表。

GetVertexBoneWeights

參數

vertexId: number
預設值:""

返回

GetVertexBones

參數

vertexId: number
預設值:""

返回

GetVertexColors

參數

vertexId: number
預設值:""

返回

GetVertexFaceColor

參數

vertexId: number
預設值:""
faceId: number
預設值:""

返回

GetVertexFaceNormal

參數

vertexId: number
預設值:""
faceId: number
預設值:""

返回

GetVertexFaceUV

參數

vertexId: number
預設值:""
faceId: number
預設值:""

返回

GetVertexFaces

參數

vertexId: number
預設值:""

返回

GetVertexNormals

參數

vertexId: number
預設值:""

返回

GetVertexUVs

參數

vertexId: number
預設值:""

返回

GetVertices

返回所有vertex點為一個穩定vertex ID列表。


返回

穩定的vertex ID列表。

GetVerticesWithColor

參數

colorId: number
預設值:""

返回

GetVerticesWithNormal

參數

normalId: number
預設值:""

返回

GetVerticesWithUV

參數

uvId: number
預設值:""

返回

IdDebugString

返回描述穩定ID的字串,用於調試目的,例如 f17v12 ,包含類輸入、ID號碼和版本。

參數

id: number

用於返回調試資訊字串的ID。

預設值:""

返回

用人類可讀的格式描述ID的字串。

MergeVertices

Map

合併會碰到一起的邊緣,使用單個邊緣ID但保留其他原始特性ID。

參數

mergeTolerance: number

邊緣被認為相互接觸的距離。

預設值:""

返回

Map

將舊的vertex ID映射到新的vertex ID以融合已合並的vertex。

RaycastLocal

投射一個光線並返回交點、面ID和球心坐標。此方法的輸入和輸出在網格的本地物件空間中。

A 球心坐標 是指在面內指定一個點為面的重量組合的 3 個邊緣的方式。這有用作一般融合vertex特性的方式。參見此方法的代碼樣本作為說明。

參數

origin: Vector3

網格本地物件空間中光線的起源。

預設值:""
direction: Vector3

射線的方向。

預設值:""

返回

交叉點、面ID和極坐標的Tuple。

範例程式碼

This code finds the position and UV coordinates of the closest point on an EditableMesh to the input point.

EditableMesh:RaycastLocal()

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

RemoveBone

()

參數

boneId: number
預設值:""

返回

()

RemoveFace

()

使用穩定的面 ID 移除一個面。

參數

faceId: number
預設值:""

返回

()

RemoveUnused

移除所有不在任何面中使用的vertex、normal、UV和顏色,並返回移除的ID。


返回

所有被移除的穩定ID。

ResetNormal

()

將此普通ID重置為自動計算,基於網格形狀而不是手動設設定。

參數

normalId: number

穩定的普通 ID 以重置。

預設值:""

返回

()

SetBoneCFrame

()

參數

boneId: number
預設值:""
cframe: CFrame
預設值:""

返回

()

SetBoneIsVirtual

()

參數

boneId: number
預設值:""
virtual: boolean
預設值:""

返回

()

SetBoneName

()

參數

boneId: number
預設值:""
name: string
預設值:""

返回

()

SetBoneParent

()

參數

boneId: number
預設值:""
parentBoneId: number
預設值:""

返回

()

SetColor

()

設置顏色為顏色標識。

參數

colorId: number

設定顏色的穩定顏色 ID。

預設值:""
color: Color3

要設設定的顏色。

預設值:""

返回

()

SetColorAlpha

()

設置顏色 alpha (透明度) 對應一個顏色 ID。

參數

colorId: number

設定顏色Alpha的穩定顏色ID。

預設值:""
alpha: number

Alpha 要設設定。

預設值:""

返回

()

SetFaceColors

()

將面的頂點顏色設置為新的顏色標識。

參數

faceId: number

用於更新邊緣顏色的面 ID。

預設值:""
ids: Array

新穩定顏色標識列表,可用於給定面的邊緣。

預設值:""

返回

()

SetFaceNormals

()

將面的邊緣正常值設置為新的正常ID。

參數

faceId: number

用於更新邊緣正常值的面 ID。

預設值:""
ids: Array

新的穩定常用ID列表,用於給定面的邊緣。

預設值:""

返回

()

SetFaceUVs

()

將面的vertex UV設置為新的UV ID。

參數

faceId: number

用於更新頂點 UV 的面 ID。

預設值:""
ids: Array

新穩定的 UV ID 列表,可用於指定面的邊緣。

預設值:""

返回

()

SetFaceVertices

()

將面的邊緣設置為新的邊緣ID。

參數

faceId: number

用於更新邊緣的面 ID。

預設值:""
ids: Array

用於指定面的新穩定角度ID列表。

預設值:""

返回

()

SetFacsBonePose

()

參數

預設值:""
boneId: number
預設值:""
cframe: CFrame
預設值:""

返回

()

SetFacsCorrectivePose

()

參數

actions: Array
預設值:""
boneIds: Array
預設值:""
cframes: Array
預設值:""

返回

()

SetFacsPose

()

參數

預設值:""
boneIds: Array
預設值:""
cframes: Array
預設值:""

返回

()

SetNormal

()

設置正常ID的正常值。這將更改使用正常ID的每個面頂點的正常值。

參數

normalId: number

設定正常向向量力的穩定普通 ID。

預設值:""
normal: Vector3

要設設定的普通向量。

預設值:""

返回

()

SetPosition

()

在網格的本地物件空間設置vertex位置。

參數

vertexId: number

位置到位置的穩定邊緣 ID。

預設值:""

網格的本地物件空間中的位置。

預設值:""

返回

()

SetUV

()

為 UV ID 設定 UV 座標。

參數

uvId: number

用於設置紫外線座標的紫外線識別碼。

預設值:""

紫外線座標。

預設值:""

返回

()

SetVertexBoneWeights

()

參數

vertexId: number
預設值:""
boneWeights: Array
預設值:""

返回

()

SetVertexBones

()

參數

vertexId: number
預設值:""
boneIDs: Array
預設值:""

返回

()

SetVertexFaceColor

()

參數

vertexId: number
預設值:""
faceId: number
預設值:""
colorId: number
預設值:""

返回

()

SetVertexFaceNormal

()

參數

vertexId: number
預設值:""
faceId: number
預設值:""
normalId: number
預設值:""

返回

()

SetVertexFaceUV

()

參數

vertexId: number
預設值:""
faceId: number
預設值:""
uvId: number
預設值:""

返回

()

Triangulate

()

將網格上所有面分為三角形。目前這不會做任何事情,因為只能創建三角形,但如果您的代碼依賴三角形,建議您在呼叫 AssetService:CreateEditableMeshAsync() 之後呼叫此方法。


返回

()

活動