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號 閱讀(...) 評論(...) 編輯 收藏
總結
以上是生活随笔為你收集整理的UNITY 复制对象后局部坐标和世界坐标的变化问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNITY Destroy()和Dest
- 下一篇: 问题记录:如何比较两个字符串的相似度