通过材质管理 使同一类型状态使用同一个材质
public enum CardMaterialGroupNameDefine
{ 
    Bag,
    DeckGroup,
    DeckList,
    Max
}

public class CardMaterialGroup
{
    private CardMaterialGroupNameDefine m_Define;
    private Dictionary<string, Material> m_Materials = new Dictionary<string, Material>();
    public CardMaterialGroup(CardMaterialGroupNameDefine define)
    {
        m_Define = define;
    }


    public Material GetMaterial(bool isAi, bool isDark)
    {
        string name = (isAi ? "AI" : "Normal") + "_" + (isDark ? "Dard" : "NoDard");
        if (m_Materials.TryGetValue(name, out var mat))
        {
            return mat;
        }

        var originMat = RK.Mat.GetMaterialInstance(isAi ? AddressablePath.Material.AICardKuangMaterial : AddressablePath.Material.NormalCardKuangMaterial);
        mat = GameObject.Instantiate(originMat);
        mat.name = $"{mat.name}_{m_Define.ToString()}_{name}";
        m_Materials.Add(name, mat);
        return mat;
    }
}

public class CardMaterialMgr : RK_Singleton<CardMaterialMgr>
{
    private Dictionary<CardMaterialGroupNameDefine, CardMaterialGroup> m_CardMaterialGroupMap = new Dictionary<CardMaterialGroupNameDefine, CardMaterialGroup>();

    public CardMaterialMgr()
    {
        for (int i = 0; i < (int)CardMaterialGroupNameDefine.Max; i++)
        {
            var define = (CardMaterialGroupNameDefine)i;
            var group = new CardMaterialGroup(define);
            m_CardMaterialGroupMap.Add(define, group);
        }
    }

    public CardMaterialGroup GetCardMaterialGroup(CardMaterialGroupNameDefine define)
    {
        if (m_CardMaterialGroupMap.TryGetValue(define, out var group))
        { 
            return group;
        }

        return null;
    }
}


通过材质管理 使同一类型状态使用同一个材质,使其符合合批条件或则GUP Instance条件


首页 我的博客
粤ICP备17103704号