- Home /
What is a good way to create a sprite based on texture?
I have a helper function that sets Image based on texture (I get this texture from phone's photo). Some component I am setting are very small, so I don't really have to create a sprite with the entire resolution.
For example, I have a small Object I am applying the photo on, so for that guy I don't have to Sprite.Create(... (texW, texH)..). I would like to create a smaller version of it (perhaps desiredH and desiredW which I tried) to save loading time.
Is there smart way to do this? Thanks in advance
public void SetImage(Texture2D texture)
{
float texW = texture.width;
float texH = texture.height;
if (constraintHeight)
{
float desiredH = gameObject.GetComponent<RectTransform>().rect.height;
float desiredW = desiredH * texW / texH;
gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2(desiredW, desiredH);
//texW = desiredW;
//texH = desiredH;
}
// Set sprite right away for optimiation; Sprite.Create is the bottleneck
if (ImageToSet)
{
ImageToSet.GetComponent<Image>().sprite = Sprite.Create(texture, new Rect(0.0f, 0.0f, texW, texH), new Vector2(0.5f, 0.5f));
}
else
{
gameObject.GetComponent<Image>().sprite = Sprite.Create(texture, new Rect(0.0f, 0.0f, texW, texH), new Vector2(0.5f, 0.5f));
}
}
Answer by xxmariofer · Sep 15, 2021 at 07:06 AM
if by the best way you mean the most performance way, is not that one, thats a really slow one. Sprite.Create is a really slow method, and also you should avoid using GetComponent, catch at the start both images. using RawImages instead of images would increase the performance by a fairly amount and you avoid using Sprite.Create
Your answer
Follow this Question
Related Questions
Low performance on multiple runtime generated sprites 1 Answer
Performance of 2D Apps on mobile: Optimizations? 0 Answers
png file's inspector is blank! 0 Answers
List and random Sprites? 1 Answer
PNG / image optimization for iPhone 5 Answers