EditableMesh

非推奨を表示

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

作成できません

EditableMesh は、MeshPart にリンクすると、スタジオとエクスペリエンスの両方でメッシュのクエリと変更を可能にする、適用された視覚メッシュを変更します。

公開エクスペリエンスの有効化

セキュリティ目的で、EditableMesh を使用すると、公開エクスペリエンスにデフォルトで失敗します。使用を有効にするには、13歳以上で認証され、IDが認証されている必要があります。認証後、Studio の ゲーム設定 を開き、 セキュリティ を選択し、 メッシュ/画像 API を許可 トグルを有効にします。

許可

悪用を防ぐために、AssetService:CreateEditableMeshAsync() はメッシュアセットのロードと編集のみを許可します:

  • エクスペリエンスの作成者が所有しているもの (エクスペリエンスが個人によって所有されている場合)。
  • グループが所有しているもの (エクスペリエンスがグループに所有されている場合)。
  • ログイン済みのスタジオユーザーが所有するもの (場所ファイルが Roblox に保存されたり公開されたりしていない場合)

メモリ制限

編集可能なアセットは、現在メモリ使用のために高価です。クライアントのパフォーマンスに与える影響を最小限に抑えるために、EditableMesh は、サーバー、Studio、およびプラグインが無制限のメモリで動作しているにもかかわらず、厳格なクライアント側のメモリ予算を持っています。FixedSize を使用すると、メモリ予算内に留まり、EditableMesh を複数の MeshParts (マルチ参照)にリンクすることで、メモリ最適化に役立つ可能性があります。

作成と表示

An EditableMesh は、既存の ContentMeshPart またはメッシュ IDを使用して AssetService:CreateEditableMeshAsync() から、または空白の EditableMeshAssetService:CreateEditableMesh() で作成できます。それから表示、修正、そして衝突モデルが更新されることができます。すべてのステップが必要ではありません;たとえば、表示しないでレイキャストするだけで十分な場合、EditableMesh を作成したいかもしれません。


local AssetService = game:GetService("AssetService")
-- 空の編集可能なメッシュを作成する
local editableMesh = AssetService:CreateEditableMesh()
-- アセットIDから編集可能なメッシュを作成
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID))
end)
-- 別の編集可能なメッシュから編集可能なメッシュを作成
local editableMeshFromAnother = nil
local success, errorMessage = pcall(function()
editableMeshFromAnother = AssetService:CreateEditableMeshAsync(Content.fromObject(OTHER_EDITABLE_MESH))
end)
-- メッシュパーツから編集可能なメッシュを作成
local editableMeshFromMeshPart = nil
local success, errorMessage = pcall(function()
editableMeshFromMeshPart = AssetService:CreateEditableMeshAsync(MESH_PART.MeshContent)
end)

EditableMesh は、MeshPart を介して新しい AssetService:CreateMeshPartAsync() にリンクされたときに表示されます。同じ を参照するより多くのインスタンスを作成したり、既存の を通じてリンクを作成したりできます。


local AssetService = game:GetService("AssetService")
local Workspace = game:GetService("Workspace")
-- アセットIDから編集可能なメッシュを作成
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID))
end)
-- 編集可能なメッシュにリンクされた新しいメッシュパーツを作成
local newMeshPart = nil
local success, errorMessage = pcall(function()
newMeshPart = AssetService:CreateMeshPartAsync(Content.fromObject(editableMeshFromAsset))
end)
-- 代わりに、上記で作成した新しいメッシュパーツを既存のメッシュパーツにリンクする
local existingMeshPart = Workspace:FindFirstChild("EXISTING_MESH_PART")
existingMeshPart:ApplyMesh(newMeshPart)

編集後に衝突と液体の幾何を再計算するには、AssetService:CreateMeshPartAsync()MeshPart:ApplyMesh() を再び呼び出して、既存の MeshPart を更新できます。概念編集の終わりにこれを行うことが一般的に推奨され、幾何学を操作するメソッドへの個々の呼び出しの後で行うことはありません。メッシュに対するビジュアル変更は、AssetService:CreateMeshPartAsync() を呼び出す必要なく、エンジンにすぐに反映されます。

固定サイズのメッシュ

既存のメッシュアセットから EditableMesh を作成するとき (via AssetService:CreateEditableMeshAsync() )、結果の編集可能なメッシュはデフォルトで固定サイズになります。固定サイズのメッシュはメモリに関しては効率的ですが、ベクトル、顔、または属性の数を変更することはできません。ベクトル属性と位置の値のみが編集できます。


local AssetService = game:GetService("AssetService")
-- 固定サイズのデフォルトなしで編集可能なメッシュを作成
local editableMeshFromAsset = nil
local success, errorMessage = pcall(function()
editableMeshFromAsset = AssetService:CreateEditableMeshAsync(Content.fromAssetId(ASSET_ID), {FixedSize = false})
end)

安定なベクトル/顔ID

多くの EditableMesh メソッドは ベクトルノーマルUV 、および IDを取ります。これらは Luau で整数として表現されますが、特別な処理が必要です。主な違いは、ID が安定していることで、メッシュの他の部分が変更されても同じままです。たとえば、 に 5つの頂点があり、 を削除すると、新しい頂点は になります。

ID が順序通りに保証されるわけではなく、番号付けに穴がある可能性があるため、バージョンまたは顔を繰り返しているときは、GetVertices() または GetFaces() によって返されたテーブルを繰り返す必要があります。

分割ベクトル属性

A ベクトル は顔の角であり、トポロジカルに顔を結合します。ベリティは複数の属性を持つことができます:位置、ノーマル、UV 座標、色、透明度。

時々、ベクトルに触れるすべての顔が同じ属性値を使用するのは便利ですが、時々、異なる顔が同じベクトルで異なる属性値を使用したい場合があります。たとえば、滑らかな球体では、各ベクトルには単一のノーマルしかありません。反対に、キューブの角では、ベクトルに 3 種類のノーマル (それぞれ隣接する面に 1) があります。UV 座標に縫い目を持たせたり、ベクスルの色が鋭く変わることもできます。

顔を作成するときは、すべてのベクトルにデフォルトで各属性の 1 つがあります:1つのノーマル、1つのUVコーディネート、1つの色/透明度です。シームを作成したい場合は、新しい属性を作成して顔に設定する必要があります。たとえば、このコードは鋭いキューブを作成します:


local AssetService = game:GetService("AssetService")
-- 4つのベクトルIDを与えると、新しいノーマルと 2つの三角形を追加し、鋭いクワッドを作成する
local function addSharpQuad(editableMesh, vid0, vid1, vid2, vid3)
local nid = editableMesh:AddNormal() -- これにより、自動的に計算される通常のIDが生成されます
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
-- 6面間の縁が剥がれたキューブを作成
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) -- 前方
addSharpQuad(editableMesh, v1, v3, v4, v2) -- 戻る
addSharpQuad(editableMesh, v1, v5, v7, v3) -- 残り
addSharpQuad(editableMesh, v2, v4, v8, v6) -- 右
addSharpQuad(editableMesh, v1, v2, v6, v5) -- 下
addSharpQuad(editableMesh, v3, v7, v8, v4) -- 上
editableMesh:RemoveUnused()
return editableMesh
end

巻き上げ

メッシュの顔には、前面と後面があります。メッシュを描画するときは、デフォルトで顔の前側だけが描画されますが、 メッシュプロパティを に設定して変更できます。

顔の周りのベリティの順序は、あなたが前面か後面を見ているかどうかを決定します。頂点がそのまわりに反時計回りに移動すると、顔の前面が見えます。

Order of the vertices around the face

FACS ポーズ

アニメーション可能な頭は、顔アクションコーディングシステム (FACS) を使用します。FACS ポーズ参照 で、GetFacsPoses() や同様の方法を使用するときの有用な情報を見る。

それぞれの FACS ポーズは、Enum.FacsActionUnit 値によって指定されます。FACS ポーズでは、バーチャル骨それぞれに があり、メッシュのバインドポーズの骨の最初の をその FACS アクションユニットのポーズに変換することができます。すべての骨 CFrames はメッシュのローカル空間にあります。

これらの FACS ポーズは、アニメーション中にブレンドされます。時々、ベースのポーズのブレンドは悪い結果を生み出します。その場合、特定のベースポーズの組み合わせのブレンドを、より気に入る 修正ポーズ でオーバーライドできます。修正ポーズは、2または3の Enum.FacsActionUnit 値で指定されます。ベースの FACS ポーズと同様、修正ポーズのために、バーチャル骨それぞれに CFrame があり、メッシュのバインドポーズの骨の最初の CFrame を変換し、その FACS 修正のための CFrame に変換します。

制限

EditableMesh 現在、60,000のベクトルと 20,000のトライアングルの制限があります。ベクトルやトライアングルを多く追加しようとすると、エラーが発生します。

概要

プロパティ

  • 読み取り専用
    複製されていません
    Robloxのセキュリティ
    並列読み取り

    メッシュが固定サイズである場合、true を返します。

方法

プロパティ

FixedSize

読み取り専用
複製されていません
Robloxのセキュリティ
並列読み取り

固定サイズのメッシュは、ベクトル属性の値を変更できますが、ベクトルとトライアングルを追加または削除することはできません。

方法

AddColor

幾何学に新しい色を追加し、安定した色 ID を返します。

パラメータ

color: Color3

新しい色。

既定値: ""
alpha: number

色アルファ (透明性)。

既定値: ""

戻り値

新しい色の安定したカラーID。

AddNormal

幾何学に新しいノーマルを追加し、安定なノーマル ID を返します。普通値が指定されていない場合、普通は自動的に計算されます。

パラメータ

normal: Vector3

通常のベクトル。通常の値が指定されていない場合、通常は自動的に計算されます。

既定値: ""

戻り値

新しいノーマルの安定した通常 ID。

AddTriangle

メッシュに新しい三角形を追加し、安定した顔IDを返します。

パラメータ

vertexId0: number

トライアングルの最初の頂点の ID。

既定値: ""
vertexId1: number

トライアングルの第二の頂点の ID。

既定値: ""
vertexId2: number

三角形の第 3 頂点の ID。

既定値: ""

戻り値

新しい顔の安定した顔ID。

AddUV

ジオメトリに新しいUVを追加し、安定した UV ID を返します。

パラメータ

新しいUV座標。

既定値: ""

戻り値

新しいUVの安定したUV ID。

AddVertex

ジオメトリに新しいベクトルを追加し、安定なベクトル IDを返します。

パラメータ

メッシュのローカルオブジェクトスペースの位置。

既定値: ""

戻り値

新しいベクトルの安定なベクトル ID。

Destroy

()

メッシュの内容を破壊し、使用済みメモリをすぐに回収します。


戻り値

()

FindClosestPointOnSurface

メッシュの表面で最も近いポイントを見つけます。面 ID を返し、ローカルオブジェクトスペースのメッシュにポイントを置き、顔内の位置のバリセントリック座標を取得します。バリセントリック座標に関する詳細は、RaycastLocal() を参照してください。

パラメータ

point: Vector3

メッシュのローカルオブジェクトスペースのポイント位置。

既定値: ""

戻り値

顔ID、ローカルオブジェクトスペースのメッシュにポイント、および顔内の位置のバリセントリック座標

FindClosestVertex

空間の特定のポイントに最も近いベクトルを見つけ、安定なベクトル IDを返します。

パラメータ

toThisPoint: Vector3

メッシュのローカルオブジェクトスペースのポイント位置。

既定値: ""

戻り値

空間の指定されたポイントに最も近い安定なベクトル ID。

FindVerticesWithinSphere

特定の球体内のすべてのベクトルを見つけ、安定なベクトル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

隣接するベクトルを取得するためのVertex ID。

既定値: ""

戻り値

指定されたベクトルIDの周りの隣接するベクトルのIDのリスト。

GetCenter


戻り値

EditableMesh のバインディングボックスの中心。

GetColor

指定された色 IDの色を返します。

パラメータ

colorId: number

色を取得する色の ID。

既定値: ""

戻り値

リクエストされた安定色 IDの色。

GetColorAlpha

指定された安定色 ID でアルファ (透明度) 色を返します。

パラメータ

colorId: number

アルファを取得する色の ID。

既定値: ""

戻り値

リクエスト安定色 ID のアルファカラー。

GetColors

メッシュのすべての色を安定色の ID リストとして返します。


戻り値

安定した色IDのリスト。

GetFaceColors

顔のベリーの色 ID を返し、顔のベリーにある垂直方向の顔の色を返します。

パラメータ

faceId: number

色IDを取得するための顔ID。

既定値: ""

戻り値

指定された顔の頂点に使用される色IDのリスト。

GetFaceNormals

顔のノーマルIDを返し、顔の頂点に対するノーマルIDを返します。

パラメータ

faceId: number

通常のIDを取得するための顔ID。

既定値: ""

戻り値

指定された顔の頂点に使用される通常のIDのリスト。

GetFaceUVs

顔のヴァーテックスのための顔の UV ID を返します。

パラメータ

faceId: number

UV ID を取得するための顔 ID。

既定値: ""

戻り値

指定された顔の頂点に使用される UV ID のリスト。

GetFaceVertices

顔のベクトルIDを返します。

パラメータ

faceId: number
既定値: ""

戻り値

指定された顔の周りのベクトルID リスト。

GetFaces

メッシュのすべての顔を安定した顔IDのリストとして返します。


戻り値

安定した顔IDのリスト。

GetNormal

指定されたノーマル ID の普通のベクトルを返します。

パラメータ

normalId: number

通常のベクトルを取得するための正常の ID。

既定値: ""

戻り値

リクエストされた通常の ID でのノーマルベクトル。

GetNormals

メッシュのすべてのノーマルを安定なノーマル ID のリストとして返します。


戻り値

安定したノーマル ID のリスト。

GetPosition

メッシュのローカルオブジェクトスペースでのvertex の位置を取得します。

パラメータ

vertexId: number

位置を取得するための安定なベクトル ID。

既定値: ""

戻り値

メッシュのローカルオブジェクトスペースでのベクトルの位置。

GetSize


戻り値

EditableMesh のサイズ。

GetUV

指定されたUV IDでUV座標を返します。

パラメータ

uvId: number

UV 座標を取得するための UV ID。

既定値: ""

戻り値

リクエストされた UV ID の UV 座標。

GetUVs

メッシュのすべてのUVを安定したUVIDのリストとして返します。


戻り値

安定した UV ID のリスト。

GetVertices

すべてのベクトルを安定なベクトルID リストとして返します。


戻り値

安定なベクトルIDのリスト。

IdDebugString

安定 ID を説明する文字列を返し、デバッグ目的のように f17 または v12 など、タイプ、ID 番号、バージョンを含みます。

パラメータ

id: number

デバッグ情報ストリングを返す ID

既定値: ""

戻り値

人間が読みやすい形式で ID を記述する文字列。

MergeVertices

Map

同じ位置にあるベクトルをマージし、単一のベクトル ID を使用しつつ、他のオリジナルのアトリビュート ID を維持します。

パラメータ

mergeTolerance: number

ヴェルテックスが互いに触れると考えられる距離。

既定値: ""

戻り値

Map

マージされたバージェットの古いベクトル ID と新しいベクトル IDのマッピング。

RaycastLocal

レイを投射し、交点、顔ID、バリセントリック座標を返すこのメソッドの入力と出力は、メッシュのローカルオブジェクト空間にあります。

A バリセントリック座標 は、顔内のポイントを重量の組み合わせの 3 つの頂点として指定する方法です。これは、ベクトル属性をブレンドする一般的な方法として有用です。このメソッドのコードサンプルをイラストとして見てください。

パラメータ

origin: Vector3

メッシュのローカルオブジェクトスペースでのレイの起源。

既定値: ""
direction: Vector3

レイの方向。

既定値: ""

戻り値

交点、顔ID、バリセントリック座標のトライプル。

コードサンプル

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

RemoveFace

()

安定した顔IDを使用して顔を削除します。

パラメータ

faceId: number
既定値: ""

戻り値

()

RemoveUnused

どの顔でも使用されていないすべてのベクトル、ノーマル、UV、および色を削除し、削除されたIDを返します。


戻り値

削除されたすべての安定 ID。

ResetNormal

()

このノーマル ID を、メッシュの形状に基づいて自動的に計算されるように設定し直し、手動で設定するのをやめます。

パラメータ

normalId: number

リセットする安定したノーマル ID。

既定値: ""

戻り値

()

SetColor

()

色を色 ID に設定します。

パラメータ

colorId: number

色を設定するための安定したカラー ID。

既定値: ""
color: Color3

設定する色。

既定値: ""

戻り値

()

SetColorAlpha

()

色アルファ (透明度) を色 ID に設定します。

パラメータ

colorId: number

色アルファを設定するための安定したカラー ID。

既定値: ""
alpha: number

設定するアルファ。

既定値: ""

戻り値

()

SetFaceColors

()

顔の頂点の色を新しいカラーIDに設定します。

パラメータ

faceId: number

ベクトルカラーを更新するための顔ID。

既定値: ""
ids: Array

指定された顔の頂点に使用する新しい安定色の ID リスト。

既定値: ""

戻り値

()

SetFaceNormals

()

顔のベクトルノーマルを新しいノーマルIDに設定します。

パラメータ

faceId: number

ベクトルノーマルを更新するための顔ID。

既定値: ""
ids: Array

指定された顔の頂点に使用する新しい安定なノーマル ID リスト。

既定値: ""

戻り値

()

SetFaceUVs

()

顔のベクトルUVを新しいUVIDに設定します。

パラメータ

faceId: number

ベクトルUVを更新するための顔ID。

既定値: ""
ids: Array

指定された顔の頂点に使用する新しい安定な UV ID のリスト。

既定値: ""

戻り値

()

SetFaceVertices

()

顔のベクトルを新しいベクトルIDに設定します。

パラメータ

faceId: number

ヴェルテックスを更新するための顔ID。

既定値: ""
ids: Array

指定された顔に使用する新しい安定なベクトルIDのリスト。

既定値: ""

戻り値

()

SetNormal

()

普通のID に普通を設定します。これにより、普通の ID を使用しているすべての顔ベクトルの普通の値が変更されます。

パラメータ

normalId: number

正常のベクトルを設定するための安定な通常の ID。

既定値: ""
normal: Vector3

設定するノーマルベクトル。

既定値: ""

戻り値

()

SetPosition

()

メッシュのローカルオブジェクトスペースでベクトル位置を設定します。

パラメータ

vertexId: number

ポジションに対するベクトルの安定なベクトル ID。

既定値: ""

メッシュのローカルオブジェクトスペースの位置。

既定値: ""

戻り値

()

SetUV

()

UV ID の UV 座標を設定します。

パラメータ

uvId: number

UV 座標を設定するための UV ID。

既定値: ""

UV 座標。

既定値: ""

戻り値

()

Triangulate

()

メッシュ上のすべての顔を三角形に分けます。現在、トライアングルのみが作成できるため、これは何もしませんが、コードがトライアングルに依存している場合は、AssetService:CreateEditableMeshAsync() を呼んだ後、このメソッドを呼ぶことをお勧めします。


戻り値

()

イベント