Unity——Transform.SetParent

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

一、官方文档

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坑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值