1

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

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; 实例化后。

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

4

2 回答 2

3

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

于 2014-08-21T08:41:54.913 回答
0

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

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

于 2017-06-01T01:24:35.070 回答