Unity:Component容器不可设置enabled成员属性的问题

问题描述

在Unity中,如果我们以public预设一个原生Component容器,用来存放通过反射找到的C#脚本,那么对这个容器设置enabled就会不成功:

private Component TargetComponent;

TargetComponent = AnimationCtrlEntity.GetComponent<MyAnimation>();

TargetComponent.enabled = true; // 编译错误

初学者可能会对此抱有违反直觉的感觉。“我们激活/失活一个脚本,不是很正常的行为吗?” 

探索一番,我们自定义了一个名为 MyAnimation 的类,继承了 MonoBehaviour:

    AnimationCtrlEntity.GetComponent<MyAnimation>().enabled = true;

这段代码就可以执行

why?


解决方法

这个问题的直接原因,是因为Component容器默认不含有 enabled 成员属性

改成以下就可以:

方法一:

           private MyAnimation TargetComponent;

           TargetComponent.enabled = true; // 编译正常

方法二(编译能过,但非常不推荐的写法):

     private Component TargetComponent;

     TargetComponent = AnimationCtrlEntity.GetComponent<MyAnimation>() ;

     (TargetComponent as MyAnimation).enabled = true;  // 编译正常

本质原因是我们自定义的类型 MyAnimation 继承了 MonoBehaviour 类,而 MonoBehaviour 的上一级 Behaviour 类中,包含了这个 enabled 成员属性。

而 Component型容器 虽然能接收不同类型的脚本,但他的父类是 UnityEngine.Object,这使得二者不具备相同的基类属性和方法,自然也无法从中访问到 “不存在的 enabled 成员属性”。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值