protected virtual void OnClear(CocoMakeupCategory _category)
        {
            if (_category == CocoMakeupCategory.Eyebrow || _category == CocoMakeupCategory.Eyecolor)
            {
                CocoMakeupControlChange temp = (CocoMakeupControlChange)m_CurrControlExecutor;
                temp.ResetTexture();
            }
            else
            {
                m_CurrControlExecutor.ClearPatting();
            }
            PlayFaceEffect();

            //m_CharacterMakeupData.RemoveItem(m_CurrControlExecutor.ItemData.belongCategoryData.type);
            //m_CharacterManager.SaveCharacterDress(m_CharacterManager.MainCharacter);
        }
        protected virtual CocoMakeupControlExecutorBase CreateExecutor(CocoMakeupCategoryData categoryData, CocoRoleBody body)
        {
            GameObject  target           = null;
            string      materialProperty = string.Empty;
            Texture2D   sampleTexture    = null;
            bool        useUV2           = false;
            bool        bakeMashEnable   = true;
            CCPaintMode paintmode        = CCPaintMode.MixOrigin;

            materialProperty = MakeupData.GetMaterialProperty(categoryData.PaintLayer);

            switch (categoryData.PaintLayer)
            {
            case CocoMakeupPaintLayer.Eye:
                target = body.GetRenderer(CocoRoleRendererID.EyeBall).gameObject;
                break;

            case CocoMakeupPaintLayer.EyeBrow:
                target = body.GetRenderer(CocoRoleRendererID.EyeBrow).gameObject;
                break;

            case CocoMakeupPaintLayer.EyeLash:
                target         = body.GetRenderer(CocoRoleRendererID.Eyelash).gameObject;
                bakeMashEnable = false;
                paintmode      = CCPaintMode.NonMixOrigin;
                break;

            case CocoMakeupPaintLayer.Head:
                target = body.GetRenderer(CocoRoleRendererID.Head).gameObject;
                break;

            case CocoMakeupPaintLayer.Head_Layer1:
                target = body.GetRenderer(CocoRoleRendererID.Head).gameObject;
                break;

            case CocoMakeupPaintLayer.Head_Layer2:
                target = body.GetRenderer(CocoRoleRendererID.Head).gameObject;
                useUV2 = true;
                break;

            default:
                target = body.GetRenderer(CocoRoleRendererID.Head).gameObject;
                break;
            }

            CocoMakeupControlExecutorBase executor = null;

            switch (categoryData.PaintData.paintType)
            {
            case CocoMakeupPaintType.PaintTexture:
                CocoMakeupCategoryPaintData_PaintTexture paintData = (CocoMakeupCategoryPaintData_PaintTexture)categoryData.PaintData;
                if (paintData.paintBlendColor)
                {
                    executor = new CocoMakeupControlPaintBlendColor(target, materialProperty, bakeMashEnable, sampleTexture, useUV2);
                }
                else
                {
                    executor = new CocoMakeupControlPaint(target, materialProperty, bakeMashEnable, sampleTexture, useUV2);
                }

                executor.PaintKit.SetMixMode(paintmode);
                break;

            default:
                executor = new CocoMakeupControlChange(target, materialProperty, bakeMashEnable);
                break;
            }

            return(executor);
        }