Unity——Transform.SetParent

一、官方文档

Transform.SetParent


二、实验

代码示例

	void Update()
	    {
	        if (Input.GetKeyDown(KeyCode.Q)) {
	            GameObject sphere= GameObject.Instantiate(Resources.Load<GameObject>("Sphere"));
	            sphere.transform.SetParent(cube,true);
	        }
	
	        if (Input.GetKeyDown(KeyCode.W)) {
	            GameObject sphere = GameObject.Instantiate(Resources.Load<GameObject>("Sphere"));
	            sphere.transform.SetParent(cube, false);
	        }
	    }

1、初始游戏物体的Transform

Sphere预制体,在世界坐标下创建的prefab
在这里插入图片描述
原点的Cube
在这里插入图片描述

2、操作

按下W
在这里插入图片描述
之后按下Q
在这里插入图片描述
将子物体从父物体内拖出,即取消父子关系,Transform显示的都是世界坐标

worldPositionStays为true
在这里插入图片描述
worldPositionStays为false
在这里插入图片描述


三、总结

参数worldPositionStays,翻译为保持世界坐标,即成为子物体后是否维持原世界坐标下的transform;按下Q,worldPositionStays标志位为true,相当于直接在editor模式下将sphere预制体直接拖入世界坐标;按下W,worldPositionStays为false,相当于在editor模式下将sphere拖入原点的Cube内。

在动态生成一些物体的时候,注意其制作预制体的时候所在的空间,有时物体在制作预制体时就是在父物体内,所以坐标为局部坐标,如UI中的子项,创建时应将标志位设置为false。


四、更多

Unity中transform.SetParent()和transform.parent的区别

Unity 3D之UI设置父子关系setParent坑


版权声明:本文为ZuoXuanZuo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。