private bool m_RecoverState      = true;                                                             // 是否已经恢复成原始的材质

        /// <summary>
        /// 初始化材质信息
        /// </summary>
        public void InitMat()
        {
            m_InitMat.Clear();
            m_InitMatExtra.Clear();

            if (mOwner == null || mOwner.IsDestroy)
            {
                return;
            }

            var game_obeject = mOwner.gameObject;

            if (game_obeject == null)
            {
                return;
            }

            Renderer[] renderes = mOwner.gameObject.GetComponentsInChildren <Renderer>();
            foreach (Renderer r in renderes)
            {
                if (r.sharedMaterial == null)
                {
                    continue;
                }

                string tag_name = r.gameObject.tag;// 只有标记tag的节点才替换材质
                if (tag_name.ToLower() != "matreplace")
                {
                    continue;
                }

                ExtraMatInf mat_info = new ExtraMatInf();
                if (r.sharedMaterial.HasProperty(MainColorName))
                {
                    mat_info.OriColor = r.sharedMaterial.color;
                }
                mat_info.Instance = false;

                m_InitMatExtra.Add(r, mat_info);
                m_InitMat.Add(r, r.sharedMaterial);
            }
        }
        /// <summary>
        /// 恢复原始的材质
        /// </summary>
        public void Recover()
        {
            if (m_RecoverState)
            {
                return;
            }

            foreach (KeyValuePair <Renderer, Material> kvp in m_InitMat)
            {
                if (kvp.Key == null || kvp.Value == null)
                {
                    continue;
                }

                var mat_info = m_InitMatExtra[kvp.Key];
                if (mat_info.Instance)
                {
                    mat_info.Instance = false;

                    // 要先销毁instance的材质
                    var instance_mat = kvp.Key.material;
                    kvp.Key.sharedMaterial = kvp.Value;
                    GameObject.Destroy(instance_mat);
                }
                else
                {
                    kvp.Key.sharedMaterial = kvp.Value;
                }
                ExtraMatInf emi = m_InitMatExtra[kvp.Key];
                if (kvp.Value.HasProperty(MainColorName))
                {
                    kvp.Key.sharedMaterial.SetColor(MainColorName, emi.OriColor);
                }
            }
            m_RecoverState = true;
        }