//Modify by liteng for MoveAtlas At 2014/1/4
 public void OnAfterCmdExecute(IEditorCommand cmd, int removeCmdCount)
 {
     if (!HasEditTarget())
     {
         return;
     }
     SpecialEffectEditorUtility.MarkSpecialEffectDirty(GetEditTarget().RealSpe);
 }
    //在每次选中GameObject时被调用
    void OnEnable()
    {
        SpecialEffect spe = target as SpecialEffect;

        //刷新子元素,并自动挂接脚本
        SpecialEffectEditorUtility.RefreshSpecialEffect(spe.gameObject);

        _UpdateSerializedObjects();

        SpecialEffectEditorUtility.MarkSpecialEffectDirty(spe);
    }
    public void Destroy()
    {
        if (!editTarget)
        {//若为非编辑特效直接删除
            //直接销毁prefab生成的编辑用实例特效
            if (realSpe != null)
            {
                GameObject.DestroyImmediate(realSpe.gameObject);
            }
            return;
        }

        if (targetSpeOldParent == null)
        {
            ForceBindTarget(null);
        }
        else
        {
            ForceBindTarget(targetSpeOldParent.gameObject);
        }

        realSpe.Stop();
        realSpe.CanShow = true;
        SpecialEffectEditorUtility.EnableSpecialEffect(realSpe);
        SpecialEffectEditorUtility.MarkSpecialEffectDirty(realSpe);

        //若此特效来自Prefab
        if (realSpePrefab != null)
        {
            if (IsDirty)
            {
                if (EditorUtility.DisplayDialog("警告!", "此特效为Prefab,编辑过程中有变动,是否保存至Prefab?", "是", "否"))
                {
                    //保存编辑结果至Prefab文件
                    SpecialEffectEditorUtility.ReplacePrefab(realSpe.gameObject, realSpePrefab);
                }
            }

            //直接销毁prefab生成的编辑用实例特效
            GameObject.DestroyImmediate(realSpe.gameObject);
        }

        targetSpeOldParent = null;
        realSpe            = null;
        realSpePrefab      = null;
    }
    private void _MarkSpecialEffectDirty()
    {
        SpecialEffect currSpe = target as SpecialEffect;

        SpecialEffectEditorUtility.MarkSpecialEffectDirty(currSpe);
    }