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

版权声明:欢迎转载,欢迎批评,共同学习,共同进步。如果有不正确的地方,希望帮我纠正! https://blog.csdn.net/qq_33461689/article/details/79277326

 发现这个问题,纯属巧合,之前的项目中老是有一个问题,就是动态加载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的方法改了一下。

	[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的第二个参数
            }
        }
	}


猜你喜欢

转载自blog.csdn.net/qq_33461689/article/details/79277326