Unity_新手必懂知識點(diǎn)|你可能并不完全認(rèn)識的transform.position

基礎(chǔ)知識:

Transform作為Unity中游戲?qū)ο笞顬橹匾慕M件悼院,“位置”作為Transfrom組件的一個屬性战虏,具有同等重要的地位。

Transform組件下有兩個“位置”屬性:

position:指的是游戲?qū)ο笾行狞c(diǎn)在世界空間的位置(世界空間就是Unity最大的空間,可以創(chuàng)建一個無任何父節(jié)點(diǎn)的空對象井佑,其position,rotation分量都是0草巡,scale分量都是1守呜,那么可以認(rèn)為世界空間就是以此物體中心點(diǎn)為原點(diǎn),物體的朝向為z軸山憨,右方向為x軸弛饭,上方向為y軸,即物體的transform.forward為z軸萍歉,transform.right為x軸侣颂,transform.up為y軸,如圖中的SuperParent物體)。


SuperParent1.jpg

localPosition:指的是游戲?qū)ο笾行狞c(diǎn)在父類空間的位置(屬性面板上顯示的值就是這個值)枪孩。

父類空間的構(gòu)建與其position,rotation,scale有關(guān)憔晒,但此處只討論position,因此可以認(rèn)為父類物體不旋轉(zhuǎn)蔑舞,沒有縮放的情況拒担。那么此時父類空間是以父類中心點(diǎn)為原點(diǎn),x,y,z與世界空間x,y,z軸同方向攻询。

如果游戲?qū)ο鬀]有父類从撼,那么此物體的父類空間就是世界空間,此時position和localPosition值是相同的钧栖〉土悖可以想象為,其父類就是文章上面的SuperParent物體拯杠。

UGUI下所有的UI空間都具有RectTransform組件掏婶,此組件繼承自Transform組件,其內(nèi)部的position和localPosition屬性也繼承自Transform潭陪。他多出來的位置屬性是:

anchoredPosition3D:指的是物體中心點(diǎn)Pivot相對于錨點(diǎn)Anchor的位置(UI屬性面板上顯示的就是這個值雄妥,即PosX最蕾,PosY,PosZ)老厌。

注意:

1瘟则、 這里指的是錨點(diǎn),盡管錨點(diǎn)是附加在父類上的枝秤,但其并不是父類空間醋拧,父類空間指的是以其中心點(diǎn)為原點(diǎn),而此處指的是以錨點(diǎn)為原點(diǎn)宿百。

2趁仙、 RectTransform提供了我們足夠的自由去更改UI的錨點(diǎn)位置和中心點(diǎn)的位置。但是萬變不離其宗:anchoredPosition3D核心概念沒變:中心點(diǎn)相對錨點(diǎn)的位置垦页。

3雀费、 anchoredPosition是anchoredPosition3D屬性去除了z軸之后的值。

擴(kuò)展知識:

盡管上述概念都是大家耳熟能詳?shù)臇|西痊焊,有關(guān)的博文一搜一大堆盏袄,我為什么要再總結(jié)一篇大家都知道的東西呢?因為看似簡單的東西薄啥,可以做出復(fù)雜的系統(tǒng)辕羽,看似復(fù)雜的東西,都是由簡單的東西堆砌出來的垄惧。

重點(diǎn)來了:位置脫離了空間系統(tǒng)毫無意義刁愿。人盡皆知啊。接下來請牢記:位置計算一定要統(tǒng)一空間到逊。

Unity中铣口,游戲物體除了有本地位置,世界空間位置觉壶,還有相對攝像機(jī)的位置(視角空間位置)脑题,屏幕空間位置。其中的轉(zhuǎn)換詳情計算機(jī)圖形學(xué)铜靶,以后我也會總結(jié)有關(guān)圖形學(xué)的知識叔遂。

實(shí)戰(zhàn):

最后用一個例子介紹一下這些位置的用途。

王者榮耀英雄展示界面争剿。一邊為英雄模型已艰,一邊為UI顯示英雄技能等信息,是怎么樣做到的模型跟正好顯示在了規(guī)定的地方秒梅。如圖:


Hero.jpg

兩個接口(Camera組件下):

    public  Vector3 WorldToScreenPoint(Vector3 position);
    //輸入物體世界空間坐標(biāo)得到物體當(dāng)前攝像機(jī)下屏幕空間坐標(biāo)位置
    public Vector3 ScreenToWorldPoint(Vector3 position);
    //輸入物體當(dāng)前攝像機(jī)下屏幕空間坐標(biāo)得到物體世界空間坐標(biāo)位置

注意:

1旗芬、屏幕空間坐標(biāo)依賴于攝像機(jī)。同一物體捆蜀,在不同攝像機(jī)下,其得到的屏幕坐標(biāo)是不同的。不懂的話辆它,可以了解一下圖形學(xué)坐標(biāo)轉(zhuǎn)換誊薄。

2、屏幕空間坐標(biāo)是三維的锰茉。其x,y軸是指顯示在屏幕上的位置呢蔫,z軸具有特殊意義——物體的深度值(與物體距離攝像機(jī)的遠(yuǎn)近有關(guān))。

Camera組件下有很對關(guān)于空間位置的計算飒筑。有興趣的話片吊,可以研究研究。

首先我們需要兩個攝像機(jī):一個UI攝像機(jī)顯示UI协屡,一個模型攝像機(jī)顯示模型俏脊。

具體思路:由UI位置計算其屏幕坐標(biāo)位置,再由屏幕坐標(biāo)位置計算模型世界空間位置肤晓。

場景:一個button爷贫,button下有一個位置標(biāo)識,通過我點(diǎn)擊button补憾,會在該位置標(biāo)識上生成一個小球(這個button同時充當(dāng)了模型展臺漫萄,小球就是宮本。太low了盈匾,哈哈)腾务,game場景如下:


Scene.png

代碼如下:

    public GameObject prefab;           //小球預(yù)制件
    public Camera uiCamera;             //UI攝像機(jī)
    public Camera modelCamera;          //模型攝像機(jī)
    public GameObject posTag;           //需要把模型放置的位置
    public int z = 5;                   //修改屏幕坐標(biāo)的Z軸
    public void ClickButton()
    {
        //初始化物體
        GameObject go = GameObject.Instantiate(prefab);
        Vector3 showPos = posTag.transform.position;
        //獲取展示位置的屏幕空間坐標(biāo)
        Vector3 screenPos = uiCamera.WorldToScreenPoint(showPos);
        //設(shè)置屏幕坐標(biāo)的z軸。z軸代表物體的深度值削饵,與距離攝像機(jī)的遠(yuǎn)近有關(guān)岩瘦。
        //可以調(diào)一下大小感受一下
        screenPos.z = z;
        //獲取模型攝像機(jī)下得到同一屏幕空間坐標(biāo)的世界空間坐標(biāo)
        Vector3 modelPos = modelCamera.ScreenToWorldPoint(screenPos);
        go.transform.position = modelPos;
    }

效果展示:


position.gif

位置不對啊葵孤?其實(shí)是因為所有的坐標(biāo)都是以中心點(diǎn)為基礎(chǔ)的担钮。小球的中心點(diǎn)在圓心,所以小球的中心點(diǎn)是與標(biāo)志物重合的尤仍。在游戲中箫津,美術(shù)提交的模型中心點(diǎn)基本都會設(shè)置在人物腳上,所以就不會出現(xiàn)這個情況宰啦。

小結(jié):

知識點(diǎn):位置概念不能脫離空間苏遥。位置計算一定要統(tǒng)一空間。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赡模,一起剝皮案震驚了整個濱河市田炭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漓柑,老刑警劉巖教硫,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叨吮,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞬矩,警方通過查閱死者的電腦和手機(jī)茶鉴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來景用,“玉大人涵叮,你說我怎么就攤上這事∩〔澹” “怎么了割粮?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長媚污。 經(jīng)常有香客問我舀瓢,道長,這世上最難降的妖魔是什么杠步? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任氢伟,我火速辦了婚禮,結(jié)果婚禮上幽歼,老公的妹妹穿的比我還像新娘朵锣。我一直安慰自己,他們只是感情好甸私,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布诚些。 她就那樣靜靜地躺著,像睡著了一般皇型。 火紅的嫁衣襯著肌膚如雪诬烹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天弃鸦,我揣著相機(jī)與錄音绞吁,去河邊找鬼。 笑死唬格,一個胖子當(dāng)著我的面吹牛家破,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播购岗,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼汰聋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喊积?” 一聲冷哼從身側(cè)響起烹困,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乾吻,沒想到半個月后髓梅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拟蜻,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年女淑,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞭郑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辜御。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸭你,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出擒权,到底是詐尸還是另有隱情袱巨,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布碳抄,位于F島的核電站愉老,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏剖效。R本人自食惡果不足惜嫉入,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望璧尸。 院中可真熱鬧咒林,春花似錦、人聲如沸爷光。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛀序。三九已至欢瞪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徐裸,已是汗流浹背遣鼓。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留重贺,地道東北人骑祟。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像檬姥,于是被迫代替她去往敵國和親曾我。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355