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

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

  628人阅读  评论(0)  收藏  举报
  分类:
【Unity3D】(30) 

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

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

作者: 攀大小熊猫    邮箱: [email protected]  

先总结,再证明。

总结:

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

 

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

其实意义就是,脚本为启用状态时,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^_^

猜你喜欢

转载自hypercube.iteye.com/blog/2323885