The single material limit is a limitation of Unity's MaskableGraphic class which SkeletonGraphic integrates with to work correctly with Unity UI.
If your character isn't changing skins dynamically and only uses a few images from multiple atlases, you can use the AttachmentTools
module to repack a skin coming from different atlas pages into one page/texture/material. The unitypackage includes a sample scene that uses it: Mix and Match.unity
Here's a sample script that repacks on start, but you could do it anytime after too:
using UnityEngine;
using Spine.Unity.Modules.AttachmentTools;
namespace Spine.Unity.Examples {
public class RepackOnStart : MonoBehaviour {
#region Inspector
[Header("Runtime Repack")]
public Shader repackedShader;
[Header("Do not assign")]
public Texture2D runtimeAtlas;
public Material runtimeMaterial;
#endregion
void Start () {
var skeletonGraphic = GetComponent<SkeletonGraphic>();
var skeleton = skeletonGraphic.Skeleton;
var newSkin = skeleton.UnshareSkin(true, false); // Clone the skin without cloning its attachments
newSkin = newSkin.GetRepackedSkin("repacked", repackedShader, out runtimeMaterial, out runtimeAtlas); // Repack the cloned skin, which makes repacked clones of its attachments.
skeleton.SetSkin(newSkin);
skeleton.SetToSetupPose();
skeletonGraphic.AnimationState.Apply(skeleton);
}
}
}