如何通过脚本切片精灵?(不使用编辑器)

우원진*_*우원진 4 c# unity-game-engine

我尝试通过脚本切片 Sprite(类型转换为Texture2D),

当项目在Android或IOS平台上运行时

通过脚本可以吗?

我尝试使用 UnityEditor 类,它可以在计算机上使用

但是当我尝试构建 Android 或 IOS 时却失败了。

    void OnPreprocessTexture()
    {
        TextureImporter textureImporter = (TextureImporter)assetImporter;
        textureImporter.textureType = TextureImporterType.Sprite;
        textureImporter.spriteImportMode = SpriteImportMode.Multiple;
        textureImporter.mipmapEnabled = false;
        textureImporter.filterMode = FilterMode.Point;

    }

    public void OnPostprocessTexture(Texture2D texture)
    {
        Debug.Log("Texture2D: (" + texture.width + "x" + texture.height + ")");



        int spriteSize = 350;
        int colCount = texture.width / spriteSize;
        int rowCount = texture.height / spriteSize;

        List<SpriteMetaData> metas = new List<SpriteMetaData>();

        for (int r = 0; r < rowCount; ++r)
        {
            for (int c = 0; c < colCount; ++c)
            {
                SpriteMetaData meta = new SpriteMetaData();
                meta.rect = new Rect(c * spriteSize, r * spriteSize, spriteSize, spriteSize);
                meta.name = c + "-" + r;
                metas.Add(meta);
            }
        }

        TextureImporter textureImporter = (TextureImporter)assetImporter;
        textureImporter.spritesheet = metas.ToArray();
    }

    public void OnPostprocessSprites(Texture2D texture, Sprite[] sprites)
    {
        Debug.Log("Sprites: " + sprites.Length);
    }
Run Code Online (Sandbox Code Playgroud)

在 Android 或 IOS 上运行项目时不起作用

[我想要的是]

程序

在Android或IOS平台上运行时

1)从服务器接收一些图像(URL或文件)

2) 在C#脚本上加载图像

3) 将图像类型更改为纹理或精灵等...

4)切片图像(不要使用编辑器)

5) 保存图像片段

6)使用一张图像

我想要的是所有程序都由脚本完成

der*_*ugo 5

TextureImporter属于UnityEditor命名空间,该命名空间不存在于构建的应用程序中,而仅存在于 Unity 编辑器本身中。\xe2\x86\x92 你不能使用这个!

\n
\n

您可以做的是使用 Sprite.Create给定的 生成精灵Texture2D

\n

裁剪

\n

如果实际上只是剪切纹理的某个部分以将其用作精灵,那么您只需在参数中定义rect要从该图像使用的纹理部分。

\n
// Wherever you get the texture from\nTexture texture = ...;\n       \n// E.g. for using the center of the image\n// but half of the size\nvar rect = new Rect(texture.width / 4, texture.height / 4, texture.width / 2, texture.height / 2);\n\n// Create the sprite\nvar sprite = Sprite.Create(texture, rect, Vector2.one * 0.5f);\n
Run Code Online (Sandbox Code Playgroud)\n

哪儿rect

\n
\n

精灵在原始纹理上的位置,以像素为单位指定。

\n
\n
\n

切片

\n

如果您还想要一个切片边框(通常在Sprite EditorUnity 中定义),则有一个重载,Sprite.Create它还需要一个border参数,例如

\n
var borders = new Vector4(2, 2, 2, 2);\nvar sprite = Sprite.Create(texture, rect, Vector2.one * 0.5f, 100, SpriteMeshType.FullRect, borders);\n
Run Code Online (Sandbox Code Playgroud)\n

在哪里border

\n
\n

返回精灵的边框大小。

\n
\n
\n

X=左,Y=底部,Z=右,W=顶部。

\n
\n

API 没有说,但我猜想rect这些值也以像素为单位。

\n