public static object GetComponentVar(Type t1, Type t2, object v)
        {
            v = GameMain.Instance.MainCamera.gameObject.GetComponent(t1);
            if (v == null)
            {
                v = GameMain.Instance.MainCamera.gameObject.AddComponent(t1);

                string[] sShaders = Util.GetFieldNamesSpecifyType(t1, typeof(Shader));
                foreach (string sShader in sShaders)
                {
                    Shader shader = assetShaders.LoadAsset(sShader) as Shader;
                    if (shader == null)
                    {
                        if (sShader == "blurShader")
                        {
                            shader = assetShaders.LoadAsset("separableBlurShader") as Shader;
                        }
                        else
                        {
                            shader = assetShaders.LoadAsset(t1.Name + "_" + sShader) as Shader;
                        }
                        if (shader == null)
                        {
                            shader = extraShaders.LoadAsset(t1.Name + "_" + sShader) as Shader;
                        }

                        if (shader == null)
                        {
                            Debug.LogError("Shader " + t1.Name + " has no shader file in extrashaders.");
                            continue;
                        }
                    }

                    Util.SetFieldValue(t1, v, sShader, shader);
                }

                MethodInfo mi = t2.GetMethod("InitExtra");
                if (mi != null)
                {
                    mi.Invoke(null, new object[] { v });
                }
            }
            else
            {
                Util.SetPropertyValue(t1, v, "enabled", true);

                MethodInfo mi = t2.GetMethod("InitMemberByInstance");
                if (mi != null)
                {
                    mi.Invoke(null, new object[] { v });
                }
            }

            return(v);
        }
        public static T GetComponentVar <T, T2>(T v) where T : UnityEngine.Component where T2 : class
        {
            if (v != null)
            {
                return(v);
            }

            v = GameMain.Instance.MainCamera.gameObject.GetComponent <T>();
            if (v == null)
            {
                v = GameMain.Instance.MainCamera.gameObject.AddComponent <T>();

                string[] sShaders = Util.GetFieldNamesSpecifyType <T, Shader>();

                //Type typeShaders = typeof(Shaders);
                //foreach (string sShader in sShaders)
                //{
                //    FieldInfo field = typeShaders.GetField(sShader);
                //    if (field == null)
                //    {
                //        if (sShader == "blurShader")
                //        {
                //            field = typeShaders.GetField("separableBlurShader");
                //        }
                //        else
                //        {
                //            field = typeShaders.GetField(typeof(T).Name + "_" + sShader);
                //        }
                //        if (field == null)
                //            continue;
                //    }

                //    Shader shader = new Material((string)field.GetValue(null)).shader;
                //    Util.SetFieldValue<T>(v, sShader, shader);
                //}

                foreach (string sShader in sShaders)
                {
                    Shader shader = assetShaders.LoadAsset(sShader) as Shader;
                    if (shader == null)
                    {
                        if (sShader == "blurShader")
                        {
                            shader = assetShaders.LoadAsset("separableBlurShader") as Shader;
                        }
                        else
                        {
                            shader = assetShaders.LoadAsset(typeof(T).Name + "_" + sShader) as Shader;
                        }

                        if (shader == null)
                        {
                            shader = extraShaders.LoadAsset(typeof(T).Name + "_" + sShader) as Shader;
                        }

                        if (shader == null)
                        {
                            Debug.LogError("Shader " + typeof(T).Name + " has no shader file in extrashaders.");
                            continue;
                        }
                    }

                    Util.SetFieldValue <T>(v, sShader, shader);
                }


                Type       typeDef = typeof(T2);
                MethodInfo mi      = typeDef.GetMethod("InitExtra");
                if (mi != null)
                {
                    mi.Invoke(null, new object[] { v });
                }
            }
            else
            {
                Util.SetPropertyValue <T>(v, "enabled", true);
                Type       typeDef = typeof(T2);
                MethodInfo mi      = typeDef.GetMethod("InitMemberByInstance");
                if (mi != null)
                {
                    mi.Invoke(null, new object[] { v });
                }
            }

            return(v);
        }