c# - 如何在 Unity 中使用 UI.Text 作为预制件?

标签 c# unity3d scripting unity3d-gui

我试过用这个

Instantiate(entry, new Vector3(x, y, 0), Quaternion.identity);

它成功创建了对象,如我的层次结构所示。但是我看不到屏幕上的文字,即使有分配给它的文字。我只能在屏幕上看到一个空的游戏对象。

这些屏幕截图显示了正在运行的游戏,所选对象是通过脚本实例化的对象。

enter image description here

enter image description here

当我拖动预制件时,它不会在场景中显示任何内容。这发生在我所有的预制件上。以下是它的组成部分:

enter image description here

最佳答案

在新的 Unity3D UI 系统中,每个 UI(TextButtonPanel code> 等)将在屏幕上渲染的组件必须有一个父 Canvas 组件。 你确实在你的项目中使用了这种方法,你有 ToolbarList 等,它们的父级名为 Canvas,我想它有 Canvas 附加组件。

您需要做的是将实例化的 gameObject 移动到包含 Canvas 组件的其他 gameObject 的子级。 由于可以有多个 Canvas 类型的组件,我建议增加为 Script 中的实例化对象分配 root 的可能性。

脚本:

//Drag and drop this from inspector; make sure that dragged gameObject
//has Canvas component in it or above it (in parent)
public Transform EntriesRoot;

void Start()
{
    var entry = Instantiate(entry, new Vector3(x, y, 0), Quaternion.identity);
    //Put parent to our EntriesRoot
    //EntriesRoot will be our new parent for entry in hierarchy
    entry.transform.SetParent(EntriesRoot)
}

关于c# - 如何在 Unity 中使用 UI.Text 作为预制件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562690/

相关文章:

java - 在Jmeter中使用Java参数化XML标签

javascript - 单个脚本可以用于两次或更多次 anchor 按钮点击吗?

c# - 如何对列表进行分组,以便使用 Linq 检索日期时间字段上一天的单个记录?

c# - Unity 中的 DontDestroyOnLoad() 和稍后场景中的引用(使用 C#)

unity3d - 来自 VideoPlayer 的 VideoClp 的音频源的音量控制

c# - 重复序列化和反序列化创建重复项

c - 编写 GDB 脚本来收集数据

c# - 有没有办法在 Windows 语音合成器说话时显示音频波?

c# - 如何 : Parallel. Foreach 执行多个进程,每个进程运行一个新进程(但一次一个)?

可以包含其他控件的 C# 用户控件(使用时)