UNITY 复制对象后局部坐标和世界坐标的变化问题

UNITY 复制对象后局部坐标和世界坐标的变化问题



    void Start () {

        var pgo = transform.Find ("Button").gameObject;

     obtn = Instantiate (pgo);

        //obtn = Instantiate (pgo, pgo.transform.Parent);
    
        var pos = obtn.transform.position;

        //obtn.transform.localPosition = Vector3.zero;

        Debug.LogFormat ("1:{0},{1},{2}", pos.x, pos.y, pos.z);

        pos = obtn.transform.localPosition;

        //obtn.transform.localPosition = Vector3.zero;

        Debug.LogFormat ("2:{0},{1},{2}", pos.x, pos.y, pos.z);

        obtn.transform.SetParent (pgo.transform.parent);

        obtn.name = "cpobj";

    }


1,复制对象是将原来对象原封不会的拷贝一份。

2,复制后得到的对象没有父结点,因此其世界坐标和局部坐标一样,局部坐标又和原对象局部坐标一样。

因此,复制得到的对象的局部坐标成为了世界坐标。

3,setparent不会改变物体的世界坐标,这符合直观感受。

那么,为了保证不改变物体的世界坐标,在设置了父结点后,物体的局部坐标就会发生改变。

简单来说:结点P下有一个子结点A,复制A得到B,设置B的父结点也为P,这时A与B并不会在相同的位置。

B的世界坐标为A的局部坐标的数值。这就是以上三条规则导致的。

或者:使用obtn = Instantiate (pgo, pgo.transform.Parent);在复制时直接指定父结点,这样复制得到的对象就和原对象在同一位置了。

posted on 2017-04-09 22:33 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值