【解决】ArgumentException: GetComponent requires that the requested component ‘XX‘ derives from...

开发平台:Unity 2020
编程平台:Visual Studio 2020
使用语言:CSharp

一、问题描述


在这里插入图片描述
备注:这是一个开发者对 Unity 认知存在错误所产生的方法。


问题代码信息:

var thisMat = transform.GetComponent<Materials>();

二、问题原因


2.1 理解:成为 Component 的条件

在这里插入图片描述
  在 Unity 中成为 Component 的条件是继承于 MonoBehaviour 类对象。该继承模式下的脚本将允许以组件视窗模式呈现。即 Inspector 属性面板上的挂载。原则上,只要是能够在游戏对象上添加的对象均有继承 MonoBehaviour。

2.2 理解:Component 与 Material 关系

在这里插入图片描述
   GetComponent<T>() 通常作为索引组件具体对象。此处涉及其爷爷对象 Component 类。该 Component 类是 MonoBehaviour 的爷爷类。但同时也是 Material 的旁系子类(即 object 父类)。

最终解释:在拥有同系父类的情况下,出现 GetComponent<Material>() 却 “未提示该行代码异常” 的原因也就清晰明了。因为 Material 并未直接或间接继承 Component 类。

三、解决方案:使用继承 Component 对象进行索引属性。


public void Example()
{
	var thisMaterial = transform.GetComponent<MeshRenderer>().Materials[0];
}

  为方便管理这类特别的继承关系对象。例如 Material 能够在 MeshRenderer 组件中被找到。可以使用 GetComponents<MeshRenderer>().Materials 获取对象。如果细致能发现 MeshRenderer 继承于 Renderer 类。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值