Unity3d中如何捕捉组件相关事件?

How to capture component related events in Unity3d?

在Unity3d中很容易捕捉到GameObject相关事件4.X,比如初始化,改变激活状态,销毁等自定义的MonoBehaviour 附加到 GameObject 的调试将实现目标。但是如何捕获预定义(我的意思是,我不能修改源代码来添加调试代码)组件相关事件?

  1. 预定义组件是 enabled/disabled。
  2. 预定义组件是 removed/added。

我真的很想知道哪些脚本修改了 GameObject 的预定义组件(例如 MeshRenderer)。

Enabled/disabled 后面可以跟:

void OnEnable(){ Debug.Log("Being enabled"); }
void OnDisable(){ Debug.Log("Being disabled"); }

关于删除,我猜这是破坏:

void OnDestroy(){  Debug.log("Is destroyed"); }

如果您打算四处移动组件,那么更多的是关于抓取它并移动它的方法。

至于哪个脚本影响,你可以使用事件模式:

public EventHandler <EventArg> RaiseEvent;
protected void OnRaiseEvent(EventArg args){
    if(RaiseEvent != null{ RaiseEvent(this, args); }
}

另一个脚本正在侦听:

void Start(){
       controller.RaiseEvent += HandleEvent;
   }
   void HandleEvent(object sender, EventArg args){
       MonoBehaviour mb = sender as MonoBehaviour;
       if(mb != null) { Debug.Log("Was modified by " + mb.name); }
   }