在學(xué)習(xí)如何獲取物體和組件時先明白說明什么是物體,組件和對象。
物體:unity中在層級顯示的東西都可以叫做物體
組件:unity中提供了大量已經(jīng)寫好的組件,比如剛體,碰撞體等,自己編寫的腳本也是一種組件類
對象:掛載到物體上的腳本是一個實例化的組件,也就是一個對象
一個游戲物體是一個對象;沒有被掛載到物體上的腳本,是一個未被實例化的類,當(dāng)腳本被掛載到物體上后,就變成了一個實實在在的對象
獲取組件的方法
(1)GetComponent()
Rigidbody2D M_Rigidbody2D;
void Start()
{
? ? //獲取到組件后,將它的 引用??! 保存在M_Rigidbody2D字段中,方便下次使用
M_Rigidbody2D = gameobject.GetComponent<Rigidbody2D>();
? ?//這是很常見的獲取組件的代碼,gameobject是從當(dāng)前腳本組件獲取到游戲物體,GetComponent就是從游戲物體中獲取到指定的組件
}
(2)GetComponents():該方法和上面的方法差不多,但是它的返回值是一個數(shù)組,也就是用來一個游戲?qū)ο笊嫌卸鄠€同類型組件,獲取所有同類型組件用的
獲取物體的方法
(1)GameObject.Find():通過物體的名稱獲取物體
存在兩個弊端第一,GameObject.Find()無法找到未激活的對象,第二,GameObject.Find()需要遍歷場景中的所有物體
(2)GameObject.FindGameObjectWithTag():通過標(biāo)簽查找物體,該方法返回的是游戲?qū)ο?/p>
還有一個CompareTag()方法,該方法返回的是true或者false,和GameObject.tag==""是一樣的
(3)父子關(guān)系獲取物體對象
transform.Find("子物體的名字")尋找子物體
transform.GetChild() 通過序號查找子物體
獲取公開變量獲得物體和組件
上面介紹的獲取物體和組件時,都是在腳本里面進行賦值的,其實還可以在unity編譯器中獲取
(1)獲取物體(最常用)


(2)獲取組件
組件的獲取也和物體的獲取類似,但是也是在檢查器窗口有個組件的賦值欄,但是不同的就是不是拖動組件給其賦值,而且拖動帶有該組件的游戲?qū)ο髮ζ滟x值,畢竟獲取的組件的目的是為了獲取游戲?qū)ο笊系哪硞€組件
總結(jié)
獲取游戲?qū)ο蠛徒M件方法其實有很多,上面的方法也只是列舉的比較常用的,在獲取物體時,腳本在物體上時--直接用GameObject就能獲取,腳本不在物體上--用public公共變量獲??;在獲取組件時,腳本(其實腳本也算是組件)如果和組件在同一個對象上--用gameobject.GetComponent;如果腳本和組件不在同一個對象上--用public公共變量獲取

現(xiàn)在我才發(fā)現(xiàn),在使用public方法對變量或者組件,對象進行賦值時,當(dāng)游戲物體被制作成預(yù)制件之后,通過預(yù)制件的方式用到場景中去,之前使用public賦值的方法需要重新再拖曳賦值,比較麻煩,因此再這里再詳細介紹下通過
代碼來查找物體的方法:
(1)GameObject.Find(string name)//按名字尋找對象,1.只能找到激活對象,2 盡量保證名字是唯一的,不唯一可以用路徑 3.效率低會遍歷場景中的所有對象
(2)GameObject.FindWithTag(string tag);//按標(biāo)簽尋找對象,1.只能找到激活對象
(3)GameObject.FindGameObjectWithTag(string tag)//按標(biāo)簽尋找對象,1.只能找到激活對象
//注意FindGameObjectWithTag和FindWithTag的作用是一樣的,只是名字不一樣
(4)GameObject.FindGameObjectsWithTag(string tag)//按標(biāo)簽尋找對象數(shù)組,1.只能找到激活對象
(5)transform.Find()//按名字尋找子物體的對象,1.可用于未激活物體,2.多重子物體時需寫全路徑
(6)transform.GetChild()//按索引尋找子物體的對象,1.可用于未激活物體2.多重子物體可以多次使用GetChild()
絕大部分尋找到物體就是為了獲取該物體身上的組件,有時候可以直接用代碼獲取
gameObject.GetComponent//通過以上方法獲取對象后,再結(jié)合這個方法就能獲取到想要的組件
//當(dāng)想要獲取游戲子對象上的組件時,可以先不用獲取到子對象再獲取組件,可以直接用下面的方法獲取組件
(1)transform.parent//得到父對象的transform組件
(2)transform.GetComponentInChildren<T>()//獲取子物體對應(yīng)的組件,1.可用于未激活物體,不過需要參數(shù)里面寫true,注意:這里不能直接獲取<GameObject>,具體原因我也不是太清楚
(3)transform.GetComponentsInChildren<T>()//獲取子物體對應(yīng)的組件,返回值是數(shù)組文章來源:http://www.zghlxwxcb.cn/news/detail-796331.html
(4)transform.GetChildCount()//被棄用了,現(xiàn)在是通過transform.childCount來獲取子對象的個數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-796331.html
到了這里,關(guān)于Unity中獲取游戲?qū)ο蟮膸追N方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!