一、官方文档
二、实验
代码示例
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。
本文详细介绍了Unity3D中Transform.SetParent方法的使用,通过代码示例展示了如何在运行时改变游戏物体的父子关系。实验部分解释了worldPositionStays参数的作用,当其为true时,子物体保持原世界坐标;为false时,转换为局部坐标。总结指出在动态生成物体时,应根据预制体的初始位置选择合适的worldPositionStays值,以避免坐标混乱。同时,文章探讨了transform.SetParent()与transform.parent的区别,并提醒开发者注意UI设置父子关系时的陷阱。
7366

被折叠的 条评论
为什么被折叠?



