一般來說和措,從設計初衷來看,把掛在物體上的腳本勾選狀態(tài)改為不勾選蜕煌,這個腳本就不會運行。
然而真實情形只是生命周期函數和用戶自定義的且外部不被訪問的函數不運行罷了诬留;
enabled設置為false斜纪,且方法為外部調用的這個是必定會被執(zhí)行,暫不討論文兑。
我遇到去掉鉤也運行的情況盒刚,是調用unity API導致的,難免有些意外绿贞,就此說道說道好了因块!
首先,神奇的代碼如下:
using UnityEngine;
public class testForChangeTexture : MonoBehaviour {
AnimEmoj animEmoj;
void Start () {
animEmoj = GetComponent<AnimEmoj>();
}
private void OnMouseDown()
{
animEmoj.Playing(gameObject,0,-1);
}
}
然后取消勾選該腳本籍铁,運行居然還會報錯:
來來涡上,我們分析下為何他會報錯:顯然是animEmoj沒有賦值,也就是說Start方法沒有運行拒名。
綜上吩愧,我們先懷疑一下,就是事件監(jiān)聽這類的Unity內置方法增显,只要掛在游戲對象上雁佳,即便不勾選也會執(zhí)行;
好的,我們試試究竟是不是真的取消了勾選糖权,這個OnMouseDown()依舊運行堵腹!
如下,Debug一下即可:
using UnityEngine;
public class testForChangeTexture : MonoBehaviour {
AnimEmoj animEmoj;
void Start () {
animEmoj = GetComponent<AnimEmoj>();
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<AnimEmoj>();
}
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()里面要用到的對象,運行起來發(fā)現腳本勾不勾選都make no diffrence了登淘;
總結: 腳本不被勾選箫老,大部分生命周期函數不會執(zhí)行,但是內置的事件監(jiān)測的方法黔州,譬如這個OnMouseDown()耍鬓,OnTriggerEnter();都能運行;
經過確認流妻,生命周期函數Awake牲蜀,OnApplicationPause,不勾選啟動時均會調用一次绅这,停止運行時OnDestoey會調用一次
還有一個筆者沒有試的涣达,那就是繼承了unity內置接口并實現的,被響應也會執(zhí)行吧…
好了证薇,要教大家躲坑了度苔;
- 如果在這些方法里面寫了邏輯,邏輯里面引用的對象的棕叫,先判斷對象是否為Null林螃;
- 如果這些事件監(jiān)聽的方法里面寫了音樂播放的,特效播放的俺泣,用代碼控制這個腳本的Active屬性沒用哦
直接動態(tài)加載和卸載這個腳本就好了(Destory(GetComponet<yourcode.cs>())) - 看了本文疗认,以后調試報錯就不會因為這個現象懵逼了
- 針對行文開頭提及的enabled設為false完残,外部調用方法的問題,建議為了穩(wěn)健横漏,可以先判斷enabled不為false時執(zhí)行谨设。
標簽:Unity3D、腳本編程缎浇、Bug扎拣、EventSystem、OnMouseDown素跺、OntriggerEnter二蓝、AddListener
快捷訪問: