EditableMesh

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

无法创建

EditableMesh 改变链接到 MeshPart 的视觉网格,允许在 Studio 和体验中查询和修改网格。

一个 EditableMesh 可以从现有的 Content 上的 Class.MeshPart 或网格 ID 创建,或使用 Class.

当它链接到一个新的 EditableMesh 时,它会显示在 MeshPart 通过。你可以创建更多 AssetService:CreateMeshPartAsync() 实例,这些实例将参考同一个 2>EditableMesh2> 内容

调用 AssetService:CreateMeshPartAsync() 将重新计算碰撞和流体几何以及任何编辑和更新现有 MeshPart 。 一般来说,建议在概念编辑操作结束时执行此操作。 MeshPart:ApplyMesh() 将更新目标 1> Class.MeshPart

稳定的头/向量 ID

许多 EditableMesh 方法取 vertex , normal</

请注意,ID 不保证在顺序上,因此在垂直或面上循环时,您应该在 GetVertices()GetFaces() 返回的表上循环。

分割垂直属性

一个 vertex 是面的一个角,并且上下文联接面。垂直可以有几个属性:位置、正常、UV坐标、颜色和透明度。

有时候它对所有触摸垂直的面都有用,但有时候您可能想要不同的面使用不同的属性值,但有时候您可能想要不同的面使用不同的属性值在同一垂直上。例如,在光滑的球上,每个垂直面都只有一个普通。 与此相反,在方块角的角落,垂直面将有 3 个不同的普通值(一个为每个邻近面)。

当创建面部时,每个面的每个属性都会默认有一个:普通,一个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

风景

网格面有前面和后面。 当绘制网格时,默认情况下,只有面的前部分被绘制,尽管您可以通过将网格 DoubleSided 属性设置为 true

面部周围的垂直排列是否表示您正在查看前方或返回方。当垂直排列从面部周围逆时针时,面部的前部就会显示。

Order of the vertices around the face

限制

EditableMesh 目前有一个限制为 60,000 个边和 20,000 个三角形。尝试添加太多边或三角形会导致错误。

概要

属性

方法

属性

FixedSize

只读
未复制
读取并联
Roblox 安全性

SkinningEnabled

读取并联

方法

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

添加一个新的 UV 到几何图形,并返回一个稳定的 UV ID。

参数

新的 UV 坐标。


返回

新的 UV 的稳定 UV 身份。

AddVertex

添加一个新的垂直到几何图形,并且返回一个稳定的垂直 ID。

参数

在网格的本地对象空间中的位置。


返回

新垂直的稳定垂直 ID。

Destroy

void

返回

void

FindClosestPointOnSurface

在网格表面上找到最近的点。返回面部 ID、指向本地对象空间中的网格、和面部的 barycentric 坐标。请参阅 RaycastLocal() 获取更多关于 barycentric 坐标的信息。

参数

point: Vector3

在网格的本地对象空间中的位置。


返回

面部ID的复数,指向本地对象空间中的网格,并且面部的位置的中心坐标。

FindClosestVertex

找到最接近特定空间点的最近垂直,并返回一个稳定的垂直 ID。

参数

toThisPoint: Vector3

在网格的本地对象空间中的位置。


返回

最近的稳定垂直 ID 到指定的空间。

FindVerticesWithinSphere

在特定球体内找到所有垂直,并返回一个列表稳定垂直 ID。

参数

center: Vector3

网格本地对象空间中的球的中心。

radius: number

球的半径。


返回

在要求的球体内列出所有稳定垂直 ID。

GetAdjacentFaces

给出一个稳定的面 ID,返回一个列 of 邻近的面。

Adjacent faces indicated around requested face

参数

faceId: number

返回

与指定面部相邻的面 ID 列表。

GetAdjacentVertices

给出一个稳定的垂直 ID,返回一个列表的邻近垂直。

Adjacent vertices indicated around requested vertex

参数

vertexId: number

在哪里获得邻接垂直。


返回

给定垂直 ID 周围的 adjacency 垂直 ID 列表。

GetCenter


返回

EditableMesh 的边界箱的中心。

GetColor

返回指定颜色 ID 的颜色。

参数

colorId: number

为获取颜色的颜色 ID。


返回

为要求的稳定颜色 ID 添色。

GetColorAlpha

返回指定的稳定颜色 ID 上的颜色 alpha (透明度)。

参数

colorId: number

为获取 alpha 的颜色 ID。


返回

在请求稳定颜色 ID 上,颜色 alpha。

GetColors

将网格的所有颜色返回为稳定颜色 ID 列。


返回

列表稳定颜色 ID。

GetFaceColors

返回面部的颜色 ID 为面部上的垂直。

参数

faceId: number

获取颜色ID的面部ID。


返回

用于指定面上的垂直的颜色ID列表。

GetFaceNormals

返回面部的普通ID以面部上的垂直。

参数

faceId: number

获取普通ID的面部ID。


返回

用于指定面上的垂直的普通 ID 列表。

GetFaceUVs

返回面部的 UV 身份证号码,用于面部上的垂直。

参数

faceId: number

获取 UV 身份证的面部 ID。


返回

用于指定面上的垂直的 UV 列表。

GetFaceVertices

返回面部的垂直 ID。

参数

faceId: number

返回

给出面周围的垂直 ID 列表。

GetFaces

将网格的所有面返回列表的稳定面 ID。


返回

列表稳定面 ID。

GetFacesWithAttribute

返回使用指定垂直 ID、普通 ID、UV ID 或颜色 ID 的面列表。

参数

id: number

用于查找使用它的面部的属性ID。


返回

使用指定属性 ID 的面部 ID 列表。

GetNormal

返回给定的普通 ID 的普通 vector。

参数

normalId: number

您可以使用此处获得普通矢矢量力。


返回

符合要求的普通 vector。

GetNormals

将网格中的所有普通返回列表中的稳定普通 ID。


返回

列表稳定的普通ID。

GetPosition

获取网格的本地对象空间中的坐标。

参数

vertexId: number

获取位置的稳定垂直 ID。


返回

网格的本地对象空间中的位置。

GetSize


返回

EditableMesh 的大小。

GetUV

返回给定的 UV ID 上的 UV 坐标。

参数

uvId: number

获取 UV 坐标的 UV ID。


返回

在要求的 UV ID 上的 UV 坐标。

GetUVs

将网格上的所有 UV 返回为列表的稳定 UV ID。


返回

稳定的 UV 标识列表。

GetVertices

将所有边角返回为稳定的边角 ID 列表。


返回

列表稳定垂直 ID。

GetVerticesWithAttribute

返回使用指定面 ID、普通 ID、UV ID 或颜色 ID 的垂直列表。

参数

id: number

用于查找使用它的垂直的属性ID。


返回

使用给定属性 ID 的零件列表。

IdDebugString

返回一个描述可用于调试的有效ID的字符串,例如 f17v12 ,包含类输入、ID 号和版本。

参数

id: number

用于返回调试信息字符串的 ID。


返回

描述人类可以读取的 ID 的字符串。

MergeVertices

Map

将触摸到一起的垂直合并,以使用单个垂直 ID ,但保留其他原始属性 ID。

参数

mergeTolerance: number

垂直在哪里考虑触摸到另一个。


返回

Map

将 old vertex ID 映射到 new vertex ID 对于合并后的垂直。

RaycastLocal

投射一个射线,返回交叉点、面部 ID 和中心坐标。 此方法的输入和输出都在网格的本地对象空间中。

一个 中心点坐标 是一种用于指定面上的点作为面的重量组合的方法。 这是一种用于泛用方法混合垂直属性的方法。 请参阅此方法的代码示例作为示例。

参数

origin: Vector3

网格本地对象空间中的射线的起始。

direction: Vector3

射线的方向。


返回

交叉点、面 ID 和中心坐标的柱。

代码示例

EditableMesh:RaycastLocal()

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

RemoveFace

void

使用其稳定的面部 ID 移除一个面。

参数

faceId: number

返回

void

RemoveUnused

移除所有不使用的角、普通、UV 和颜色,并且将返回已移除的 ID 。


返回

所有已移除的稳定ID。

ResetNormal

void

将此普通 ID 重置为自动根据网格形状计算,而不是手动设置。

参数

normalId: number

稳定的普通ID以重置。


返回

void

SetColor

void

为一个颜色ID 设置颜色。

参数

colorId: number

设置颜色的稳定颜色 ID。

color: Color3

颜色设置。


返回

void

SetColorAlpha

void

为一个颜色ID设置颜色 alpha (透明度)。

参数

colorId: number

稳定的颜色 ID,用于设置颜色 alpha。

alpha: number

设置。


返回

void

SetFaceColors

void

将面部的垂直颜色设置为新的颜色 ID。

参数

faceId: number

用于更新垂直颜色的面部 ID。

ids: Array

给出面的垂直使用的新稳定颜色 ID 列表。


返回

void

SetFaceNormals

void

将面部的垂直普通化到新的普通ID。

参数

faceId: number

用于更新垂直正常的面部ID。

ids: Array

给出面的垂直使用的新普通 ID 列表。


返回

void

SetFaceUVs

void

将面部的垂直 UV 设置为新的 UV ID。

参数

faceId: number

用于更新垂直 UV 的面部 ID。

ids: Array

给出的面垂直的新稳定的 UV 标识列表。


返回

void

SetFaceVertices

void

将面的垂直设置为新的垂直 ID。

参数

faceId: number

面部ID,用于更新垂直。

ids: Array

给出面的新稳定垂直 ID 列表。


返回

void

SetNormal

void

为一个普通ID设置一个值。这将为所有使用普通ID的面部垂直值改变。

参数

normalId: number

设置默认向矢量力的稳定 ID。

normal: Vector3

常量设置。


返回

void

SetPosition

void

在网格的本地对象空间中设置一个垂直位置。

参数

vertexId: number

稳定的垂直 ID 位置。

在网格的本地对象空间中的位置。


返回

void

SetUV

void

设置 UV 坐标以便于使用 UV ID。

参数

uvId: number

设置 UV 坐标的 UV ID。

UV 坐标。


返回

void

Triangulate

void

将所有面分为网格上的三角形。 目前,这并且不能创建三角形,但如果您的代码使用三角形,请在 AssetService:CreateEditableMeshAsync() 后调用此方法。


返回

void

活动