Unity的Transform小知識點

2021-10-02 11:23:25 字數 1765 閱讀 5330

發現了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...