首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按脚本分割精灵?(不使用编辑器)

如何按脚本分割精灵?(不使用编辑器)
EN

Stack Overflow用户
提问于 2019-04-18 04:01:09
回答 1查看 6.8K关注 0票数 2

我试着用脚本分割雪碧(Texture2D中的类型),

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

用剧本可以吗??

我试着使用UnityEditor类,这是计算机上的工作

但当我试图构建Android或IOS时,它失败了。

代码语言:javascript
运行
复制
    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);
    }

当在Android或IOS上运行项目时,它无法工作。

我想要的

操作步骤

在Android或IOS平台上运行时

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

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

3)将图像转换为纹理或雪碧等。

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

5)保存图像片段

6)利用图像

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-18 05:26:25

TextureImporter属于UnityEditor名称空间,它不存在于构建的应用程序中,而仅存在于统一编辑器本身中。→你不能用这个!

您可以做的是使用Sprite.Create从给定的Texture2D生成一个sprite。

种植

如果实际上只需要将纹理的某个部分作为sprite使用,那么您只需要在rect参数中定义要从该图像中使用的纹理部分。

代码语言:javascript
运行
复制
// Wherever you get the texture from
Texture texture = ...;
       
// E.g. for using the center of the image
// but half of the size
var rect = new Rect(texture.width / 4, texture.height / 4, texture.width / 2, texture.height / 2);

// Create the sprite
var sprite = Sprite.Create(texture, rect, Vector2.one * 0.5f);

其中,rect

雪碧在原始纹理上的位置,以像素为单位。

切片

如果您还想要一个切片边框(通常是在Sprite Editor中统一定义的),那么Sprite.Create就会过载,这会增加一个border参数。

代码语言:javascript
运行
复制
var borders = new Vector4(2, 2, 2, 2);
var sprite = Sprite.Create(texture, rect, Vector2.one * 0.5f, 100, SpriteMeshType.FullRect, borders);

其中border

返回雪碧的边框大小。X=left,Y=bottom,Z=right,W=top。

API没有这么说,但我想,像rect值一样,这些值也是以像素为单位的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55738954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档