Unity中Transform.SetParent第二个参数的使用

发现这个问题,纯属巧合,之前的项目中老是有一个问题,就是动态加载UI预制后,还要手动修改UI的Transform,一直有一个疑问。后来无意中发现项目中为了取消勾选Raycast Target使用了这个方法(Unity3D研究院之UGUI一个优化效率小技巧),我也发现挺好的,并没有发现他们之间有什么联系。

最近又想理清楚Canvas的Render Mode三个模式,突然发现Screen Space - Overlay模式下创建Image没什么问题,但是Screen Space - Camera模式下创建的Image的Rect Transform 会发生变化。研究了一下,发现就是上述那个方法造成的,本来在那个方法后边掉用Inspector的Reset方法把Rect Transform 手动更改一下,无耐技术有限,不知道怎么调用。后来又发现,只有SetParent可能会改变Rect Transform 。百度了一下,找到一篇文章(Unity3D之UI设置父子关系SetParent坑),别人已经写的很清楚了,我就复制一下官方文档第二个参数的解释吧!

worldPositionStays If true, the parent-relative position, scale and rotation are modified such that the object keeps the same world space position, rotation and scale as before.

所以把那个取消勾选Raycast Target的方法改了一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
[MenuItem("GameObject/UI/Image")]
static void CreatImage()
{
if (Selection.activeTransform)
{
if (Selection.activeTransform.GetComponentInParent<Canvas>())
{
GameObject go = new GameObject("image", typeof(Image));
go.GetComponent<Image>().raycastTarget = false;
go.transform.SetParent(Selection.activeTransform,false);//增加了SetParent的第二个参数
}
}
}
-------------    本文结束  感谢您的阅读    -------------
打赏两块钱买糖吃!
0%