Unity-使用組件來控制游戲?qū)ο?/h1>
在 Unity Editor 中,使用 Inspector 來更改組件屬性。因此,比如說,更改變換組件的位置值將導(dǎo)致游戲?qū)ο蟮奈恢冒l(fā)生變化。同樣,可以更改渲染器材質(zhì)的顏色或剛體的質(zhì)量,并對(duì)游戲?qū)ο蟮耐庥^或行為產(chǎn)生相應(yīng)影響。在大多數(shù)情況下,腳本還涉及修改組件屬性以操縱游戲?qū)ο?。但是差異在于,腳本可以隨著時(shí)間推移而逐漸改變屬性的值,或者響應(yīng)用戶的輸入。通過在適當(dāng)時(shí)間更改、創(chuàng)建和銷毀對(duì)象,可以實(shí)現(xiàn)任何類型的游戲運(yùn)行過程。
訪問組件
最簡(jiǎn)單和最常見的情況是腳本需要訪問附加到同一游戲?qū)ο蟮钠渌M件。正如“簡(jiǎn)介”部分所述,組件實(shí)際上是類的實(shí)例,因此第一步是獲取對(duì)需要使用的組件實(shí)例的引用。這是通過?GetComponent?函數(shù)來完成的。通常,希望將組件對(duì)象分配給變量,而此操作是使用以下語法以 C# 實(shí)現(xiàn)的:
獲得對(duì)組件實(shí)例的引用后,可以像在 Inspector 中一樣設(shè)置其屬性的值:
Inspector 中所沒有的一項(xiàng)額外功能是可以在組件實(shí)例上調(diào)用函數(shù):
另外請(qǐng)注意,完全可以將多個(gè)自定義腳本附加到同一對(duì)象。如果需要從一個(gè)腳本訪問另一個(gè)腳本,可以像往常一樣使用 GetComponent,只需使用腳本類的名稱(或文件名)來指定所需的組件類型。
如果嘗試檢索尚未實(shí)際添加到游戲?qū)ο蟮慕M件,則 GetComponent 將返回 null;如果嘗試更改 null 對(duì)象上的任何值,將在運(yùn)行時(shí)出現(xiàn) null 引用錯(cuò)誤。
訪問其他對(duì)象
雖然其他對(duì)象有時(shí)會(huì)孤立運(yùn)行,但是腳本通常會(huì)跟蹤這些對(duì)象。例如,追捕敵人可能需要知道玩家的位置。Unity 提供了許多不同方法來檢索其他對(duì)象,每種方法都適合特定情況。
將游戲?qū)ο笈c變量鏈接
查找相關(guān)游戲?qū)ο蟮淖钪苯臃椒ㄊ窍蚰_本添加公共的游戲?qū)ο笞兞浚?/p>
此變量在 Inspector 中可以像任何其他變量一樣顯示:

現(xiàn)在可以將對(duì)象從場(chǎng)景或 Hierarchy 面板拖到此變量上,對(duì)其進(jìn)行分配。GetComponent 函數(shù)和組件訪問變量與其他任何變量一樣可用于此對(duì)象,因此可以使用如下代碼:
此外,如果在腳本中聲明組件類型的公共變量,則可以拖動(dòng)已附加該組件的任何游戲?qū)ο蟆_@將直接訪問組件而不是游戲?qū)ο蟊旧怼?/p>
在處理具有永久連接的單個(gè)對(duì)象時(shí),將對(duì)象與變量鏈接在一起是最有用的方法??梢允褂脭?shù)組變量來鏈接同一類型的多個(gè)對(duì)象,但仍然必須在 Unity Editor 中(而不是在運(yùn)行時(shí))進(jìn)行連接。在運(yùn)行時(shí)定位對(duì)象通常很方便,因此 Unity 提供了兩種基本方法來執(zhí)行此操作,如下所述。
尋找子游戲?qū)ο?/h1>
有時(shí),游戲場(chǎng)景會(huì)使用許多相同類型的游戲?qū)ο?,例如敵人、路?biāo)和障礙物。這些游戲?qū)ο罂赡苄枰杀O(jiān)督或響應(yīng)它們的特定腳本來跟蹤(例如,尋路腳本可能需要使用所有路標(biāo))??梢允褂米兞縼礞溄舆@些游戲?qū)ο?,但是如果必須將每個(gè)新路標(biāo)拖動(dòng)到腳本中的變量,會(huì)使設(shè)計(jì)過程變得繁瑣。同樣,如果刪除一個(gè)路標(biāo),則必須刪除對(duì)丟失游戲?qū)ο蟮淖兞恳?,這很麻煩。此類情況下,可使一組游戲?qū)ο蟪蔀橐粋€(gè)父游戲?qū)ο蟮乃凶訉?duì)象,這種管理多個(gè)游戲?qū)ο蟮姆绞酵ǔ?huì)更好??梢允褂酶赣螒?qū)ο蟮淖儞Q組件來檢索子游戲?qū)ο螅ㄒ驗(yàn)樗杏螒驅(qū)ο蠖季哂须[式變換):
還可以使用?Transform.Find?函數(shù)按名稱查找特定子對(duì)象:?
當(dāng)對(duì)象具有可以在游戲運(yùn)行過程中添加和刪除的子對(duì)象時(shí),這種功能可能很有用。可以拾取和放下的武器就是這方面的一個(gè)很好的例子。
按名稱或標(biāo)簽來查找游戲?qū)ο?/h1>
只要有某種信息可以識(shí)別游戲?qū)ο?,就可以在?chǎng)景層級(jí)視圖中的任何位置找到該游戲?qū)ο???墒褂?GameObject.Find?函數(shù)按名稱檢索各個(gè)對(duì)象:
還可以使用?GameObject.FindWithTag?和?GameObject.FindGameObjectsWithTag?函數(shù)按標(biāo)簽來查找對(duì)象或者對(duì)象集合: