Vấn đề
Trong thể loại game chơi theo lượt như game Heroes of Might and Magic, mỗi nhân vật phải di chuyển trong một lưới được định sẵn trên địa hình. Chúng ta cần vẽ lưới này trên địa hình để giúp người chơi dễ dàng xác định vị trí cần di chuyển đến. Trong game 2D, lưới này rất dễ hiển thị trên địa hình do địa hình 2D là địa hình phẳng. Tuy nhiên, trong game 3D, địa hình không phải lúc nào cũng bằng phẳng, vấn đề là làm sao chúng ta có thể vẽ những đường thẳng được bám theo độ cao của địa hình.
Hình 3
Giải pháp
Để giải quyết vấn đề này, sẽ vẽ một hình lưới, sau đó t theo ta sẽ dùng Projector chi
Hình
Ta sử dụng lớp Texture2D
trên texture tạo thành các đư lên texture.
3.14 Lưới vẽ bám theo độ cao của địa hình
này, chúng em sử dụng Projector. Tư tưởng ở i, sau đó tạo chất liệu từ hình lưới này và shader thích dùng Projector chiếu song song chất liệu này xuống bề mặt đ
Hình 3.15 Qui trình vẽ lưới trên địa hình
Texture2D để tạo texture. Dùng hàm SetPixel() để o thành các đường thẳng rồi gọi Apply() đế áp dụng thay đ
đây là chúng ta i này và shader thích hợp. Tiếp
t địa hình.
ể vẽ từng điểm ng thay đổi vừa vẽ
for (int i = 0; i < TextureWidth; i++) texture.SetPixel(i, 0, Color.white);
// vẽ tiếp các đường thẳng tiếp theo ...
// áp dụng tác dụng của SetPixel lên texture
texture.Apply();
Tiếp theo ta dùng shader “Mobile/Particles/Additive Culled” trong gói “Standard Assets (Mobile)” đi kèm theo Unity để tạo chất liệu cho Projector từ Texture vừa vẽ. Shader là một đoạn script nhỏ thiết lập cách thức render của chất liệu trên bề mặt. Đoạn code sau dùng để tạo material từ shader và gán texture cho chất liệu:
Shader shader = Shader.Find("Mobile/Particles/Additive Culled"); Material material = new Material(shader);
material.mainTexture = texture;
Sau khi có chất liệu, ta tạo Projector và áp chất liệu này vào. GameObject obj = new GameObject("Projector");
Projector projector = obj.AddComponent<Projector>(); projector.material = material;
Cuối cùng, ta di chuyển Projector đến vị trí của địa hình và chiếu song song xuống địa hình.
// di chuyển
projector.transform.position = new Vector3(20, 20, 20);
// xoay
projector.transform.rotation.eulerAngles = new Vector3(-90, 0, 0);
// chiếu song song
projector.isOrthoGraphic = true;
Do texture được vẽ lúc runtime nên chúng ta có thể mở rộng chức năng chỉ vẽ một số ô nào đó trên địa hình.
Hình
Kết luận
Trong quá trình tìm hiểu đ dẫn cụ thể nào. Trên đây là m nêu.