千鋒教育-做有情懷、有良心、有品質的職業教育機構
一.前言
TexeMeshPro 是Unity的一個Text文本插件,實現了比UGUI的Text,更好看的效果,跟高效的性能,所以深受大家的喜歡,但是再好的插件,也不是萬能的,比如我們的策劃有個新需求,要我們的VIP的名字比普通玩家有更好看的效果,例如:字體流光,外發光顏色擾動,字體貼圖等等。那我們就需要去擴展TextMeshPRo的shader功能了。如下圖所示
本文,我就帶大家一起來擴展一下:如何擴展TextMeshProUGUI
二.擴展前后對比
1.TextMesh原始面板
2.TextMeshPro擴展后的面板
三.擴展TextMeshProUGUI
我們主要實現的功能是:實現字體Face的擾動流光和Outline的擾動流光
TextMeshPro本來自帶一個Face貼圖流動和OutLine貼圖流動的功能,但是這個流動有點平淡,策劃們想要的是用一個噪波圖,干擾流動的UV的效果。
噪波圖如下:
1.Shader功能實現
首先,我們可以看到,TextMeshProUGUI默認使用的shader是TMP_SDF.shader,所以我們接下來就是復制一份重命名為TMP_SDF_Noise.shader
添加我們的噪波圖屬性和相應的參數
face噪波
outline噪波
在Frag片元函數中,找到Face和Outline的功能代碼處,添加Noise擾動邏輯
2.編輯器Inspector面板擴展
在TextMeshPro的Package包中,找到SDF的Inspector面板類TMP_SDF_Editor.cs類,注意,這里我們不要直接打開修改,而是要擴展它
原因:
1.我們修改一些第三方插件的功能,一定要使用擴展的方式,而不是直接改源碼,這樣我們后續升級插件,替換插件都較方便
2.這是個package,我們無法修改package包中的代碼,即使修改了,也無法存儲生效。
我們在自己的Editor目錄下新建2個類:ShaderUtilities_EXT和TMP_SDFShaderGUI_EXT
1.ShaderUtilities.cs類是一個工具類,用來獲取shader中變量的PropertyID,這樣C#進行shader的賦值時性能會好一點
所以,我們就把我們自己新加的兩個變量加進去即可
2.TMP_SDFShaderGUI類,就是TMP自帶的SDFShader的編輯器腳本,所以我們新建TMP_SDFShaderGUI_EXT類,繼承TMP_SDFShaderGUI類,這樣我們就可以只寫新的屬性,系統自帶的我們就直接base.xxx()來調用。定義新變量并重寫函數DoGUI。
代碼如下:
四.最后附上完整的shader代碼
相關推薦