- Home /
Can't create a 2D sprite with Sprite.Create when creating texture in code
I've been having problems with the Sprite.Create function lately. I'm using C# to program a box with a border that can stretch and change size, but I didn't want the white border to stretch. I tried to create my own texture, and when I printed out the values of some pixels, it seemed like that worked fine. But when I used the texture for Sprite.Create, it didn't work and just showed a gray square. Here is the code:
void updateSprite(){
transform.localScale = new Vector3 (scale.x, scale.y, 0);
SpriteRenderer rend = GetComponent<SpriteRenderer>();
Texture2D tex = new Texture2D ((int)(100*scale.x), (int)(100*scale.y));
for (int y = 0; y < tex.height; y++) {
for(int x = 0; x < tex.width; x++){
if(y < 2 || x < 2 || y >= tex.height-2 || x >= tex.width-2){
tex.SetPixel(x, y, Color.white);
}else{
tex.SetPixel(x, y, Color.black);
}
}
}
print (tex.GetPixel (0, 0) + "," + tex.GetPixel(3, 3) + "," + tex.GetPixel(tex.width-1, tex.height-1));
Sprite spr = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f));
rend.sprite = spr;
}
The scale variable is a Vector2 that I can change before drawing the sprite so it doesn't stretch. Thanks for your help.
not sure why your texture is not right, but alternatively your could make one using https://docs.unity3d.com/$$anonymous$$anual/9SliceSprites.html
Answer by bcapdevila · May 30, 2017 at 03:44 PM
You need to make a call to texture.Apply()
to make changes effective. Then, it will show the good image instead of grey. I tested your code.
Your answer
Follow this Question
Related Questions
Texturing custom 2d sprite 0 Answers
How do I fill a Texture2D with pixels and display a sprite with that texture using script? 1 Answer
Changing one keyframe in my animation changes all of them 2 Answers
Displaying Prefab Sprite as Texture on GUI Elements 0 Answers
Loading images from AssetBundle 1 Answer