Saya mencoba menyorot persegi panjang dengan tinggi acak. Saya pikir cara termudah untuk melakukan ini adalah dengan membuat objek game "kotak" terpisah yang menguraikan persegi panjang.
Saya sudah mencoba dengan MeshRenderer + Transparent Texture, dan LineRenderer untuk menguraikan empat titik persegi panjang. Tidak ada yang sangat memuaskan.
(Baris renderer di tengah, skala kubus di sebelah kanan)
Apa cara yang benar untuk melakukan ini? Saya mencoba untuk mendapatkan sesuatu seperti persegi panjang kiri - perimeter sederhana dengan lebar tetap melalui empat titik yang saya pilih.
Di bawah ini adalah pendekatan non-shader.
Pikirkan kotak 2d Anda sebagai tidak lebih dari empat garis, di mana setiap garis hanya diregangkan dalam satu dimensi (dua dimensi lainnya adalah penampang tepi). Ini seperti jika Anda membuat kotak dalam kehidupan nyata, di mana Anda mengumpulkan kayu dengan panjang variabel yang semuanya memiliki ukuran penampang yang sama.
Dengan mengingat hal itu, Anda dapat menyusun Komponen, katakanlah
BoxBuilder
, yang ketika dilampirkan ke GameObject, membuat dan mengelola empat GameObjects anak. Setiap objek permainan anak adalah salah satu tepi kotak Anda, dan dapat berupa kubus 3d yang direntangkan hanya dalam satu dimensi. Denganwidth
danheight
didefinisikanBoxBuilder
tingkat, Anda dapat menghitung posisi yang diperlukan dan skala non-seragam dari empat tepi anak. Ini akan menjadi banyakpos.x=w/2
,pos.y=h/2
, ...,scale.x=h
,scale.y=w
, dll semacam kode.Meskipun saya yakin Anda hanya meminta 2-d, perhatikan bahwa ide yang sama ini dapat diterapkan ke kotak 3d jika diperlukan, di mana
BoxBuilder
sekarang harus membuat dan mengelola 12 tepi anak, tetapi sekali lagi hanya menskalakan setiap tepi dalam satu dimensi lokal.sumber
Cara sederhana adalah dengan menggunakan Shader dengan dua Pass: Pass pertama menggunakan vertex shader untuk memperbesar objek sedikit dan menggunakan pixel shader untuk mewarnainya menjadi warna solid yang cocok dengan warna yang Anda inginkan untuk memiliki garis, dan kemudian Pass kedua melakukan rendering biasa.
sumber
Saya punya masalah yang sama membuat garis besar, kecuali saya harus membuat "stroke" untuk 3d cube, dan menemukan cara baru untuk melakukannya yang saya tidak melihat di tempat lain secara online.
Pada gambar di bawah ini ada dua bentuk dengan garis besar. Yang di sebelah kanan adalah kubus yang dibangun dengan LineRenderer, yang membangun wajah datar yang selalu mengarah ke pengguna. Saya menemukan metode ini sangat glitchy, dengan "stroke" acak muncul yang menirukan segitiga yang membentuk wajah.
Yang di sebelah kiri adalah "inovasi" saya dengan 12 kubus kurus terpisah yang membentuk garis besar. Untuk mengubah ukuran "stroke" dalam garis besar saya perlu menambah / mengurangi ukuran dua sisi masing-masing dari 12 kubus kurus. Ini juga akan berfungsi untuk garis besar 2d. Cukup terapkan bahan untuk mengubah warna dan voila!
Pada gambar ini Anda bisa melihat detail struktur kubus ini. Ini semua bisa dibuat saat runtime tapi saya membuatnya dengan tangan dan menggunakannya sebagai cetakan.
sumber
Saya saat ini menghadapi masalah yang sama, dan solusi saya persis seperti yang disarankan DuckMaestro dan Raven Dreamer - Memiliki skrip yang membuat 4 objek anak saat runtime yang masing-masing mewakili sisi perbatasan dan melampirkan penyaji baris ke masing-masing.
Dalam kasus saya, saya perlu mengubah ukuran perbatasan terus-menerus agar tetap di sekitar objek saya (Jaring teks [yang menggunakan renderer jala] untuk bidang teks khusus) sehingga setiap pembaruan yang saya lakukan ini:
AlterBorder()
cukup mengakses renderer baris yang sesuai (ditentukan oleh parameter pertama) dan atur awal dan akhirnya masing-masing ke vektor pertama dan kedua.Perhatikan bahwa saya digunakan
renderer
sebagai referensi saya untuk ukuran, tetapi jelas Anda dapat menggunakan persegi panjang apa saja, selama x, y adalah sudut kiri atas.Dari apa yang saya tahu ini bekerja dengan sangat baik, tampak hebat dalam permainan karena saya dapat dengan mudah memindahkan objek berbatasan di sekitar semua sumbu 3 (Bahkan memutarnya, dan karena penyaji garis selalu menghadap kamera itu tidak terlihat aneh), dan tidak sulit diimplementasikan.
sumber