如何在Unity3d中捕获组件相关事件?

时间:2016-01-27 03:36:57

标签: events unity3d components

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

  1. 启用/禁用预定义组件。
  2. 删除/添加预定义的组件。
  3. 我真的想知道哪些脚本修改了GameObject的预定义组件(例如MeshRenderer)。

1 个答案:

答案 0 :(得分:2)

启用/禁用可以跟随:

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); }
   }