EditableMesh
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
EditableMesh mengubah visualitas visual yang diterapkan ketika dikaitkan dengan MeshPart, memungkinkan untuk mengekstraksi dan modifikasi mesh baik di Studio maupun dalam pengalaman.
An EditableMesh dapat dibuat dari Content yang ada dari
Sebuah EditableMesh ditampilkan ketika terhubung ke MeshPart baru, melalui AssetService:CreateMeshPartAsync(). Anda dapat menciptakan lebih banyak 2>Class.Ed
Untuk menghitung ulang ketidakсовatan dan geometri cair setelah mengedit, Anda dapat sekali lagi memanggil AssetService:CreateMeshPartAsync() dan MeshPart:ApplyMesh() untuk menyelesaikan Class.MeshPart</
Mengaktifkan EditableMesh untuk Pengalaman Terbit
Untuk tujuan keamanan, menggunakan EditableMesh gagal secara default untuk pengalaman yang diterbitkan. Untuk mengaktifkan penggunaan, EditableMesh , Anda harus berusia 13+ dan ID terverifikasiyang diverifikasi
Izinkan
Untuk mencegah penyalahgunaan, AssetService:CreateEditableMeshAsync() hanya akan memungkinkan Anda untuk memuat dan mengedit aset mesh:
- Itu dimiliki oleh pembuatnya pengalaman (jika pengalaman dimiliki oleh seorang individu).
- Itu dimiliki oleh kelompok (jika pengalaman dimiliki oleh grup).
- Itu dimiliki oleh pengguna Studio yang masuk (jika file tempat belum disimpan atau diterbitkan ke Roblox).
API menyebabkan kesalahan jika mereka digunakan untuk memuat aset yang tidak memenuhi kriteria di atas.
Meshes Tetap Ukuran
Ketika membuat EditableMesh dari aset mesh yang ada (melalui AssetService:CreateEditableMeshAsync()), mesh yang dihasilkan adalah ukuran tetap secara default. Mesh ukuran tetap lebih efisien dalam hal memori tetapi Anda tidak dapat mengubah jumlah sudut, wajah, atau属ribut. Hanya nilai vertikal dan posisi
ID Vertex/Wajah Stabil
Banyak metode EditableMesh mengambil u
Catat bahwa ID tidak dijamin untuk berada dalam urutan dan mungkin ada lubang dalam penghitungan, jadi ketika beriterasi melalui vertikal atau wajah, Anda harus beriterasi melalui tabel yang dikembalikan oleh GetVertices() atau GetFaces() .
Attribut Vertex Berpisah
Sebuah vertex adalah sudut wajah, dan secara topologis menghubungkan wajah bersama-sama. Vertik dapat memiliki beberapa属性: posisi, normal, koordinat UV, warna, dan transparansi.
Terkadang itu berguna untuk semua wajah yang menyentuh vertiks untuk menggunakan nilai属性 yang sama, tetapi kadang-kadang Anda ingin wajah yang berbeda untuk menggunakan nilai属性 yang berbeda di vertiks yang sama. Misalnya, di sebuah kubus halus, setiap vertiks hanya akan memiliki satu normal. Di sisi lain, di sudut cube
Ketika membuat wajah, setiap ujung akan secara default memiliki satu dari setiap属性: satu normal, satu koordinat UV, dan satu warna / transparansi. Jika Anda ingin membuat tampan, Anda harus membuat属性 baru dan menetapkannya di wajah. Misalnya, kode ini akan membuat kubus tajam:
local AssetService = game:GetService("AssetService")
-- Diberikan 4 ID sudut, menambahkan 2 segi baru, dan membuat quad yang tajam
local function addSharpQuad(eMesh, vid0, vid1, vid2, vid3)
local nid = eMesh:AddNormal() -- Ini menciptakan ID normal yang otomatis dihitung
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 ujung yang dibuat 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) -- Kiri
addSharpQuad(eMesh, v2, v4, v8, v6) -- Kanan
addSharpQuad(eMesh, v1, v2, v6, v5) -- Bawah
addSharpQuad(eMesh, v3, v7, v8, v4) -- Atas
eMesh:RemoveUnused()
return eMesh
end
Menyusul
Wajah meshes memiliki sisi depan dan sisi belakang. Saat mengecualikan meshes, hanya bagian depan wajah yang ditunjukkan secara default, meskipun Anda dapat mengubah ini dengan menetapkan propinsi mesin peta DoubleSided ke true .
Urutan vertikal di sekitar wajah menentukan apakah Anda melihat ke depan atau ke kembali. Bagian depan wajah terlihat ketika vertikal bergerak terbalik di sekitarnya.
Keterbatasan
EditableMesh saat ini memiliki batas 60.000 vert dan 20.000 segi tiga. Mencoba menambahkan terlalu banyak vert atau segi tiga akan menyebabkan kesalahan.
Rangkuman
Metode
Menambahkan warna baru ke geometri dan mengembalikan ID warna yang stabil.
Menambahkan normal baru ke geometri dan mengembalikan ID normal yang stabil.
Menambahkan segi baru ke mesh dan mengembalikan ID wajah yang stabil.
Menambahkan UV baru ke geometri dan mengembalikan ID UV yang stabil.
Menambahkan vertikal baru ke geometri dan mengembalikan ID vertikal yang stabil.
Menghancurkan malah.
Menemukan titik terdekat di permukaan mesh.
Menemukan vertiks terdekat ke titik tertentu di ruang.
Menemukan semua sudut dalam satu kubus spesifik.
Mengembalikan daftar wajah yang berdekatan dengan wajah yang diberikan.
Mengembalikan daftar vertensi yang berada di dekat vertensi tertentu.
Mengembalikan warna untuk ID warna yang diberikan.
Mengembalikan warna alpha (transparansi) pada ID warna yang diberikan.
Mengembalikan semua warna dari mesh.
Mengembalikan ID warna wajah untuk vertikal di wajah.
Mengembalikan ID wajah normal untuk vertikal di wajah.
Mengembalikan ID UV wajah untuk vertikal di wajah.
Mengembalikan ID vertikal wajah.
Mengembalikan semua wajah dari mesh.
Mengembalikan daftar wajah yang menggunakan ID属性 yang diberikan.
Mengembalikan vektor normal untuk ID yang diberikan.
Mengembalikan semua normal dari mesh.
Mendapatkan posisi vertiks.
Mengembalikan koordinat UV diberikan ID UV.
Mengembalikan semua UV dari mesh.
Mengembalikan semua sudut sebagai daftar ID sudut yang stabil.
Mengembalikan daftar vertikal yang menggunakan ID属性 yang diberikan.
Mengembalikan string yang menggambarkan ID yang stabil, berguna untuk tujuan debugging.
Menggabungkan vertikal yang ber触an satu sama lain.
Menghapus wajah menggunakan ID wajahnya yang stabil.
Hapus semua sudut yang tidak digunakan, normal, UV, dan warna, dan kembalikan ID yang dihapus.
Atur ulang ID ini untuk dihitung secara otomatis.
Tetapkan warna untuk ID warna.
Tetapkan warna alpha (transparansi) untuk ID warna.
Tetapkan warna vertikal wajah ke ID warna baru.
Tetapkan normalitas vertikal wajah ke ID normal baru.
Tetapkan UV vertikal wajah ke ID UV baru.
Tetapkan ID vertikal wajah ke ID vertikal baru.
Tetapkan yang normal untuk ID yang normal.
Tetapkan posisi vertiks di ruang objek lokal mesin.
Tetapkan koordinat UV untuk ID UV.
Membagi semua wajah di meshes menjadi segi tiga.
Properti
Metode
AddColor
Menambahkan warna baru ke geometri dan mengembalikan ID warna yang stabil.
Parameter
Memberikan nilai
ID warna yang 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 yang stabil dari baru normal.
AddTriangle
Menambahkan segi baru ke mesh dan mengembalikan ID wajah yang stabil.
Parameter
ID dari vertiks pertama dari segi tiga.
ID dari vertiks kedua dari segi tiga.
ID dari sudut ketiga dari segi tiga.
Memberikan nilai
ID wajah yang stabil dari wajah baru.
AddUV
Menambahkan UV baru ke geometri dan mengembalikan ID UV yang stabil.
Parameter
Koordinat UV baru.
Memberikan nilai
ID UV yang stabil dariUV baru.
AddVertex
Menambahkan vertikal baru ke geometri dan mengembalikan ID vertikal yang stabil.
Parameter
Posisi di ruang lokal objek meshes.
Memberikan nilai
ID vertiks yang stabil dari vertiks baru.
Destroy
Menghancurkan konten mesh, segera mengklaim kembali memori yang digunakan.
Memberikan nilai
FindClosestPointOnSurface
Menemukan titik terdekat di permukaan mesh. Mengembalikan ID wajah, poin di permukaan mesh, dan koordinat barycentric dari posisi di wajah. Lihat RaycastLocal() untuk lebih banyak informasi tentang koordinat barycentric.
Parameter
Posisi titik dalam ruang lokal objek.
Memberikan nilai
Templat ID wajah, poin pada mesh dalam ruang lokal objek, dan koordinat barysentris dari posisi dalam wajah.
FindClosestVertex
Menemukan vertiks terdekat ke titik tertentu dalam ruang dan mengembalikan ID vertiks yang stabil.
Parameter
Posisi titik dalam ruang lokal objek.
Memberikan nilai
ID vertiks stabil terdekat ke titik yang ditentukan dalam ruang.
FindVerticesWithinSphere
Menemukan semua sudut dalam satu sphere spesifik dan mengembalikan daftar ID sudut yang stabil.
Parameter
Memberikan nilai
Daftar ID vertikal yang stabil dalam lingkup yang diminta.
GetAdjacentFaces
Memberikan ID wajah yang stabil, mengembalikan daftar wajah yang berdekatan.
Parameter
Memberikan nilai
Daftar ID wajah yang berdekatan dengan wajah yang diberikan.
GetAdjacentVertices
Memberikan ID vertiks tunggal yang stabil, menghasilkan daftar vertiks tetangga.
Parameter
ID Vertex di sekitar yang akan mendapatkan vertiks tetangga.
Memberikan nilai
Daftar ID vertiks tetangga di sekitar ID vertiks yang diberikan.
GetColor
Mengembalikan warna untuk ID warna yang diberikan.
Parameter
ID warna untuk mendapatkan warna.
Memberikan nilai
Warna untuk ID warna yang diminta.
GetColorAlpha
Mengembalikan warna alpha (transparansi) pada ID warna yang diberikan.
Parameter
ID warna untuk mendapatkan alpha.
Memberikan nilai
Warna alpha pada tawaran warna yang stabil.
GetColors
Mengembalikan semua warna dari mesh sebagai daftar ID warna yang stabil.
Memberikan nilai
Daftar ID warna yang stabil.
GetFaceColors
Mengembalikan ID warna wajah untuk vertikal di wajah.
Parameter
ID Wajah untuk mendapatkan ID Warna.
Memberikan nilai
Daftar ID warna yang digunakan untuk vertikal di wajah yang diberikan.
GetFaceNormals
Mengembalikan ID wajah normal untuk vertikal di wajah.
Parameter
Wajah ID untuk mendapatkan ID yang normal.
Memberikan nilai
Daftar ID biasa yang digunakan untuk vertikal di wajah yang diberikan.
GetFaceUVs
Mengembalikan ID UV wajah untuk vertikal di wajah.
Parameter
ID Wajah untuk mendapatkan ID UV.
Memberikan nilai
Daftar ID UV yang digunakan untuk vertikal di wajah yang diberikan.
GetFaceVertices
Mengembalikan ID vertikal wajah.
Parameter
Memberikan nilai
Daftar ID vertex di sekitar wajah yang diberikan.
GetFaces
Mengembalikan semua wajah dari mesh sebagai daftar ID wajah yang stabil.
Memberikan nilai
Daftar ID wajah yang stabil.
GetFacesWithAttribute
Mengembalikan daftar wajah yang menggunakan ID sudut tertentu, ID normal, ID UV, atau ID warna.
Parameter
IDribut ID untuk menemukan wajah yang menggunakannya.
Memberikan nilai
Daftar ID wajah yang menggunakan ID属性 yang diberikan.
GetNormal
Mengembalikan vektor normal untuk ID yang diberikan.
Parameter
ID normal untuk mendapatkan vektor normal.
Memberikan nilai
Vektor normal pada ID normal yang diminta.
GetNormals
Mengembalikan semua normal dari mesh sebagai daftar ID normal yang stabil.
Memberikan nilai
Daftar ID normal yang stabil.
GetPosition
Mendapatkan posisi vertiks di ruang lokal objek.
Parameter
ID vertiks yang stabil untuk mendapatkan posisi.
Memberikan nilai
Posisi vertiks di ruang lokal mesin.
GetUV
Mengembalikan koordinat UV diberikan ID UV.
Parameter
ID UV untuk mendapatkan koordinat UV.
Memberikan nilai
Menghasilkan koordinat UV di ID UV yang diminta.
GetUVs
Mengembalikan semua UV dari mesh sebagai daftar ID UV yang stabil.
Memberikan nilai
Daftar ID UV yang stabil.
GetVertices
Mengembalikan semua sudut sebagai daftar ID sudut yang stabil.
Memberikan nilai
Daftar ID vertikal yang stabil.
GetVerticesWithAttribute
Mengembalikan daftar vertikal yang menggunakan ID wajah yang diberikan, ID normal, ID UV, atau ID warna.
Parameter
IDribut ID untuk menemukan vertikal yang menggunakannya.
Memberikan nilai
Daftar ID vertex yang menggunakan ID属性 yang diberikan.
IdDebugString
Mengembalikan string yang menggambarkan ID yang stabil, berguna untuk tujuan debug, seperti f17 atau v12 , mengandung ketik, nomor ID, dan versi.
Parameter
ID untuk mengembalikan string informasi debug.
Memberikan nilai
String yang menggambarkan ID dalam bentuk yang dapat dibaca manusia.
MergeVertices
Menggabungkan vertiks yang berhubungan bersama, untuk menggunakan ID vertiks tunggal tetapi menyimpan ID属性 asli lainnya.
Parameter
Jarak di mana vertikal dianggap berjatuhan satu sama lain.
Memberikan nilai
Peta tata ID lama untuk ID vertex baru untuk vertex yang telah digabung.
RaycastLocal
Mengirimkan sinar dan mengembalikan ruang objek persimpangan, ID wajah, dan koordinat barysentris. Masukan dan keluar dari metode ini berada di ruang objek lokal.
Sebuah koordinat barycentric adalah cara untuk menentukan titik dalam wajah sebagai kombinasi berat dari 3 vert wajah. Ini berguna sebagai cara umum untuk mencampur属ribut vertiks. Lihat sampel kode metode ini sebagai ilustrasi.
Parameter
Memberikan nilai
Tiple dari titik persimpangan, ID wajah, dan koordinat barycentric.
Contoh Kode
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
Menghapus wajah menggunakan ID wajahnya yang stabil.
Parameter
Memberikan nilai
RemoveUnused
Menghapus semua sudut, normal, UV, dan warna yang tidak digunakan di wajah mana pun, dan mengembalikan ID yang dihapus.
Memberikan nilai
Semua dari ID stabil yang dihapus.
ResetNormal
Atur ulang ID ini untuk dihitung secara otomatis berdasarkan bentuk mesh, bukan secara manual.
Parameter
ID normal yang stabil untuk reset.
Memberikan nilai
SetColor
Tetapkan warna untuk ID warna.
Parameter
ID warna yang stabil untuk warna yang akan ditetapkan.
Warna untuk diatur.
Memberikan nilai
SetColorAlpha
Tetapkan warna alpha (transparansi) untuk ID warna.
Parameter
Memberikan nilai
SetFaceColors
Tetapkan warna vertikal wajah ke ID warna baru.
Parameter
ID Wajah untuk diperbarui warna vértice.
Daftar ID warna baru yang stabil untuk digunakan untuk vertikal wajah yang diberikan.
Memberikan nilai
SetFaceNormals
Tetapkan normalitas vertikal wajah ke ID normal baru.
Parameter
ID Wajah untuk diperbarui norma vértice.
Daftar ID normal baru yang dapat digunakan untuk vertikal wajah yang diberikan.
Memberikan nilai
SetFaceUVs
Tetapkan UV vertikal wajah ke ID UV baru.
Parameter
ID Wajah untuk diperbarui dari UV vertikal.
Daftar ID UV baru yang stabil untuk digunakan untuk vertikal wajah yang diberikan.
Memberikan nilai
SetFaceVertices
Tetapkan ID vertikal wajah ke ID vertikal baru.
Parameter
ID Wajah untuk diperbarui vertikal.
Daftar ID vertikal baru yang dapat digunakan untuk wajah yang diberikan.
Memberikan nilai
SetNormal
Tetapkan normal untuk ID normal. Ini akan mengubah nilai normal untuk setiap sudut wajah yang menggunakan ID normal.
Parameter
ID normal yang stabil untuk diatur untuk menetapkan vektor normal.
Vector normal untuk diatur.
Memberikan nilai
SetPosition
Tetapkan posisi vertiks di ruang objek lokal mesin.
Parameter
Memberikan nilai
SetUV
Tetapkan koordinat UV untuk ID UV.
Parameter
Memberikan nilai
Triangulate
Membagi semua wajah di meshes menjadi segi tiga. Saat ini, ini tidak berfungsi karena hanya segi tiga yang dapat dibuat, tetapi jika kode Anda mengandalkan segi tiga, disarankan agar Anda menyebut metode ini setelah memanggil AssetService:CreateEditableMeshAsync() .