Hiển thị văn bản trên mặt phẳng 3D


7

Tôi đang bận rộn với một dự án thú cưng nơi tôi đang cố gắng tạo ra một Trò chơi Thẻ Sưu tập ở chế độ 3D.

Các thẻ này có Hp và Damage, v.v. nhưng tôi không thể tìm ra cách hiển thị gọn gàng các giá trị này. Tôi đã cố gắng sử dụng TextMesh, nhưng tất cả các văn bản chỉ hòa trộn với nhau nếu các thẻ xảy ra trùng lặp (ví dụ: khi các thẻ nằm trong tay).

Hiện tại, tôi đang sử dụng một mặt phẳng cho mỗi giá trị, sau đó thay đổi Vật liệu được sử dụng trên mặt phẳng đó, để khớp với giá trị (ví dụ: Vật liệu '3' nếu Thiệt hại là 3). Nó hoạt động, nhưng tôi không thể giúp đỡ để nghĩ rằng có phải là một cách tốt hơn.

Có cách nào để hiển thị động các giá trị trên mặt phẳng sao cho có vẻ như giá trị là một phần của thẻ, mà không thay đổi vật liệu mỗi khi có thay đổi? Hoặc đề nghị bất cứ điều gì khác sẽ phù hợp với nhu cầu của tôi?

Nếu tôi đang thực hiện một cách tiếp cận khủng khiếp, bạn có thể đẩy tôi theo hướng tốt hơn.

Cảm ơn trước


Bạn có thể thêm một hình ảnh ví dụ về cách văn bản đang được hiển thị liên quan đến thẻ không?
XNargaHuntress

Bạn có thực sự cần những thứ phải năng động? Theo như tôi biết, thông thường trong các trò chơi như vậy, thẻ không thể thay đổi giá trị của chúng trong trò chơi.
Maxim Kamalov

Không, việc các thẻ thay đổi giá trị trong quá trình chơi là điều khá thường xuyên. HP rõ ràng sẽ bị giảm khi họ nhận sát thương, cộng với điểm tấn công của họ tăng và giảm từ các thẻ khác tăng sức mạnh cho nó / làm suy yếu nó, v.v.
jhocking

Câu trả lời:


0

Tôi không biết nếu điều này sẽ ít tốn kém hơn, nhưng bằng cách sử dụng Profiler bạn có thể tự mình tìm hiểu. Bạn có thể đính kèm một UICanvas trên đối tượng thẻ của bạn. Trên Canvas này, đặt Thành phần văn bản vào đúng vị trí.


0

TextMesh là cách để đi với những gì bạn đang tìm kiếm, vì bạn đang hiển thị các thẻ này trong một mặt phẳng. Thành phần này sẽ không phải là một lựa chọn hợp lệ với các bề mặt không phẳng.

Thêm một trò chơi trống vào thẻ của bạn khi còn nhỏ và sau đó thêm TextMesh làm thành phần -> Thêm Thành phần / Lưới / TextMesh. Đặt văn bản bạn cần và sau đó, bạn phải điều chỉnh văn bản đến nơi bạn muốn, thực hiện việc di chuyển vị trí của trò chơi. Lưu ý rằng nếu các đối tượng cha không có Tỷ lệ 1-1-1, văn bản sẽ bị biến dạng, nếu đó là trường hợp bạn cần thay đổi tổ chức đối tượng của mình và di chuyển văn bản theo kịch bản thay vì sử dụng nó khi còn nhỏ.

Nếu bạn xoay thẻ, bạn sẽ nhận thấy rằng văn bản chồng lên trên mỗi lưới trong cảnh, thậm chí là thẻ của riêng bạn. Để tránh điều này, bạn cần sử dụng một shader tùy chỉnh cho "TextMesh" sẽ khiến nó hiển thị giống như bất kỳ đối tượng nào khác trong cảnh.

Đây là shader:

Shader "Text/TextNonOverlap Shader" { 
    Properties {
        _MainTex ("Font Texture", 2D) = "white" {}
        _Color ("Text Color", Color) = (1,1,1,1)
    }

    SubShader {
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
        Lighting Off Cull Off ZWrite Off Fog { Mode Off }
        Blend SrcAlpha OneMinusSrcAlpha
        Pass {
            Color [_Color]
            SetTexture [_MainTex] {
                combine primary, texture * primary
            }
        }
    }
}

Để sử dụng shader, bạn cần một phông chữ trong dự án của bạn, bất cứ ai cũng sẽ làm việc. Tạo một vật liệu và đặt shader này lên nó, sau đó chọn phông chữ bạn đã chọn và gán nó là "Font Texture" trong cùng một trường "Texture Texture" của vật liệu, điều này rất quan trọng.

Sau đó, trong trò chơi với TextMesh, thay đổi phông chữ thành phông chữ bạn đã chọn, giống như phông chữ bạn đặt Phông chữ trên vật liệu hoặc nó sẽ không hoạt động. Chọn trong thành phần "Vật liệu -> Phần tử 0" và đặt vật liệu bạn vừa tạo trên đó, bây giờ bạn có một văn bản không trùng nhau, để thay đổi màu sắc của vật liệu.

Nó không phức tạp nhưng dễ dàng để tạo lưới, vì vậy hãy cẩn thận.

PS: Vâng, văn bản có thể đi ra ngoài thẻ nhưng, như bạn có thể thấy, ngay cả Hearthstone cũng sử dụng một cách tiếp cận tương tự

nhập mô tả hình ảnh ở đây


Btw, chỉ cần nhớ, nếu bạn sử dụng phương pháp này, bạn cần lưu ý rằng bạn sẽ cần điều chỉnh các shader của mình để tránh văn bản chồng chéo lên trên mọi thứ khác, thông tin thêm ở đây: wiki.unity3d.com/index.php?title=3DText
Leucaruth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.