C# 改变精灵纹理像素会产生巨大的灰色方块

C# 改变精灵纹理像素会产生巨大的灰色方块,c#,unity3d,C#,Unity3d,我有一个32x32的精灵,我试图访问和修改的像素数据 要做到这一点,我只需获取精灵的纹理,基于旧纹理创建新纹理,然后更改新纹理的像素值。然后,我用修改后的纹理创建一个新的精灵,并将SpriteRenderer的sprite参数更改为新精灵 然而,当我实际运行我的脚本时,我得到的是一个巨大的灰色正方形,很容易是原来32x32精灵的10倍大小。我对unity很陌生,所以我不知道为什么会发生这种情况。任何洞察都会很好 private Sprite sprite; private Tex

我有一个32x32的精灵,我试图访问和修改的像素数据

要做到这一点,我只需获取精灵的纹理,基于旧纹理创建新纹理,然后更改新纹理的像素值。然后,我用修改后的纹理创建一个新的精灵,并将SpriteRenderer的sprite参数更改为新精灵

然而,当我实际运行我的脚本时,我得到的是一个巨大的灰色正方形,很容易是原来32x32精灵的10倍大小。我对unity很陌生,所以我不知道为什么会发生这种情况。任何洞察都会很好

    private Sprite sprite;
    private Texture2D texture;


    // Use this for initialization
    void Start ()
    {
        sprite = this.gameObject.GetComponent<SpriteRenderer>().sprite;
        texture = sprite.texture;
        Texture2D newTexture = modifyTexture(texture);

        SpriteRenderer sr = this.gameObject.GetComponent<SpriteRenderer>();
        sr.sprite = Sprite.Create(newTexture, new Rect(0, 0, newTexture.width, newTexture.height), new Vector2(0, 0), 10);
    }

    public Texture2D modifyTexture(Texture2D baseTexture)
    {
        Texture2D newTexture = new Texture2D(baseTexture.width, baseTexture.height);

        int x = 0;
        while(x < newTexture.width)
        {
            int y = 0;
            while(y < newTexture.height)
            {
                Color currentPixel = baseTexture.GetPixel(x,y);
                Color modifiedPixel = currentPixel;
                modifiedPixel.r = (float)(modifiedPixel.r + 0.10);
                modifiedPixel.b = (float)(modifiedPixel.b + 0.10);
                modifiedPixel.g = (float)(0.10);
                newTexture.SetPixel(x, y, modifiedPixel);
                y++;
            }
            x++;
        }

        Debug.Log(newTexture.GetPixel(5, 5).ToString());
        return newTexture;
    }
私人精灵;
私有纹理2D纹理;
//用于初始化
无效开始()
{
sprite=this.gameObject.GetComponent().sprite;
纹理=精灵纹理;
Texture2D newTexture=修改纹理(纹理);
spriteender sr=this.gameObject.GetComponent();
sr.sprite=sprite.Create(newTexture,newrect(0,0,newTexture.width,newTexture.height),newvector2(0,0,10);
}
公共纹理2D modifyTexture(纹理2D基本纹理)
{
Texture2D newTexture=新纹理2d(baseTexture.width,baseTexture.height);
int x=0;
而(x
修改纹理像素后,必须调用函数将修改后的像素上载到图形卡

public Texture2D modifyTexture(Texture2D baseTexture)
{
    Texture2D newTexture = new Texture2D(baseTexture.width, baseTexture.height);

    int x = 0;
    while (x < newTexture.width)
    {
        int y = 0;
        while (y < newTexture.height)
        {
            Color currentPixel = baseTexture.GetPixel(x, y);
            Color modifiedPixel = currentPixel;
            modifiedPixel.r = (float)(modifiedPixel.r + 0.10);
            modifiedPixel.b = (float)(modifiedPixel.b + 0.10);
            modifiedPixel.g = (float)(0.10);
            newTexture.SetPixel(x, y, modifiedPixel);
            y++;
        }
        x++;
    }
    //Upload changes to Graphics graphics card
    newTexture.Apply();

    Debug.Log(newTexture.GetPixel(5, 5).ToString());
    return newTexture;
}
public Texture2D modifyTexture(Texture2D baseTexture)
{
Texture2D newTexture=新纹理2d(baseTexture.width,baseTexture.height);
int x=0;
而(x
调用
Apply
修复了着色问题,像素现在更新为正确的颜色。然而,新的精灵仍然比原来的大很多,你知道如何解决这个问题吗?当前的问题是如何使用
sprite.Create
。增加或减少当前为
10
的挤出参数。将其更改为80或大约5,然后看看会发生什么。此外,轴点应为
0.5f
而不是
0.0
。可能是这样的:
Sprite.Create(newexture,newrect(0,0,newexture.width,newexture.height),newvector2(0.5f,0.5f),80)
Sprite.Create(newTexture,new Rect(0,0,newTexture.width,newTexture.height),新矢量2(0.5f,0.5f),3)调整挤出参数,直到得到所需的内容挤出参数的具体功能是什么?我早些时候在谷歌上搜索过,但它没有变得更清晰。我的错。它实际上是
pixelsPerUnit
参数,而不是
pixelsPerUnit
。extrude参数位于该参数之后,但此处不需要该参数,您也不使用该参数。文档中说明了pixelsPerUnit是精灵中对应于世界空间中一个单位的像素数。有关参数其余部分的含义,请参见。