#image #unity3d #height #sprite
#изображение #unity3d #высота #спрайт
Вопрос:
У меня есть изображение в пользовательском интерфейсе, и «Сохранить соотношение сторон» для его спрайта верно, поэтому в зависимости от спрайта, прикрепленного к изображению, спрайт может не охватывать всю прямоугольную часть изображения, я хочу получить реальную высоту отображаемого спрайта, чтобы я мог его применитьв прямоугольную форму преобразуйте высоту изображения и сделайте так, чтобы они имели одинаковую высоту
Ответ №1:
Я получил решение, помните, что это работает с «сохранением аспекта», разрешенным для компонента изображения. эта функция получает желаемую высоту в соответствии с указанной шириной и размером текстуры спрайта на изображении.
/// <summary>
/// Get the height of an image according to the rendered sprite and the desired width(if is not specified, it will take the width of the own image's recTransform)
/// </summary>
public static float GetDesiredHeigth(this Image img, float desiredWidth = default)
{
RectTransform ImageRect = img.GetComponent<RectTransform>();
float _bodyWidth = desiredWidth == default ? ImageRect.rect.width : desiredWidth;
float _imageWidth = (float)img.sprite.texture.width;
float _imageHeight = (float)img.sprite.texture.height;
float _ratio = _imageWidth / _imageHeight;
float _expectedHeight = _bodyWidth / _ratio;
return _expectedHeight;
}
Таким образом, вы можете использовать его следующим образом:
public Image image;
private void AdjustImageSizeToTextureRendered()
{
float desiredHeigth = image.GetDesiredHeigth();
image.rectTransform.sizeDelta = new Vector2(image.rectTransform.sizeDelta.x, desiredHeigth);
}
Ответ №2:
Вы можете получить высоту спрайта в пикселях, используя rect
field — это возвращает Location of the Sprite on the original Texture, specified in pixels.
, что означает, что это будет работать и для SpriteAtlas.
Vector2 size = myImage.sprite.rect.size;
//or
float width = myImage.sprite.rect.width;
float height = myImage.sprite.rect.height;
Комментарии:
1. Спасибо за комментарий !, Я уже пробовал, но он возвращает мне ту же высоту, что и текущее изображение: c