使图片的长宽与屏幕相适应,更大的尺寸/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”
当您使用 RecTransform
和 localScale
时,您正在使用 RawImage
或 Image
来显示此纹理。不要尝试调整它的大小,只需使用 anchors
.
由于它们在检查器中出现在带有一些箭头的小方框内,因此在此处形成它们更容易。您是否希望此图像不占据全屏?如果您希望它始终占据全屏,我可以为此添加一个解决方案,但这里有一个代码解决方案将强制您的 Image
或 RawImage
占据全屏,而不管给出的图像。
[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
组件适合您的屏幕,并且 OIImg
的 Image
或 RawImage
是它的直接子项,图像就会扩展到 Canvas
.
我有一个下载图片的脚本 我希望图像的高度和宽度与屏幕匹配
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”
当您使用 RecTransform
和 localScale
时,您正在使用 RawImage
或 Image
来显示此纹理。不要尝试调整它的大小,只需使用 anchors
.
由于它们在检查器中出现在带有一些箭头的小方框内,因此在此处形成它们更容易。您是否希望此图像不占据全屏?如果您希望它始终占据全屏,我可以为此添加一个解决方案,但这里有一个代码解决方案将强制您的 Image
或 RawImage
占据全屏,而不管给出的图像。
[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
组件适合您的屏幕,并且 OIImg
的 Image
或 RawImage
是它的直接子项,图像就会扩展到 Canvas
.