Làm cách nào để tự động tạo Đối tượng văn bản UI trong Unity 5?


8

Tôi đã tìm kiếm thứ gì đó đơn giản, nhưng tài liệu của Unity 5 về điều đó khá lỗi thời. Những gì tôi muốn đạt được là có thể tạo UI Text hoàn toàn từ tập lệnh, tức là hoàn toàn linh hoạt - trong ứng dụng trường hợp thực tế của tôi, tôi sẽ thực hiện điều đó trong một vòng lặp không có số lần lặp được xác định trước.

Một tìm kiếm sử dụng Google sẽ tìm thấy khá nhiều ví dụ về cách thực hiện điều đó, nhưng tất cả những gì tôi thấy đều sử dụng các phương pháp đã bị phản đối (từ trước phiên bản Unity 5) hoặc đơn giản là sai (không có gì ngạc nhiên ở đây ...). Tôi đã biết rằng trước tiên tôi nên thêm Canvas vào dự án của mình, sau đó tôi nên đưa using UnityEngine.UIvào mã C # của mình và tôi cũng có thể khai báo Văn bản UI như thế nào Text _guitext.

Tuy nhiên, mã dưới đây không hoạt động. Ý tôi là, nó không phải là nó bị hỏng, mà là không có gì được hiển thị:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public class MyClass: MonoBehaviour {

Text _guitext;

// Use this for initialization
void Start () {
    _guitext.text = "testing";
}

// Update is called once per frame
void Update () {
}
}

Tệ hơn thế, dường như trong khi trò chơi được chơi, không có đối tượng mới nào xuất hiện trong danh sách phân cấp đối tượng.

Bạn có thể vui lòng chỉ cho tôi đi đúng hướng ở đây? Cảm ơn.

Câu trả lời:


9

Tôi nghĩ những gì bạn đang tìm kiếm là một cái gì đó như sau:

GameObject CreateText(Transform canvas_transform, float x, float y, string text_to_print, int font_size, Color text_color)
{
    GameObject UItextGO = new GameObject("Text2");
    UItextGO.transform.SetParent(canvas_transform);

    RectTransform trans = UItextGO.AddComponent<RectTransform>();
    trans.anchoredPosition = new Vector2(x, y);

    Text text = UItextGO.AddComponent<Text>();
    text.text = text_to_print;
    text.fontSize = font_size;
    text.color = text_color;

    return UItextGO;
}

Điều đó có nghĩa là, trước tiên bạn tạo một GameObject trống. Sau đó, bạn thêm một thành phần Văn bản, với các tham số cục bộ và / hoặc neo cụ thể, đặt văn bản mong muốn và màu sắc của nó, sau đó bạn biến đối tượng này thành con của đối tượng trò chơi trống.

Bạn muốn lấy thông tin chữ UI từ hoặc bộ biến của đối tượng mà bạn đã tạo ra thông qua kịch bản, bạn có thể sau đó chỉ cần sử dụng yourGOname.GetComponent<Text>().text, yourGOname.GetComponent<Text>().fontvv

Và tất nhiên, để làm việc đó bạn cần phải có using UnityEngine.UI.


Tập lệnh mẫu của bạn đưa ra lỗi cho 'Văn bản' trong văn bản Văn bản, phông chữ và màu. Text' does not contain a definition for văn bản 'và không có phương pháp mở rộng text' of type Văn bản' có thể được tìm thấy (bạn có thiếu một chỉ thị sử dụng hoặc tham chiếu lắp ráp không?)
Ian S

1
@IanSteffy bạn có chắc chắn không phải vì bạn quên theo dõi câu trả lời cuối cùng của tôi không, tức là bao gồm using UnityEngine.UIphần đầu của kịch bản?
MA

3

1 có nghĩa là bạn muốn thay đổi động uitext?

Nếu bạn muốn thay đổi nó, trước tiên bạn phải đính kèm tập lệnh của mình vào gameobject. Sau đó ràng buộc các biến của bạn. Hướng dẫn có thể được tìm thấy ở đây

 transform.gameObject.GetComponent<Text>().text = "123";

2 Nếu bạn muốn tạo uitext mà không có trong Phân cấp trước.

Bạn có thể sử dụng GUI . Nhãn GUI

Đặt các thể hiện đã tạo trong OnGUI. Nó giống như bản cập nhật được gọi là mọi khung hình.

3 Thực tế câu trả lời thứ 2 không tạo ra đối tượng uitext.

Nhưng nó sẽ đạt được kết quả tương tự. Nếu bạn thực sự muốn đối tượng uitext thay vì các hiệu ứng. Bạn có thể làm điều đó trong một prefab và bắt đầu nó trong thời gian chạy. Tuy nhiên, uitext nên là con của vải.


Cảm ơn câu trả lời của bạn. Tuy nhiên, tôi thực sự không muốn thay đổi mà chỉ tạo Văn bản giao diện người dùng (không có prefabs, văn bản GUI thực sự). Tôi đã đọc tài liệu tham khảo chính thức đó, nhưng không có manh mối nào trong đó về cách tạo ra các nội dung UI chỉ sử dụng các tập lệnh (tức là không đưa chúng vào trình chỉnh sửa). Có tài liệu tham khảo này ở đây, nhưng cũng rất mơ hồ: docs.unity3d.com/Manual/HOWTO-UICreateFromScripting.html
Kim Shutter

@KimShutter Liên kết bạn đã đề cập> Để có thể dễ dàng khởi tạo các phần tử UI một cách linh hoạt, bước đầu tiên là tạo một prefab cho loại phần tử UI mà bạn muốn có thể khởi tạo
AlexWei 5/2/2016

3

Nếu bạn đang tìm kiếm một giải pháp nhanh và bẩn để gỡ lỗi, bạn vẫn có thể sử dụng giải pháp Unity 4 cũ. Triển khai OnGUIsự kiện của bất kỳ MonoBehavior nào mà bạn luôn kích hoạt để gọi lớp GUI để thêm một số thành phần UI vào khung kết xuất hiện tại.

void OnGUI() {
    GUI.Label(new Rect(10, 10, 100, 20), "Hello World!");
}

Nếu bạn muốn sử dụng canvas, bạn cần thêm một đoạn script vào canvas:

  1. tạo một GUITextđối tượng trò chơi mới
  2. đặt văn bản trên đối tượng đó
  3. nối nó như một đứa trẻ vào transformkhung vẽ
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.