Как добавить спрайт в спрайтатлас с кодом? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть спрайт и спрайтатлас, оба с «Read / Write Enabled». Я хочу добавить этот спрайт в "Объекты для упаковки" в spriteatlas с кодом. И я нашел это U2D.SpriteAtlasExtensions.Add . Но я не знаю, как его использовать. Вот мой код ниже, но он не работает.

using UnityEngine;
using UnityEditor;
using UnityEngine.U2D;
using UnityEditor.U2D;

public class SpriteAtlasTool : EditorWindow 
{
    [MenuItem("Tools/SpriteAtlasTool")]
    static void DoIt () 
    {
        EditorWindow.GetWindow(typeof(SpriteAtlasTool));
        //EditorUtility.DisplayDialog("MyTool", "Do It in C# !", "OK", "");
    }

    private void OnGUI () 
    {
        if (true == GUILayout.Button("Test to Add")) 
        {
            Debug.Log("AddPic");
            SpriteAtlas temp = Resources.Load<SpriteAtlas>("Sprite Atlas/CharacterHeader/123");
            Sprite a = Resources.Load<Sprite>("TalkFile/ChoiceCenter/325709-130GH0214652");
            Debug.Log("before add  " + temp.spriteCount);
            SpriteAtlasExtensions.Add(temp, new Object[] { a});
            AssetDatabase.Refresh();
            Debug.Log("after add  " + temp.spriteCount);
        }
    }
}

И Консоль

AddPic
before add 0
after add 0

1 Ответ

0 голосов
/ 30 апреля 2020

После добавления новой вещи вам также необходимо сохранить ее обратно в актив ... в настоящее время вы только загружаете ресурсы и вносите изменения, но до тех пор, пока вы не сохраните их, это всего лишь временное значение.

private void OnGUI () 
{
    if (GUILayout.Button("Test to Add")) 
    {
        Debug.Log("AddPic");

        SpriteAtlas temp = Resources.Load<SpriteAtlas>("Sprite Atlas/CharacterHeader/123");
        Sprite a = Resources.Load<Sprite>("/TalkFile/ChoiceCenter/325709-130GH0214652");

        Debug.Log("before add  " + temp.spriteCount);

        SpriteAtlasExtensions.Add(temp, new Object[] { a});

        // save all changed assets (basically the same as CTRL+S)
        AssetDataBase.SaveAssets();

        AssetDatabase.Refresh();
        Debug.Log("after add  " + temp.spriteCount);
    }
}

См. AssetDatabase.SaveAssets.


Примечание: напечатано на смартфоне, но я надеюсь, что идея проясняется

...