【问题标题】:How to use UI.Text as a prefab in Unity?如何在 Unity 中使用 UI.Text 作为预制件?
【发布时间】:2016-04-06 09:15:27
【问题描述】:

我试过用这个

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

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

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

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

【问题讨论】:

  • 请展示预制件的结构(在场景中拖动它时的外观)以及您需要的文本的位置。
  • @mwilczynski 完成。谢谢你的建议!

标签: c# unity3d scripting unity3d-gui


【解决方案1】:

在新的Unity3D UI 系统中,每个将在屏幕上渲染的UITextButtonPanel 等)组件都必须有一个父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)
}

【讨论】:

  • 最新版本的 Unity 5.3 不支持 SetParent。是否有另一种方法可以将此预制件实例化为 Canvas 对象的子对象?
  • 我使用的是 Unity 5.3.1,它绝对受支持。您确实应该在转换组件上使用 SetParent,我的错误(已经编辑)。现在不推荐使用的方式是transform.parent = otherTransform 而不是transform.SetParent(otherTransform)。确切的错误是什么?
  • 将父变换设置为Instantiate 的一部分也很方便。 GameObject text = Instantiate(entry, new Vector3(x, y, 0), Quaternion.identity, EntriesRoot);
【解决方案2】:

它们需要是显示它们的 Canvas 的子级。

 // find canvas
GameObject canvas = GameObject.Find("Canvas");
// clone your prefab
GameObject text = Instantiate(entry, new Vector3(x, y, 0), Quaternion.identity);
// set canvas as parent to the text
text.transform.SetParent(canvas.transform);

【讨论】:

    【解决方案3】:

    对于每个实例,您可能必须手动启用 guiTexture。

    【讨论】:

    • 我该怎么做? Instantiate 方法返回一个 UnityEngine.Object。该类没有“启用”字段。
    • 我无法将对象作为文本进行操作,因为它的类型不是 GUIText,而是对象。投射也不起作用
    • 如果启用了预制件,克隆的副本也将被启用。
    猜你喜欢
    • 2018-05-21
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2016-10-04
    相关资源
    最近更新 更多