EditableMesh
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
EditableMesh mengubah meshes visual yang diterapkan saat terhubung ke MeshPart , memungkinkan pencarian dan modifikasi meshes baik di Studio maupun di pengalaman.
Sebuah EditableMesh dapat dibuat dari sebuah Content yang ada dari MeshPart atau ID mesh menggunakan AssetService:CreateEditableMeshAsync() , atau kosong EditableMesh dapat dibuat dengan AssetService:CreateEditableMesh() .Kemudian dapat ditampilkan, dimodifikasi, dan model tabrakannya diperbarui.Tidak semua langkah diperlukan; misalnya, Anda mungkin ingin membuat EditableMesh hanya untuk raycast tanpa pernah menampilkannya.
Sebuah EditableMesh ditampilkan saat terhubung ke MeshPart baru, melalui AssetService:CreateMeshPartAsync() .Anda dapat membuat lebih banyak instansi yang merujuk pada yang sama , atau tautkan ke yang ada melalui .
Untuk menghitung ulang kolisi dan geometri cairan setelah diedit, Anda dapat sekali lagi memanggil AssetService:CreateMeshPartAsync() dan MeshPart:ApplyMesh() untuk memperbarui MeshPart yang ada.Umumnya disarankan untuk melakukan ini pada akhir edit konsep, bukan setelah panggilan individu ke metode yang memanipulasi geometri.Perubahan visual pada mesh akan selalu segera dicerminkan oleh mesin, tanpa perlu memanggil AssetService:CreateMeshPartAsync() .
Mengaktifkan EditableMesh untuk Pengalaman Terpublikasi
Untuk tujuan keamanan, menggunakan EditableMesh gagal secara default untuk pengalaman yang dipublikasikan.Untuk mengaktifkan penggunaan, EditableMesh , Anda harus memiliki usia 13+ diverifikasi dan ID terverifikasi.Setelah Anda diverifikasi, buka Pengaturan Permainan Studio, pilih Keamanan , dan aktifkan toggle Izinkan API Mesh & Gambar .Ingatlah untuk meninjau Ketentuan Penggunaan sebelum mengaktifkan toggle.
Izin
Untuk mencegah penyalahgunaan, AssetService:CreateEditableMeshAsync() hanya akan memungkinkan Anda untuk memuat dan mengedit aset mesh:
- Yang dimiliki oleh pencipta pengalaman (jika pengalaman dimiliki oleh individu).
- Yang dimiliki oleh kelompok (jika pengalaman dimiliki oleh grup).
- Yang dimiliki oleh pengguna Studio yang masuk (jika file tempat belum disimpan atau dipublikasikan ke Roblox).
APIs membuang kesalahan jika digunakan untuk memuat aset yang tidak memenuhi kriteria di atas.
Mesh Ukuran Tetap
Saat membuat EditableMesh dari aset mesh yang ada (melalui AssetService:CreateEditableMeshAsync() ), mesh yang dihasilkan memiliki ukuran tetap secara default.Meshes ukuran tetap lebih efisien dalam hal memori tetapi Anda tidak dapat mengubah jumlah vertiks, wajah, atau atribut.Hanya nilai atribut vertex dan posisi yang dapat diedit.
ID Vertex/Wajah Stabil
Banyak metode EditableMesh banyak mengambil vertex , normal , UV , warna dan wajah ID.Ini diwakili sebagai bilangan bulat di Luau tetapi mereka membutuhkan penanganan khusus.Perbedaan utama adalah bahwa ID tetap stabil dan tetap sama bahkan jika bagian lain dari mesh berubah.Sebagai contoh, jika sebuah EditableMesh memiliki lima vertiks {1, 2, 3, 4, 5} dan Anda menghapus vertiks 4 , vertiks baru akan menjadi {1, 2, 3, 5} .
Perhatikan bahwa ID tidak dijamin berada dalam urutan dan mungkin ada lubang dalam penomoran, jadi saat mengulang melalui vertex atau wajah, Anda harus mengulang melalui tabel yang dikembalikan oleh GetVertices() atau GetFaces() .
Atribut Vertex Terbagi
Sebuah vertex adalah sudut wajah, dan terhubung secara topologis wajah bersama-sama.Vertiks dapat memiliki beberapa atribut: posisi, normal, koordinat UV, warna, dan transparansi.
Terkadang berguna untuk semua wajah yang menyentuh vertex untuk menggunakan nilai atribut yang sama, tetapi terkadang Anda akan ingin wajah yang berbeda menggunakan nilai atribut yang berbeda di vertex yang sama.Sebagai contoh, pada bola mulus, setiap vertex hanya akan memiliki satu normal.Sebaliknya, di sudut kubus, vertex akan memiliki 3 normal yang berbeda (satu untuk setiap wajah berdekatan).Anda juga dapat memiliki celah di koordinat UV atau perubahan tajam pada warna vertex.
Saat membuat wajah, setiap vertex akan secara default memiliki satu dari setiap atribut: satu normal, satu koordinat UV, dan satu warna/transparansi.Jika Anda ingin membuat celah, Anda harus membuat atribut baru dan menetapkannya di wajah.Sebagai contoh, kode ini akan membuat kubus tajam:
local AssetService = game:GetService("AssetService")
-- Dengan diberikan 4 ID sudut, menambahkan normal baru dan 2 segi tiga, membuat quad tajam
local function addSharpQuad(eMesh, vid0, vid1, vid2, vid3)
local nid = eMesh:AddNormal() -- Ini membuat ID normal yang dihitung secara otomatis
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
-- Membuat kubus dengan tepi yang meningkat di antara 6 sisi
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) -- Depan
addSharpQuad(eMesh, v1, v3, v4, v2) -- Kembali
addSharpQuad(eMesh, v1, v5, v7, v3) -- Terpisah
addSharpQuad(eMesh, v2, v4, v8, v6) -- Tepat
addSharpQuad(eMesh, v1, v2, v6, v5) -- Bawah
addSharpQuad(eMesh, v3, v7, v8, v4) -- Atas
eMesh:RemoveUnused()
return eMesh
end
Memutar
Wajah mesh memiliki sisi depan dan sisi belakang.Saat menarik meshes, hanya bagian depan wajah yang ditarik secara default, meskipun Anda dapat mengubah ini dengan mengatur properti meshes' DoubleSided ke true.
Pesanan vertiks di sekitar wajah menentukan apakah Anda melihat ke depan atau ke kembali.Bagian depan wajah terlihat saat vertex berjalan searah jam terbalik di sekitarnya.

Keterbatasan
EditableMesh saat ini memiliki batas 60.000 vertex dan 20.000 segi tiga. Mencoba menambahkan terlalu banyak vertex atau segi tiga akan menyebabkan kesalahan.
Rangkuman
Properti
Kembalikan true jika mesh adalah ukuran tetap.
Metode
Menambahkan warna baru ke geometri dan mem返ikan ID warna yang stabil.
Menambahkan normal baru ke geometri dan mengembalikan ID normal yang stabil.
Menambahkan segi tiga baru ke mesh dan mengembalikan ID wajah yang stabil.
Menambahkan UV baru ke geometri dan mem返ikan ID UV yang stabil.
Menambahkan vertex baru ke geometri dan mengembalikan ID vertex yang stabil.
Menghancurkan mesh.
Menemukan titik terdekat di permukaan mesh.
Menemukan vertex terdekat ke titik tertentu di ruang.
Menemukan semua vertex dalam bidang tertentu.
Kembalikan daftar wajah yang berdekatan dengan wajah tertentu.
Kembalikan daftar vertiks yang berdekatan dengan vertex tertentu.
Kembalikan warna untuk ID warna yang diberikan.
Kembalikan warna alfa (transparansi) pada ID warna yang diberikan.
Kembalikan semua warna dari mesh.
Kembalikan ID warna wajah untuk vertikal di wajah.
Kembalikan ID normal wajah untuk vertikal di wajah.
Kembalikan ID UV wajah untuk vertikal di wajah.
Kembalikan ID vertiks wajah.
Kembalikan semua wajah dari mesh.
Kembalikan vektor normal untuk ID normal yang diberikan.
Kembalikan semua normal dari mesh.
Mendapatkan posisi vertex.
Kembali koordinat UV pada UV ID yang diberikan.
Kembalikan semua UV dari mesh.
Kembalikan semua vertex sebagai daftar vertex ID yang stabil.
Kembalikan string yang menggambarkan ID stabil, berguna untuk tujuan debugging.
Gabungkan vertex yang menyentuh bersama.
Menghapus wajah menggunakan ID wajah stabilnya.
Menghapus semua vertex yang tidak digunakan, normal, UV, dan warna, dan mengembalikan ID yang dihapus.
Setel ulang ID normal ini untuk dihitung secara otomatis.
Tetapkan warna untuk ID warna.
Tetapkan warna alfa (transparansi) untuk ID warna.
Atur warna vertiks wajah ke ID warna baru.
Atur normalitas vertiks wajah ke ID normal baru.
Atur vertex UV wajah ke ID UV baru.
Atur vertex wajah ke ID vertex baru.
Tetapkan normal untuk ID normal.
Mengatur posisi vertex di ruang objek lokal meshes.
Mengatur koordinat UV untuk ID UV.
Membagi semua wajah di mesh menjadi segi tiga.
Properti
Metode
AddColor
Menambahkan warna baru ke geometri dan mem返ikan ID warna yang stabil.
Parameter
Memberikan nilai
ID warna stabil dari warna baru.
AddNormal
Menambahkan normal baru ke geometri dan mengembalikan ID normal yang stabil. Jika nilai normal tidak ditentukan, normal akan dihitung secara otomatis.
Parameter
Vektor normal. Jika nilai normal tidak ditentukan, normal akan dihitung secara otomatis.
Memberikan nilai
ID normal stabil dari norma baru.
AddTriangle
Menambahkan segi tiga baru ke mesh dan mengembalikan ID wajah yang stabil.
Parameter
ID dari vertex pertama dari segi tiga.
ID dari vertex kedua dari segi tiga.
ID dari vertex ketiga dari segi tiga.
Memberikan nilai
ID wajah stabil dari wajah baru.
AddUV
Menambahkan UV baru ke geometri dan mem返ikan ID UV yang stabil.
Parameter
Koordinat UV baru.
Memberikan nilai
ID UV stabil dari UV baru.
AddVertex
Menambahkan vertex baru ke geometri dan mengembalikan ID vertex yang stabil.
Parameter
Posisi di ruang objek lokal mesh.
Memberikan nilai
ID vertex stabil dari vertex baru.
Destroy
Menghancurkan konten mesh, segera mengambil kembali memori yang digunakan.
Memberikan nilai
FindClosestPointOnSurface
Menemukan titik terdekat di permukaan mesh.Kembalikan ID wajah, menunjuk pada mesh di ruang objek lokal, dan koordinat barysentrik dari posisi dalam wajah.Lihat RaycastLocal() untuk informasi lebih lanjut tentang koordinat barysentrik.
Parameter
Posisi titik dalam ruang objek lokal meshes.
Memberikan nilai
Tuple dari ID wajah, menunjuk pada mesh di ruang objek lokal, dan koordinat barysentrik dari posisi di wajah.
FindClosestVertex
Menemukan vertex terdekat ke titik tertentu di ruang angkasa dan mengembalikan ID vertex yang stabil.
Parameter
Posisi titik dalam ruang objek lokal meshes.
Memberikan nilai
ID vertex stabil terdekat ke titik spasi yang ditentukan.
FindVerticesWithinSphere
Menemukan semua vertex dalam bidang tertentu dan kembalikan daftar ID vertex yang stabil.
Parameter
Pusat dari lingkaran di ruang objek lokal mesh.
Radius dari bola.
Memberikan nilai
Daftar ID vertex stabil dalam bidang yang diminta.
GetAdjacentFaces
Diberikan ID wajah yang stabil, mengembalikan daftar wajah berdekatan.

Parameter
Memberikan nilai
Daftar ID wajah yang berdekatan dengan wajah yang diberikan.
GetAdjacentVertices
Diberikan ID vertex yang stabil, mengembalikan daftar vertex berdekatan.

Parameter
ID Vertex di sekitar mana untuk mendapatkan vertex berdekatan.
Memberikan nilai
Daftar ID dari vertiks berdekatan di sekitar ID vertex yang diberikan.
GetColor
Kembalikan warna untuk ID warna yang diberikan.
Parameter
ID warna untuk mendapatkan warna.
Memberikan nilai
Warna untuk ID warna stabil yang diminta.
GetColorAlpha
Kembalikan warna alfa (transparansi) pada ID warna stabil yang diberikan.
Parameter
ID warna untuk mendapatkan alfa.
Memberikan nilai
Alpha warna pada ID warna stabil permintaan.
GetColors
Kembalikan semua warna mesh sebagai daftar ID warna yang stabil.
Memberikan nilai
Daftar ID warna stabil.
GetFaceColors
Kembalikan ID warna wajah untuk vertikal di wajah.
Parameter
ID Wajah untuk mendapatkan ID warna.
Memberikan nilai
Daftar ID warna yang digunakan untuk vertikal pada wajah yang diberikan.
GetFaceNormals
Kembalikan ID normal wajah untuk vertikal di wajah.
Parameter
ID Wajah untuk mendapatkan ID normal.
Memberikan nilai
Daftar ID normal yang digunakan untuk vertiks di wajah yang diberikan.
GetFaceUVs
Kembalikan ID UV wajah untuk vertikal di wajah.
Parameter
ID Wajah untuk mendapatkan ID UV.
Memberikan nilai
Daftar ID UV yang digunakan untuk vertiks di wajah yang diberikan.
GetFaceVertices
Kembalikan ID vertiks wajah.
Parameter
Memberikan nilai
Daftar ID vertex di sekitar wajah yang diberikan.
GetFaces
Kembalikan semua wajah dari mesh sebagai daftar ID wajah yang stabil.
Memberikan nilai
Daftar ID wajah stabil.
GetNormal
Kembalikan vektor normal untuk ID normal yang diberikan.
Parameter
ID normal untuk mendapatkan vektor normal.
Memberikan nilai
Vektor normal pada ID normal yang diminta.
GetNormals
Kembalikan semua normal dari mesh sebagai daftar ID normal yang stabil.
Memberikan nilai
Daftar ID normal stabil.
GetPosition
Mendapatkan posisi vertex di ruang objek lokal meshes.
Parameter
ID vertex stabil untuk mendapatkan posisi.
Memberikan nilai
Posisi vertex dalam ruang objek lokal meshes.
GetUV
Kembali koordinat UV pada UV ID yang diberikan.
Parameter
ID UV untuk mendapatkan koordinat UV.
Memberikan nilai
Koordinat UV pada ID UV yang diminta.
GetUVs
Kembalikan semua UV dari mesh sebagai daftar UV ID yang stabil.
Memberikan nilai
Daftar ID UV yang stabil.
GetVertexFaceColor
Parameter
Memberikan nilai
GetVertexFaceNormal
Parameter
Memberikan nilai
GetVertexFaceUV
Parameter
Memberikan nilai
GetVertices
Kembalikan semua vertex sebagai daftar vertex ID yang stabil.
Memberikan nilai
Daftar ID vertex stabil.
IdDebugString
Kembalikan string yang menggambarkan ID stabil, berguna untuk tujuan debugging, seperti f17 atau v12 , yang berisi ketik, nomor ID, dan versi.
Parameter
ID untuk kembali mengembalikan string informasi debugging.
Memberikan nilai
String yang menggambarkan ID dalam format yang dapat dibaca manusia.
MergeVertices
Gabungkan vertex yang menyentuh bersama, untuk menggunakan satu ID vertex tetapi tetap menyimpan ID atribut asli lainnya.
Parameter
Jarak di mana vertex dianggap berhubungan satu sama lain.
Memberikan nilai
Pemetaan ID vertex lama ke ID vertex baru untuk vertex yang telah digabungkan.
RaycastLocal
Melemparkan sebuah sinar dan mengembalikan titik intersepsi, ID wajah, dan koordinat barysentrik.Input dan output metode ini berada di ruang objek lokal mesh.
Sebuah koordinat barysentrik adalah cara untuk menentukan titik dalam wajah sebagai kombinasi berat dari 3 vertiks wajah.Ini berguna sebagai cara umum untuk mencampur atribut vertex.Lihat sampel kode metode ini sebagai ilustrasi.
Parameter
Asal dari sinar di ruang objek lokal mesh.
Arah sinar.
Memberikan nilai
Tuple dari titik intersepsi, ID wajah, dan koordinat barysentrik.
Contoh Kode
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
RemoveFace
Menghapus wajah menggunakan ID wajah stabilnya.
Parameter
Memberikan nilai
RemoveUnused
Menghapus semua vertex, normal, UV, dan warna yang tidak digunakan di wajah mana pun, dan mengembalikan ID yang dihapus.
Memberikan nilai
Semua ID stabil yang dihapus.
ResetNormal
Atur ulang ID normal ini untuk dihitung secara otomatis berdasarkan bentuk mesh, bukan secara manual.
Parameter
ID normal stabil untuk diatur reset.
Memberikan nilai
SetBoneCFrame
Parameter
Memberikan nilai
SetBoneIsVirtual
Parameter
Memberikan nilai
SetBoneName
Parameter
Memberikan nilai
SetBoneParent
Parameter
Memberikan nilai
SetColor
Tetapkan warna untuk ID warna.
Parameter
ID warna stabil untuk diatur warnanya.
Warna untuk atur.
Memberikan nilai
SetColorAlpha
Tetapkan warna alfa (transparansi) untuk ID warna.
Parameter
ID warna stabil untuk menetapkan alfa warna.
Alpha untuk atur.
Memberikan nilai
SetFaceColors
Atur warna vertiks wajah ke ID warna baru.
Parameter
ID Wajah untuk diperbarui warna vertex.
Daftar ID warna stabil baru untuk digunakan untuk vertex wajah yang diberikan.
Memberikan nilai
SetFaceNormals
Atur normalitas vertiks wajah ke ID normal baru.
Parameter
ID Wajah untuk memperbarui normal vertex.
Daftar ID normal stabil baru untuk digunakan untuk vertex wajah yang diberikan.
Memberikan nilai
SetFaceUVs
Atur vertex UV wajah ke ID UV baru.
Parameter
ID Wajah untuk meningkatkan vertex UV.
Daftar ID UV stabil baru untuk digunakan untuk vertex wajah yang diberikan.
Memberikan nilai
SetFaceVertices
Atur vertex wajah ke ID vertex baru.
Parameter
ID Wajah untuk memperbarui vertex.
Daftar ID vertex stabil baru untuk digunakan untuk wajah yang diberikan.
Memberikan nilai
SetFacsBonePose
Parameter
Memberikan nilai
SetFacsCorrectivePose
Parameter
Memberikan nilai
SetFacsPose
Parameter
Memberikan nilai
SetNormal
Tetapkan normal untuk ID normal. Ini akan mengubah nilai normal untuk setiap sudut wajah yang menggunakan ID normal.
Parameter
ID normal stabil untuk menetapkan vektor normal.
Vektor normal untuk atur.
Memberikan nilai
SetPosition
Mengatur posisi vertex di ruang objek lokal meshes.
Parameter
ID vertex yang stabil dari vertex ke posisi.
Posisi di ruang objek lokal mesh.
Memberikan nilai
SetUV
Mengatur koordinat UV untuk ID UV.
Parameter
ID UV untuk menetapkan koordinat UV.
Koordinasi UV.
Memberikan nilai
SetVertexBoneWeights
Parameter
Memberikan nilai
SetVertexBones
Parameter
Memberikan nilai
SetVertexFaceColor
Parameter
Memberikan nilai
SetVertexFaceNormal
Parameter
Memberikan nilai
SetVertexFaceUV
Parameter
Memberikan nilai
Triangulate
Membagi semua wajah di mesh menjadi segi tiga.Saat ini ini tidak melakukan apa-apa karena hanya segi tiga yang dapat dibuat, tetapi jika kode Anda bergantung pada segi tiga, disarankan untuk memanggil metode ini setelah memanggil AssetService:CreateEditableMeshAsync() .