發現了unity的transform元件有意思的地方,所以這裡準備記錄一下。先給各位展示一下有問題的**,具體**如下:
transform treantransform = new gameobject("test").transform;
treantransform.gameobject.addcomponent();
treantransform.gameobject.addcomponent();
treantransform.gameobject.addcomponent();
可能看了很長時間也沒有發現問題在那裡,其實一開始也不知道...,但是打斷點出來的結果是這樣的,執行到這行**才出現的問題gameobject.addcomponent(),導致引用直接變成null了,這是新工程什麼東西都沒有,就只有這個指令碼,所以其他因素就不用考慮...
呼叫addcomponent其他元件沒有任何問題,但是新增canvas元件是有問題的,準備修改**再嘗試一下看看,具體**如下:
gameobject tmpgameobject = new gameobject("test");
tmpgameobject.addcomponent();
tmpgameobject.addcomponent();
tmpgameobject.addcomponent();
經過嘗試可以正常的執行,準備嘗試一下其他情況,**如下:
void start()
發現也是沒有問題,這樣為什麼會丟引用呢?突然想到一件事件,就是新增了canvas以後,unity將原來transform元件變幻成了recttransform元件,這樣才導致引用丟失的,接下來就要拋磚引玉了。
原來transform它是乙個屬性,也就是說它是及時獲取到元件返回的,並非是乙個引用,所以優化遊戲的時候就可以這樣去做,具體**如下:
private new transform transform;
private new gameobject gameobject;
void awake()
但是要小心一點,這樣做可能會導致出現意外情況,從而丟失引用,比如什麼情況呢???新增canvas元件時。
第二點就是recttransform和transform元件有什麼區別呢?
3d面板上顯示的是位置座標元件transform,2d面板上顯示的是位置座標元件recttransform
recttransform是transform的子類,可以這樣強制轉換(recttransform recttrans = (recttransform)this.transform;)但是反過來就不行啦,recttransform是可以看到源**的,具體**如下:
transform函式的應用
transform函式的作用是 將某操作應用於指定範圍的每個元素。transform函式有兩個過載版本 transform first,last,result,op first是容器的首迭代器,last為容器的末迭代器,result為存放結果的容器,op為要進行操作的一元函式物件或sturct cl...
transform 的副作用
transform 想必大家都很熟悉,可以通過其轉換 translate 旋轉 rotate 縮放 scale 傾斜 skew 等屬性來對元素進行變換,不過這篇文章想 的不是這些內容,而是 transform 對元素布局 頁面渲染方面的影響。例如,你知道它會影響 fixed 元素的位置嗎?你有想過它...
transform屬性總結
用於向元素應用2d或3d轉換 我們可以用他對元素進行旋轉,縮放,移動,傾斜 transform的值 2d轉換translate x,y 3d轉換translate x,y,z translatex x 轉換x軸的值 translatey y 轉換y軸的值 3d轉換translatez z scale...