您的位置:首页 > 移动开发 > Objective-C

为什么 Instantiate 克隆出来的GameObject的Scale 在 SetParent 总是放大 64倍?

2016-02-27 13:25 274 查看
经常会犯一个错误:
GameObject childNodeClone = Instantiate(childNode) as GameObject;
childNodeClone.transform.localScale = childNode.transform.localScale;

childNodeClone.transform.SetParent(childNode.transform.parent);

在设置了 localScale 之后,又去 SetParent 。然后就出现了 克隆出来的 GameObject 变得无比巨大!

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn


虽然马上会及时修改,调整 为 先 SetParent 然后再设置 localScale 。

但是经常性的出现这个问题会很难堪,那么到底是为什么会出现这个情况?

一句一句代码来看:

GameObject childNodeClone = Instantiate(childNode) as GameObject;

这里克隆了一个物体,运行这一句发现,克隆的物体出现了在 Hieraychy 的最外层,而且查看 Transform 信息发现,和 源 GameObject上的数据一致。
所以在克隆的时候,Unity 复制了 Transform 的信息,然后把 克隆出来的物体,扔到了世界坐标系中……







克隆出来的GameObject  和 Camera 的 Transform Position 是相同的,两者位于同一个点上,所以看不到克隆出来的 GameObject 。

然后

childNodeClone.transform.SetParent(childNode.transform.parent);

Unity在 SetParent 的时候,就会把克隆出来的 GameObject 从世界坐标系中,平移到 父节点的 局部坐标系中。
注意:这里只有位移,没有缩放!!

因为是从世界坐标系移动到 父节点的局部坐标系中,两个坐标系的尺量不一致。所以要进行转换。

查看 父节点 Canvas_Root 看到,父节点进行了缩放!



那么世界坐标系中的 1 ,在 父节点的局部坐标系中,就相当于 1/0.1562 ,约等于 64 倍。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
所以克隆出来的物体的 Scale 是 64 !

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: