Unity3D研究院transform.parent = parent坐标就乱了
来源:互联网 发布:淘宝主店铺子店铺 编辑:程序博客网 时间:2024/05/08 07:27
昨天有朋友问我了一个问题,它将Hierarchy视图里的某个子节点下的GameObject拷贝到另外一个对象的子节点下面,他使用的方法就是 transform.parent = parent 但是拷贝过去以后坐标就全乱了。如下图所示我们搭建一个测试环境,我的目标是把a2拷贝在b2下面。
如下图所示,a0 a1 和 b0 b1作为父节点, 为了验证测试的可行性,我把它们的坐标 旋转 缩放 完全搞乱。
一 . 不改变拷贝坐标的情况下
1.直接copy 这个是最简单的
2.先实例化一份新的,然后在copy ,重点说说这个,因为他出问题的也是在这里。
1. GameObject go = Instantiate(copy) as GameObject;
实例化一份新的GameObject 在根目录下,此时 坐标、旋转、缩放系数取的是copy的相对坐标。那么这一步就坐标就已经乱了。。
2.go.transform.parent = parent;
仅仅是move的操作,换算到相对parent的坐标 旋转 缩放 。
3.go.transform.position = copy.transform.position;
go.transform.rotation = copy.transform.rotation;
Unity的Transform组件中看到的位置、旋转、缩放,都是相对父节点的,它并不是相对世界的。所以此时需要把 “被拷贝者” 的世界坐标系数拷贝给 “拷贝者”
4. Vector3 pLoss = copy.transform.lossyScale;
Vector3 panelLoss = parent.lossyScale;
go.transform.localScale = new Vector3((pLoss.x/panelLoss.x),(pLoss.y/panelLoss.y),
因为Unity不能直接设置世界缩放系数,只能设置相对缩放系数。所以这里我利用lossyScale来换算了一下相对坐标,lossyScale是一个只读的属性,就是只读某个对象的世界缩放系数。
二 . 改变拷贝坐标的情况下
这种情况一般都是从Resources.Load后实例化的。实例化完毕后把Prefab里面预先设置的拷贝给Instiate()后的对象。
其实大多数情况下 都用 localPostion:000 localRotation:000 localScale:111。
相对坐标、旋转 localPosition localRotation (可以在Transform组件中看到)
世界坐标、旋转 position rotation(不能在编辑器中看到, 可以通过代码输出出来)
只有localScale比较特殊,它的世界缩放系数lossyScale是只读的,但是不能写。
复制过去的两个完全重合。。
- 本文固定链接: http://www.xuanyusong.com/archives/3151
- 转载请注明: 雨松MOMO 2014年08月22日 于 雨松MOMO程序研究院 发表
- Unity3D研究院transform.parent = parent坐标就乱了
- Unity3D研究院transform.parent = parent坐标就乱了
- unity transform.parent和SetParent效率差了几万倍?
- parent
- parent
- parent.frame.cols="0,*";
- qt QWidget *parent = 0
- Unity中关于transform.root和transform.parent的区别和联系?
- iframe parent
- parent参数
- content,parent,......
- jquery parent()
- class parent{
- Window.parent
- $parent属性
- maven parent
- parent > child
- parent 类
- eclipse CDT写c++使用文件作为输入源(输入重定向)
- eclipse使用jpa实现数据库反向生成Hibernate实体
- qtobject简介
- Python 标准库 BaseHTTPServer 中文翻译
- hdu 1070 Milk
- Unity3D研究院transform.parent = parent坐标就乱了
- android 双服务常驻后台:防止意见清理
- Palindrome Number
- 关于进程中的栈
- Builder 建造者 (创建型)
- 16脚的12864液晶的使用方法和体验
- 使用Latex编译简历
- [leetcode] 173.Binary Search Tree Iterator
- 【Java】只允许使用加号,实现整数的减法,乘法,除法