zoukankan      html  css  js  c++  java
  • 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);在复制时直接指定父结点,这样复制得到的对象就和原对象在同一位置了。

  • 相关阅读:
    我们在期待什么?
    ASP.NET的本质–IIS以及进程模式
    javascript开发中要注意的事情
    通过配置web.config发电子邮件详解
    VS2005 中文版下载
    td自动换行CSS
    巧妙利用图片IMG的onerror事件
    网页 页面不缓存
    JS检测对像(支持多版本)
    利用js预缓存图片
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/6686829.html
Copyright © 2011-2022 走看看