開發(fā)平臺(tái):Unity 2020
編程平臺(tái):Visual Studio 2020
使用語(yǔ)言:CSharp
?
一、問(wèn)題描述
備注:這是一個(gè)開發(fā)者對(duì) Unity 認(rèn)知存在錯(cuò)誤所產(chǎn)生的方法。
?
問(wèn)題代碼信息:
var thisMat = transform.GetComponent<Materials>();
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-429736.html
二、問(wèn)題原因
2.1 理解:成為 Component 的條件
??在 Unity 中成為 Component
的條件是繼承于 MonoBehaviour
類對(duì)象。該繼承模式下的腳本將允許以組件視窗模式呈現(xiàn)。即 Inspector 屬性面板上的掛載。原則上,只要是能夠在游戲?qū)ο笊咸砑拥膶?duì)象均有繼承 MonoBehaviour。
?
2.2 理解:Component 與 Material 關(guān)系
?? GetComponent<T>()
通常作為索引組件具體對(duì)象。此處涉及其爺爺對(duì)象 Component
類。該 Component
類是 MonoBehaviour 的爺爺類。但同時(shí)也是 Material 的旁系子類(即 object
父類)。
?
最終解釋:在擁有同系父類的情況下,出現(xiàn) GetComponent<Material>()
卻 “未提示該行代碼異?!?的原因也就清晰明了。因?yàn)?Material 并未直接或間接繼承 Component
類。
?
三、解決方案:使用繼承 Component 對(duì)象進(jìn)行索引屬性。
public void Example()
{
var thisMaterial = transform.GetComponent<MeshRenderer>().Materials[0];
}
??為方便管理這類特別的繼承關(guān)系對(duì)象。例如 Material 能夠在 MeshRenderer 組件中被找到??梢允褂?GetComponents<MeshRenderer>().Materials
獲取對(duì)象。如果細(xì)致能發(fā)現(xiàn) MeshRenderer 繼承于 Renderer
類。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429736.html
到了這里,關(guān)于【解決】ArgumentException: GetComponent requires that the requested component ‘XX‘ derives from...的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!