Unity3d中关于脚本的启用和禁用的意义及脚本前面的复选框消失的解释

【Unity3D】 专栏收录该内容
31 篇文章 0 订阅


本文章由攀大小熊猫编写,转载请注明出处。

文章链接:http://blog.csdn.net/a237653639/article/details/45766101

作者: 攀大小熊猫    邮箱: 237653639@qq.com  


先总结,再证明。

总结:

禁用脚本的目的就是为了让该脚本“不执行”,而启用的目的就是为了让该脚本”执行“。以上是我原来的想法,其实这样的理解有偏差。准确地说,即使脚本为禁用状态,别的脚本也能够成功地调用 被禁用的脚本的成员(后面将给以证明


那么,您可能会发问,那我禁用脚本有什么意义呢?

其实意义就是,脚本为启用状态时,unity会自动调用该脚本的类继承自MonoBehaviour的方法,反之,脚本为禁用状态时,unity就不会调用这些方法。但绝不影响其他脚本对该脚本内成员的调用


证明:

   即使脚本为禁用状态,别的脚本也能够成功地调用 被禁用的脚本的成员

步骤1,先创建一个cube,然后在其上挂一个Test脚本。然后在MainCamera上挂一个Test2脚本。

   我们将禁用Test脚本,Test2将调用Test内的成员。

  如下图:

cube:

camera:


Test脚本的内容为:

Test2的内容为:

注意,我们已经把Test脚本设为了禁用。

现在,我们看到了运行结果,如下图。cube.GetComponent<Test>().Print()这句话调用成功,但是Test中的继承自MonoBehaviour的Update方法并没有被调用。


现在解释脚本前面的复选框消失的原因:

首先,复选框消失的原因我先复制粘贴下雨松大神的解释:

凡事脚本没有勾选项的,都是因为你的脚本没有Start方法。。如果你想让勾选框显示出来,

把如下方法加入即可,不信你可以试试。嘿嘿。有人测试了一下, 

加上 Update LateUpdate FixedUpdate OnGUI 也都可以让勾选框出来。。。但是Awake不行。。

通过雨松大神的解释,以下是我进一步的想法。

通过上面的总结,我们已经知道了:脚本为启用状态时,

unity会自动调用该脚本的类继承自MonoBehaviour的方法,

反之,脚本为禁用状态时,unity就不会调用这些方法。

我的想法:

如果你的脚本里面没有继承自MonoBehaviour的方法,意思就是就不需要unity来调用了(根本没有,从何调用)。

这样的话,你的脚本不管是禁用或是启用就都跟Unity没有半毛钱的关系了,

所以Unity才会不给你显示复选框,因为没有必要嘛对吧。而一旦有比如Start这类继承(其实是覆写)了

MonoBehaviour的方法,这时就该Unity出马了!所以复选框就会重新显示出来,

由你来控制是否允许Unity来调用Start等方法。那么Awake呢? 

们查阅Unity的官方文档上可以知道(Awake is called once, just like the constructor.),

如果重新启用一个脚本,那么该脚本内的Awake方法不会被调用,而Start等方法会重新起作用(调用)。

而Awake只在其脚本附加的对象一开始被创建时调用一次(不管该脚本是启用还是禁用

都会被调用一次),以后不再调用。所以”Awake不行“(不能使复选框重新出现),哈哈。

the end^_^

  • 4
    点赞
  • 2
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值