mob-sakai / UIEffect

UIEffect is an effect component for uGUI element in Unity. Let's decorate your UI with effects!
https://github.com/mob-sakai/UIEffect
MIT License
5.57k stars 770 forks source link

UIEffectBase.OnValidate may be disabled when game running #235

Open ltccss opened 3 years ago

ltccss commented 3 years ago

NOTE: Your issue may already be reported! Please search on the issue tracker before creating one.

Is your feature request related to a problem? Please describe. I pushed those UI-EFFECT materials into a shared asset bundle, and load all the ui assets via asset bundles (with Unity's dependence system).

Firstly I found the UI-Effect-Transition component doesn't work in mobile phone but it's OK when in Editor(also load assets via AB).

this puzzles me for a long time, and then I find this:

protected override void OnValidate()
{
    base.OnValidate ();

    var mat = GetMaterial();
    if (m_EffectMaterial != mat)
    {
        m_EffectMaterial = mat;
        UnityEditor.EditorUtility.SetDirty(this);
    }

    ModifyMaterial();
    SetVerticesDirty ();
    SetDirty ();
}

It seems when in editor mode, m_EffectMaterial will always be checked.

Otherwise, I stopped OnValidate() temporarily and found that if I turn off the KeyWord "UIEFFECT_SEPARATE" in MaterialResolver, a lot of sub material assets will be generated into one material asset (such as "UI-Effect-Transition"), which causes that the UI EFFECT component(such as UITransitionEffect) fails to find its material when deserialized from bundle. (It seems a Unity bug about asset bundle system?) (Sorry for no example project provided, it's rather complicated to make one)

the Unity version is 2018.4.21f1