一般来说,从设计初衷来看,把挂在物体上的脚本勾选状态改为不勾选,这个脚本就不会运行。

然而真实情形只是生命周期函数和用户自定义的且外部不被访问的函数不运行罢了;

enabled设置为false,且方法为外部调用的这个是必定会被执行,暂不讨论。

我遇到去掉钩也运行的情况,是调用unity API导致的,难免有些意外,就此说道说道好了!

首先,神奇的代码如下:

using UnityEngine;

public class testForChangeTexture : MonoBehaviour {

AnimEmoj animEmoj;

void Start () {

animEmoj = GetComponent();

}

private void OnMouseDown()

{

animEmoj.Playing(gameObject,0,-1);

}

}

然后取消勾选该脚本,运行居然还会报错:

明明取消了脚本的勾选

居然这个脚本会爆出对象为空警告

来来,我们分析下为何他会报错:显然是animEmoj没有赋值,也就是说Start方法没有运行。

综上,我们先怀疑一下,就是事件监听这类的Unity内置方法,只要挂在游戏对象上,即便不勾选也会执行;

好的,我们试试究竟是不是真的取消了勾选,这个OnMouseDown()依旧运行!

如下,Debug一下即可:

using UnityEngine;

public class testForChangeTexture : MonoBehaviour {

AnimEmoj animEmoj;

void Start () {

animEmoj = GetComponent();

Debug.Log("运行了Start方法!");

}

private void OnMouseDown()

{

Debug.Log("我还在运行");

animEmoj.Playing(gameObject,0,-1);

}

}

运行前先挂载该脚本,但不勾选

好!! 见证奇迹时候到了(注意:Start里面的Debug没有运行~):

对着挂载该脚本的游戏对象点击,居然还是运行了

别浪,再试试OnTriggerEnter(),不勾选能进去不?

代码块:

using UnityEngine;

public class testForChangeTexture : MonoBehaviour {

AnimEmoj animEmoj;

void Start () {

Debug.Log("运行了Start方法!");

animEmoj = GetComponent();

}

private void OnTriggerEnter(Collider other)

{

Debug.Log("我运行了,"+other.name+"在碰我!");

}

}

我真的取消了勾选,居然真的真的还是运行了!!

注意: Start里面的Debug依旧没有运行~

再来一例

using UnityEngine;

public class testForChangeTexture : MonoBehaviour {

public AnimEmoj animEmoj;

public GameObject obj;

void Start () {

Debug.Log("进来?");

}

private void OnMouseDown()

{

Debug.Log("你没有勾选,但我就是进来了!");

if (null!=animEmoj)

{

animEmoj.Playing(obj, 0, -1);

}

}

}

Debug输出&效果:

没有勾选也跑的那么溜,你说坑不坑

绕过Start直接赋值OnMouseDown()里面要用到的对象,运行起来发现脚本勾不勾选都make no diffrence了;

总结: 脚本不被勾选,大部分生命周期函数不会执行,但是内置的事件监测的方法,譬如这个OnMouseDown(),OnTriggerEnter();都能运行;

经过确认,生命周期函数Awake,OnApplicationPause,不勾选启动时均会调用一次,停止运行时OnDestoey会调用一次

还有一个笔者没有试的,那就是继承了unity内置接口并实现的,被响应也会执行吧…

好了,要教大家躲坑了;

如果在这些方法里面写了逻辑,逻辑里面引用的对象的,先判断对象是否为Null;

如果这些事件监听的方法里面写了音乐播放的,特效播放的,用代码控制这个脚本的Active属性没用哦

直接动态加载和卸载这个脚本就好了(Destory(GetComponet()))

看了本文,以后调试报错就不会因为这个现象懵逼了

针对行文开头提及的enabled设为false,外部调用方法的问题,建议为了稳健,可以先判断enabled不为false时执行。

标签:Unity3D、脚本编程、Bug、EventSystem、OnMouseDown、OntriggerEnter、AddListener

快捷访问:

unity 关闭自己脚本_Unity3D 挂载的脚本取消勾选居然还会运行!!相关推荐

  1. unity3d 挂载脚本_Unity3D 自动添加脚本到物体上(指定脚本挂在指定位置上)

    转载自 http://www.manew.com/blog-123323-3438.html 关于场景内物体添加脚本等等的 最麻烦了,而且经常容易丢失 . 现在给新手一个比较好的方法来自动添加脚本. ...

  2. unity用代码控制材质emission color时,勾选了emission后启动不能正常控制自发光颜色的问题解决

    问题描述: 最近实现一个功能是根据摄像机高度控制材质emission color的自发光(相关材质勾选emission,编写脚本控制emission color的值),做好了之后发现启动不能正常自发光 ...

  3. unity调用python脚本_Unity3d中C#脚本调用另一个C#脚本的方法

    *****第一个脚本名字为Class_1,第二个脚本名字为Class_2***** **Class_1调用Class_2**GameObject.Find("脚本所在物体名").G ...

  4. 怎样不显示限制网页运行可访问计算机的脚本和active控件,Internet Explorer已限制此网页运行脚本或ActiveX控件...

    Internet Explorer已限制此网页运行脚本或ActiveX控件是控件安装错误造成的,解决方法为: 1.先关闭 Internet Explorer 浏览器,然后从开始菜单中找到 Intern ...

  5. unity摄影机depth模式_Unity3d摄像机详解

    一 概述 Unity的相机用来将游戏世界呈现给玩家.你始终至少有一个相机在场景中,你也可以有多个.多相机可以给你一个双人分屏效果或创建高级的自定义效果.你可以让相机动起来,或用物理(组件)控制它们.几 ...

  6. unity 关闭自己脚本_unity中使用代码控制脚本的开启和关闭 enabled

    学习中遇到了使用enabled 来控制脚本的开关,中间遇到了一些问题,记录一下,以便遇到类似问题的新手同学少走弯路. 在想使用代码控制脚本的开启和关闭的时候,网上搜索到的解决方案是这样的: GameO ...

  7. 【Unity3D】Unity 脚本 ① ( 创建 C# 脚本 | Visual Studio 2019 中打开 C# 脚本 | 编译 C# 脚本 | 挂载 C# 脚本到游戏物体 | 运行脚本 )

    文章目录 一.创建 Unity 脚本 二.Visual Studio 2019 中打开 C# 脚本 三.编译 C# 脚本 四.挂载 C# 脚本到游戏物体 GameObject 1.添加组件方式 2.直 ...

  8. Unity脚本 (1) --- 创建脚本以及挂载脚本的本质,脚本模板的修改

    值类型 --- 在栈区中开辟内存空间并直接存储在栈区中,引用类型 --- 在栈区中开辟内存空间存引用,在堆区中开辟内存空间存数据(有可能堆区中还要开辟引用),然后将堆区中存储数据的内存空间的地址传给引 ...

  9. Unity脚本(2) --- 脚本生命周期以及脚本的控制台调试

    1.什么是脚本生命周期? 首先什么是脚本 --- 脚本的本质其实就是类,而脚本生命周期其实就是脚本对应的那个类从开始工作到最后销毁这么一个周期 (或者说是Unity脚本从唤醒到销毁的过程) (消息,必 ...

最新文章

  1. 硅谷来信 | 投资人张璐:AI正在造就超级人类,医疗应用潜力无穷
  2. 根据文件名或文件扩展名获取文件的默认图标
  3. VS2010 定位文件在solution中的位置
  4. 父类的析构函数定义为虚函数
  5. 实验7-3-6 字符串转换成十进制整数 (15分)
  6. 安装Windows Server 2008 测试机
  7. Android技术专家 高焕堂 推荐这本书
  8. 这波疫情,中国会弯道超车么?
  9. FeiQ(飞秋)更新用户列表的原理
  10. 超牛逼的性能调优利器 — 火焰图
  11. CISP-PTE考试介绍
  12. 0501 0503 模块区别_关于博途STEP7仿真软件究竟与真实PLC有哪些区别?
  13. as常用固定搭配_as固定短语搭配
  14. Flink报错 Could not instantiate the executor_ Make sure a planner module is on the classpath
  15. python网页登录模板
  16. Labwindows扫盲+技巧贴,CVI学习必看
  17. 计算机怎么保存窗口画面,电脑视频怎么旋转保存 怎样将视频画面进行旋转并保存|视频画面旋转工具...
  18. 用Keras和直方图均衡化进行深度学习的图像增强
  19. 音视频常见问题分析和解决:延时和抖动
  20. Microsoft Office 2016 VOL版下载

热门文章

  1. 阿提拉公司 java_Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python...
  2. Mysql的空值与NULL的区别
  3. android 选项卡TabHost
  4. ssm配置socket_ssm框架中集成websocket实现服务端主动向客户端发送消息
  5. 【PHPExcel】生成Excel2007文件并下载
  6. python加号换行,Python字符串拼接六种方法介绍
  7. php+羊,PHP之羊生小羊的问题
  8. 示波器_你真的懂示波器嘛?面试中会用到的示波器知识
  9. django项目转pyc_问题网址.pycdjango生成的文件,如何修复?
  10. python模糊查找文件夹名字_python实现在目录中查找指定文件的方法