使图片的长宽与屏幕相适应,更大的尺寸/c# unity

Fit the length and width of the image with the screen, larger size / c# unity

我有一个下载图片的脚本 我希望图像的高度和宽度与屏幕匹配

img [1]: https://i.stack.imgur.com/0VcAT.png

图像应以最佳方式呈现给用户 对了,是个看漫画的app

" 我非常努力地以最好的方式传达了这个想法,我希望我成功了^_^ "

感谢帮助

剧本

public IEnumerator GetImage(string url)
{
    UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
    yield return www.SendWebRequest();

    Texture2D myTexture = DownloadHandlerTexture.GetContent(www);


    //خوارزمية تعديل حجم الصورة 
    // Give all 100 of the length or width one number
   for(int i = 1; i < 40;)
   {
       if(i*100 > myTexture.width)
       {
           for(int u = 1; u < 40;)
           {
              if(u*100 > myTexture.height)
              {
                WidthX = i;
                HeightX = u;
                u = 100;
                i = 100;
              } 
               u++;
           }
       }
       i++;
   }

    // After reducing all 100 to one, scale it down to fit the screen
    WidthX = WidthX / 3;
    HeightX = HeightX / 3;

    //Create sprite and set a Width and Height
    Rect rec = new Rect(0, 0, myTexture.width, myTexture.height);
    OImg.sprite = Sprite.Create(myTexture, rec,  Vector2.zero);
    OImg.GetComponent<RectTransform>().localScale = new Vector3 (WidthX,HeightX,1);        
    

}

我通过 (localScale) 更改了图像的大小,我认为这是一个错误

必须修改图像的“Rect Transform Width And Height”

当您使用 RecTransformlocalScale 时,您正在使用 RawImageImage 来显示此纹理。不要尝试调整它的大小,只需使用 anchors.

由于它们在检查器中出现在带有一些箭头的小方框内,因此在此处形成它们更容易。您是否希望此图像不占据全屏?如果您希望它始终占据全屏,我可以为此添加一个解决方案,但这里有一个代码解决方案将强制您的 ImageRawImage 占据全屏,而不管给出的图像。

[SerializeField] private Transform CanvasTransform = null;

private RectTransform OImgRect = null;

private void Start()
{
    OImgRect = OImg.GetComponent<RectTransform>();
}

public IEnumerator GetImage(string url)
{
    ...   
    
    // set your image 
    OImg.sprite = Sprite.Create(myTexture, rec,  Vector2.zero);
    
    // set our parent to the canvas while storing our previous parent
    Transform prevParent = transform.parent;
    
    // set the new parent to the canvas
    transform.SetParent(CanvasTransform, false);
    
    // fit it to screen
    FitToImageToScreen();
    
    // now set it back but using the true parameter to keep our scaling
    transform.SetParent(prevParent, true);
}

private void FitToImageToScreen()
{
    OImgRect.anchorMin = new Vector2(0, 0);
    OImgRect.anchorMax = new Vector2(1, 1);
    OImgRect.pivot = new Vector2(0.5f, 0.5f);   
}

删除您试图使其适合屏幕的所有其他代码。只需使用锚点。如果你想要我正在使用的领域的资源,有 anchorMin, anchorMax and pivot。它们是标准化值 [-1,1],描述了图像将如何适应其父容器。只要您的 Canvas 组件适合您的屏幕,并且 OIImgImageRawImage 是它的直接子项,图像就会扩展到 Canvas .