Fix Outline Instance Missing Issue
This commit is contained in:
parent
239e0a9516
commit
309ea13aff
@ -9,6 +9,27 @@ namespace Byway.TMP
|
||||
|
||||
public bool m_OutlineUnderlayChanged;
|
||||
|
||||
public Material BackupOriginal()
|
||||
{
|
||||
Material mat = new Material(fontSharedMaterial);
|
||||
mat.shaderKeywords = fontSharedMaterial.shaderKeywords;
|
||||
mat.name += " (Backup)";
|
||||
return mat;
|
||||
}
|
||||
|
||||
public void AssignInstance(Material mat)
|
||||
{
|
||||
m_fontMaterial = mat;
|
||||
|
||||
m_sharedMaterial = m_fontMaterial;
|
||||
|
||||
m_padding = GetPaddingForMaterial();
|
||||
|
||||
m_ShouldRecalculateStencil = true;
|
||||
SetVerticesDirty();
|
||||
SetMaterialDirty();
|
||||
}
|
||||
|
||||
|
||||
public void NotifyHelper()
|
||||
{
|
||||
|
||||
@ -7,14 +7,32 @@ namespace Byway.TMP
|
||||
public class TextMeshProBywayUIRuntimeHelper : MonoBehaviour
|
||||
{
|
||||
private TextMeshProBywayUI m_TextComponent;
|
||||
private Material m_TextMaterialOriginal;
|
||||
private Material m_TextMaterialInstance;
|
||||
|
||||
private Material CreateInstance(Material source)
|
||||
{
|
||||
// Get Shader PropertyIDs if they haven't been cached already.
|
||||
ShaderUtilities.GetShaderPropertyIDs();
|
||||
Material mat = new Material(source);
|
||||
mat.shaderKeywords = source.shaderKeywords;
|
||||
mat.name += " (Instance)";
|
||||
return mat;
|
||||
}
|
||||
|
||||
private void CheckMaterialInstance()
|
||||
{
|
||||
DestroyMaterialInstanceIfNeeded();
|
||||
if (m_TextComponent != null && (m_TextComponent.outline || m_TextComponent.underlay))
|
||||
{
|
||||
m_TextMaterialInstance = m_TextComponent.fontMaterial;
|
||||
if (m_TextMaterialOriginal == null)
|
||||
{
|
||||
m_TextMaterialOriginal = m_TextComponent.BackupOriginal();
|
||||
}
|
||||
if (m_TextMaterialInstance == null)
|
||||
{
|
||||
m_TextMaterialInstance = CreateInstance(m_TextMaterialOriginal);
|
||||
m_TextComponent.AssignInstance(m_TextMaterialInstance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -33,7 +51,6 @@ namespace Byway.TMP
|
||||
m_TextMaterialInstance.DisableKeyword(ShaderUtilities.Keyword_Outline);
|
||||
}
|
||||
|
||||
|
||||
if (m_TextComponent.underlay)
|
||||
{
|
||||
m_TextMaterialInstance.EnableKeyword(ShaderUtilities.Keyword_Underlay);
|
||||
@ -50,31 +67,33 @@ namespace Byway.TMP
|
||||
}
|
||||
}
|
||||
|
||||
private void DestroyMaterialInstanceIfNeeded()
|
||||
{
|
||||
if(m_TextComponent == null || (!m_TextComponent.outline && !m_TextComponent.underlay))
|
||||
{
|
||||
DestroyMaterialInstance();
|
||||
}
|
||||
}
|
||||
|
||||
private void DestroyMaterialInstance()
|
||||
private void DestroyAllMaterialInstances()
|
||||
{
|
||||
if (m_TextMaterialInstance != null)
|
||||
{
|
||||
Destroy(m_TextMaterialInstance);
|
||||
}
|
||||
if (m_TextMaterialOriginal != null)
|
||||
{
|
||||
Destroy(m_TextMaterialOriginal);
|
||||
}
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
m_TextComponent = GetComponent<TextMeshProBywayUI>();
|
||||
CheckMaterialInstance();
|
||||
Notify();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
Notify();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
DestroyMaterialInstance();
|
||||
DestroyAllMaterialInstances();
|
||||
}
|
||||
|
||||
public void Notify()
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "com.bywaystudios.textmeshpro.ext",
|
||||
"displayName": "TextmeshPro Extension",
|
||||
"version": "0.1.3",
|
||||
"version": "0.1.5",
|
||||
"dependencies": {
|
||||
"com.unity.textmeshpro": "3.0.9"
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user