如果父级为x100,则实例化的预制件很小

时间:2015-02-05 09:52:06

标签: unity3d scale instantiation

这让我非常沮丧!这是正在发生的事情,我只是不明白

在编辑器中,我的父对象的比例为100,100,100

预制件的变换如下:

Position: 0, -1.939, 0 Rotation: 0, 0, 0 Scale: 0.3946165, 0.3946165, 0.3946165

如果我将它拖到父母身上,它看起来很完美,完全符合我的要求。

我将预制件导出为AssetBundle并在运行时导入,如下所示:

currentPerson = Instantiate(bundle.mainAsset,new Vector3(0, -1.939f, 0), Quaternion.identity) as GameObject;

currentPerson.transform.localScale = new Vector3(300, 300, 300);

currentPerson.transform.parent = GameObject.Find("PeopleImageTarget").transform;

Debug.Log(currentPerson.transform.position.x + ", " + currentPerson.transform.position.y + ", " + currentPerson.transform.position.z);

Debug.Log(currentPerson.transform.rotation.x + ", " + currentPerson.transform.rotation.y + ", " + currentPerson.transform.rotation.z);

Debug.Log (currentPerson.transform.localScale.x + ", " + currentPerson.transform.localScale.y + ", " + currentPerson.transform.localScale.z);

现在出现了子对象,但它仍然很小,我将比例设置为300以尝试增加其大小,它在调试日志中报告3

这是作为导出到IOS应用程序运行可能使用来自Vuforia的增强现实工具,因此父级别为100

如果我将孩子包含在应用程序中并且只是设置活动开启或关闭,那么孩子看起来很完美,它只是在实例化时才会变色,这是我在运行时导入模型所需的功能....

3 个答案:

答案 0 :(得分:1)

当你重新渲染一个物体时,它的世界尺度保持不变。这意味着其本地规模发生变化。因此,如果您知道在重新定位之后您希望其局部比例是什么,则应在重新定位后设置其局部比例。

答案 1 :(得分:0)

您应首先设置parrent,然后设置比例。

切换这一行:

currentPerson.transform.localScale = new Vector3(300, 300, 300);
currentPerson.transform.parent = GameObject.Find("PeopleImageTarget").transform;

尝试:

currentPerson.transform.parent = GameObject.Find("PeopleImageTarget").transform;
currentPerson.transform.localScale = new Vector3(300, 300, 300);

答案 2 :(得分:0)

要在更改父母时保留比例(或不保留),请使用Transform.SetParent并根据需要设置worldPositionStays参数:

Transform targetTransform = GameObject.Find("PeopleImageTarget").transform;
currentPerson.transform.SetParent(targetTransform, true);

请注意,这需要Unity 4.6或更高。