Untuk mewakili permukaan datar, Unity mencakup Plane dan QuadObjek primitif yang menyerupai pesawat tetapi tepinya hanya satu unit panjang, hanya menggunakan 4 simpul, dan permukaan berorientasi pada pesawat XY ruang koordinat lokal. More info
Lihat di Glossary Permainan primitifObjects yang dapat Anda sesaat di ScenesAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary Anda. Namun, berguna untuk memahami cara menggunakan script untuk membangun quadrilateral meshGrafik utama primitif Unity. Mesh membuat sebagian besar dunia 3D Anda. Unity mendukung mesh poligon triangulat atau Quadrangulasi. Nurbs, Nurms, permukaan Subdiv harus dikonversi ke poligon. More info
Lihat di Glossary diri. Ini penting untuk generasi mesh prosedural.
Catatan: Proses unity dan menampilkan geometri pada segitiga, dan tidak quad. Ini berarti bahwa primitif Quad terdiri dari dua segitiga.
Hal pertama yang perlu Anda lakukan adalah mengatur array vertices yang menggunakan bentuk Anda.
Contoh ini mengasumsikan bahwa quad terletak pada sumbu x dan sumbu y, dan bahwa skrip Anda mengandung lebar variabel dan tinggi.
Vector3[] vertices = new Vector3[4]
{
new Vector3(0, 0, 0),
new Vector3(width, 0, 0),
new Vector3(0, height, 0),
new Vector3(width, height, 0)
};
mesh.vertices = vertices;
Contoh ini memasok simpul dalam urutan berikut: Bottom-left Bottom-right Top-left Top-right
Karena cara yang mengambil sifat data Mesh, jauh lebih efisien untuk mengatur data dalam array Anda sendiri dan kemudian menetapkan array ke properti (misalnya, untuk Mesh.vertices
atau Mesh.normals
), daripada mengakses array properti melalui elemen individu.
Selanjutnya, Anda perlu mengatur segitiga. Sebuah quad terdiri dari dua segitiga, masing-masing terdiri dari tiga poin di array simpul yang Anda buat sebelumnya. Untuk menentukan poin, Anda mendefinisikan setiap segitiga sebagai tiga indeks array simpul. Misalnya, segitiga kiri bawah untuk quad ini menggunakan indeks 0, 2, dan 1 yang sesuai dengan koordinat (0, 0, 0), (0, tinggi, 0), dan (lebar, 0, 0) dari array simpul. Ordering penting karena Anda harus memesan sudut searah jarum jam. segitiga kanan atas menggunakan indeks 2, 3, dan 1.
int[] tris = new int[6]
{
// lower left triangle
0, 2, 1,
// upper right triangle
2, 3, 1
};
mesh.triangles = tris;
Mesh dengan simpul dan segitiga terlihat di Adegan, tetapi Unity tidak mendinginkan dengan benar karena tidak memiliki normal. Normal untuk contoh ini sederhana karena mereka semua identik. Setiap poin normal dalam arah sumbu z negatif di ruang lokal quad. Ketika Anda menambahkan normal, Unity benar mendinginkan quad, tetapi Anda perlu Cahaya di Adegan untuk melihat efek.
Vector3[] normals = new Vector3[4]
{
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward
};
mesh.normals = normals;
Jika Anda tidak ingin menentukan normal diri Anda, Anda dapat menggunakan Mesh.RecalculateNormals().
Akhirnya, untuk menampilkan Tekstur pada Bahan Mesh dengan benar, tambahkan koordinat tekstur ke Mesh. Koordinat tekstur antara 0 dan 1. Setiap simpul di Mesh memiliki koordinat tekstur yang menentukan di mana Tekstur Material untuk sampel dari. Untuk menunjukkan seluruh Tekstur di seluruh quad, nilai koordinat tekstur pada setiap simpul harus semua 0 atau 1 sehingga setiap sudut quad sesuai dengan sudut Tekstur.
Vector2[] uv = new Vector2[4]
{
new Vector2(0, 0),
new Vector2(1, 0),
new Vector2(0, 1),
new Vector2(1, 1)
};
mesh.uv = uv;
Skrip berikut menggabungkan semuanya di atas untuk membuat quad di Adegan Anda. Untuk menggunakannya: Buat skrip C# baru (menu: Aset > Buat > C# Script) dan nama QuadCreator. Buka skrip QuadCreator, salin kode contoh ke dalamnya, dan simpan skrip. Kembali di Editor, buat GameObject baru di Adegan Anda (menu: GameObject > Buat Empty). Dalam Inspektur, pilih Tambahkan Komponen > Script > Login Posisikan GameObjectObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary di mana pun Anda ingin di tempat kejadian. Masukkan Mode Bermain. Jika Anda tidak dapat melihat quad di Adegan atau Tampilan Game, pastikan Anda melihatnya dari sisi yang benar; Unity tidak membuat wajah belakang Mesh ini.
using UnityEngine;
public class QuadCreator : MonoBehaviour
{
public float width = 1;
public float height = 1;
public void Start()
{
MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();
meshRenderer.sharedMaterial = new Material(Shader.Find("Standard"));
MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>();
Mesh mesh = new Mesh();
Vector3[] vertices = new Vector3[4]
{
new Vector3(0, 0, 0),
new Vector3(width, 0, 0),
new Vector3(0, height, 0),
new Vector3(width, height, 0)
};
mesh.vertices = vertices;
int[] tris = new int[6]
{
// lower left triangle
0, 2, 1,
// upper right triangle
2, 3, 1
};
mesh.triangles = tris;
Vector3[] normals = new Vector3[4]
{
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward
};
mesh.normals = normals;
Vector2[] uv = new Vector2[4]
{
new Vector2(0, 0),
new Vector2(1, 0),
new Vector2(0, 1),
new Vector2(1, 1)
};
mesh.uv = uv;
meshFilter.mesh = mesh;
}
}
Catatan: Kode contoh ini dalam fungsi Start, yang berarti bahwa itu mengeksekusi sekali ketika Anda memasukkan Mode Play, dan Mesh tidak berubah sepanjang aplikasi. Namun, Anda dapat menambahkan kode dalam fungsi Update untuk membuat perubahan Mesh setiap bingkai. Ketahuilah bahwa ini sangat meningkatkan intensitas sumber daya dari generasi Mesh.