Vẽ lưới trên địa hình không bằng phẳng

Một phần của tài liệu Đồ án tốt nghiệp Sử dụng Unity thiết kế game 3D (Trang 56)

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.

Một phần của tài liệu Đồ án tốt nghiệp Sử dụng Unity thiết kế game 3D (Trang 56)