【问题标题】:Unity 2D - Dynamically instantiate new prefab inside NGUI's "UI Root"(as Parent)Unity 2D - 在 NGUI 的“UI Root”中动态实例化新的预制件(作为父级)
【发布时间】:2014-08-21 05:56:51
【问题描述】:

我是统一的新手。当我从脚本内部实例化一个新的预制游戏对象时,如下所示:

GameObject newArrow = (GameObject)Instantiate(arrowPrefab);  
newArrow.transform.position = arrowSpawnTransform.position;

但这是在根层次结构中创建对象(而不是在 NGUI 的“UI Root”内)。当我在UI-Root(NGUI)之外添加任何对象时,它会将其添加到远离相机的某个位置,而且尺寸也很大。有人可以帮助我如何在“UI Root”下添加新创建的预制件吗?

如果有人也让我了解与原生统一和 NGUI 相关的定位和缩放,那就太好了。我很努力,但不知道在哪里保存什么对象以及以什么大小保存,以便它按预期出现。我将不胜感激可以提供的任何帮助。谢谢!

编辑: 我找到了一种将新预制件放置在“UI Root”中的方法: newArrow.transform.parent = gameObject.transform.parent; 实例化后。

但规模仍然很大。它就像是屏幕尺寸的数倍。请帮我解决一下这个。我该怎么办?

【问题讨论】:

    标签: c# unity3d unityscript ngui


    【解决方案1】:

    在 NGUI 中使用 UI 元素时,不要使用 Instantiate。使用 NGUITools.AddChild(parent, prefab)。

    【讨论】:

      【解决方案2】:

      NGUI 相对于场景中其他对象的比例相当微观。如果您查看 UIRoot 对象,您会注意到它的比例以千分之一米为单位(默认对象分辨率 1 通常代表一米)。这就是为什么当您实例化一个预制件并将其附加到 UIRoot 下的任何对象时,它相对于 UIPanel 的规模显得巨大。您可以手动将对象缩小到适当的大小,或者让 NGUI 为您完成(如 Dover8 所示),通过使用 NGUITools.AddChild(parent, prefab)。事实上,这是正确的做法。不要尝试手动操作。结果将是不可预测的,并可能导致组件的不当行为。这是 Tasharen 论坛关于此主题的链接:http://www.tasharen.com/forum/index.php?topic=779.0

      定位有点复杂。一切都与锚相关。锚点位置是父对象(通常是面板)和目标(通常是某种形式的小部件,例如精灵或标签)之间的关系。它们由相对于面板(或父对象)边缘的四个值控制,即相对于目标边缘的右、左、下和上(因位置而异)。这些中的每一个都由一个整数值(以像素为单位)修改,该整数值修改目标相对于父对象的尺寸。 NGUI 包含许多示例。我建议你看看他们。特别要注意示例 1 - 锚点。我从研究这些示例中学到了很多东西,但它们并没有真正涵盖 NGUI 的全部功能,但它们是一个很好的起点。

      【讨论】:

        猜你喜欢
        • 2014-08-28
        • 1970-01-01
        • 2021-10-27
        • 2016-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多