Unity получает фактическую высоту отображаемого спрайта в пользовательском интерфейсе изображения

#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