@@ -3,6 +3,7 @@ namespace CodeWriter.MeshAnimation
33{
44 using System ;
55 using System . Linq ;
6+ using System . Collections . Generic ;
67 using JetBrains . Annotations ;
78 using UnityEditor ;
89 using UnityEngine ;
@@ -23,6 +24,11 @@ public static void Clear([NotNull] MeshAnimationAsset asset)
2324
2425 DestroyObject ( ref asset . bakedMaterial ) ;
2526 DestroyObject ( ref asset . bakedTexture ) ;
27+
28+ foreach ( var data in asset . extraMaterialData ) {
29+ DestroyObject ( ref data . material ) ;
30+ }
31+
2632 SaveAsset ( asset ) ;
2733 }
2834
@@ -49,6 +55,7 @@ public static void Bake([NotNull] MeshAnimationAsset asset)
4955 if ( ! aborted )
5056 {
5157 CreateMaterial ( asset ) ;
58+ CreateExtraMaterials ( asset ) ;
5259 BakeAnimations ( asset ) ;
5360 }
5461
@@ -84,6 +91,30 @@ private static void CreateMaterial(MeshAnimationAsset asset)
8491 }
8592 }
8693
94+ private static void CreateExtraMaterials ( MeshAnimationAsset asset )
95+ {
96+ foreach ( var materialName in asset . extraMaterials )
97+ {
98+ var data = asset . extraMaterialData . Find ( it => it . name == materialName ) ;
99+ if ( data == null )
100+ {
101+ data = new MeshAnimationAsset . ExtraMaterialData
102+ {
103+ name = materialName
104+ } ;
105+ asset . extraMaterialData . Add ( data ) ;
106+ }
107+
108+ if ( data . material == null )
109+ {
110+ data . material = new Material ( asset . shader ) { name = $ "{ asset . name } _{ materialName } Material"} ;
111+ AssetDatabase . AddObjectToAsset ( data . material , asset ) ;
112+ }
113+
114+ data . material . shader = asset . shader ;
115+ }
116+ }
117+
87118 private static void CreateTexture ( MeshAnimationAsset asset , out bool aborted )
88119 {
89120 aborted = false ;
@@ -231,9 +262,17 @@ private static void BakeAnimations(MeshAnimationAsset asset)
231262 Object . DestroyImmediate ( bakeObject ) ;
232263 Object . DestroyImmediate ( bakeMesh ) ;
233264
234- asset . bakedMaterial . SetTexture ( AnimTextureProp , asset . bakedTexture ) ;
235- asset . bakedMaterial . SetVector ( AnimationMulProp , boundMax - boundMin ) ;
236- asset . bakedMaterial . SetVector ( AnimationAddProp , boundMin ) ;
265+ var materials = new HashSet < Material > { asset . bakedMaterial } ;
266+ foreach ( var data in asset . extraMaterialData )
267+ {
268+ materials . Add ( data . material ) ;
269+ }
270+
271+ foreach ( var material in materials ) {
272+ material . SetTexture ( AnimTextureProp , asset . bakedTexture ) ;
273+ material . SetVector ( AnimationMulProp , boundMax - boundMin ) ;
274+ material . SetVector ( AnimationAddProp , boundMin ) ;
275+ }
237276 }
238277
239278 private static void CaptureMeshToTexture ( Texture2D texture , Mesh mesh , Vector3 min , Vector3 max , int line )
0 commit comments