Image Unity新用户界面:GUI.DrawTexture ScaleAndCrop等效

Image Unity新用户界面:GUI.DrawTexture ScaleAndCrop等效,image,unity3d,unity3d-gui,Image,Unity3d,Unity3d Gui,我想用Unity(2D)实现一个图像库。我有一个画布,逻辑上划分为100×100个单位的正方形。然后: 每个“正方形”由从中动态下载的图像填充 互联网(使用www类) 图像不一定是正方形的:在这种情况下,我想“缩放并裁剪图像”:保留纵横比,图像填充整个正方形 当用户单击一个正方形时,图像会在屏幕上扩展到其自然大小 屏幕的中间。再单击一次,图像将返回到 正方形大小/位置 每隔一段时间,取一个正方形 随机生成,其图像被新图像替换 我对Unity还不熟悉,我已经尝试了很多不同的方法。我真正的问题是

我想用Unity(2D)实现一个图像库。我有一个
画布
,逻辑上划分为100×100个单位的正方形。然后:

  • 每个“正方形”由从中动态下载的图像填充 互联网(使用www类)
  • 图像不一定是正方形的:在这种情况下,我想“缩放并裁剪图像”:保留纵横比,图像填充整个正方形
  • 当用户单击一个正方形时,图像会在屏幕上扩展到其自然大小 屏幕的中间。再单击一次,图像将返回到 正方形大小/位置
  • 每隔一段时间,取一个正方形 随机生成,其图像被新图像替换
我对Unity还不熟悉,我已经尝试了很多不同的方法。我真正的问题是规模和收成。事实上:

  • Gui.DrawTexture()
    接受一个参数
    scaleMode.ScaleAndCrop
    ,这正是我需要的。但这是旧用户界面系统的一部分
  • 新的UI提供了
    Image
    rawmimage
    Gui组件,但我们可以保留纵横比或填充正方形,而不是两者兼而有之
  • 我试图通过将一个正方形的像素复制到一个新的纹理中来创建一个“纹理缩略图”。它可以工作,但缩略图和全尺寸图像之间的动画不再可能

我确信有一种方法可以使用新的UI功能并获得缩放和裁剪效果,但我不知道如何实现。有人能给我一个建议吗?

您需要使用图像组件缩放游戏对象,以及使用遮罩组件

我会这样做:

使用GridLayoutGroup创建画布,该画布将根据需要组织缩略图图像(3行3列等)

每个图像都有一个带有掩码的父游戏对象,该掩码将使用GridLayoutGroup设置。掩码的子级将是一个图像,您将在其中显示下载的内容

在您选择的控制器中有对每个图像组件的引用

image1是对第一个缩略图的引用

下载图像时,将其制作的精灵指定给image1.Sprite

调用image1.SetNativeSize()

检查fimage1.GetComponent().sizeDelta(这是宽度和高度),并根据图像大小缩放图像1,同时考虑将其放入遮罩边框。你需要一些基本的数学小算法

image1还有一个按钮组件,该组件附带了OnClick事件,该事件将触发“showmagepressed(Image img)”等消息。参数是image1的图像


启动此处理程序后,通过image1.transform.parent.GetComponent().enabled=false禁用掩码,并缩放图像1,将其移动到中心。

自动缩放和裁剪行为的最简单方法是向包含图像的游戏对象添加一个AspectRatioFitter。将AspectMode设置为信封父项。这样,Unity将填充,如果需要,将与父级重叠,请参见:

封套父对象:自动调整宽度、高度、位置和定位,使矩形覆盖父对象的整个区域,同时保持纵横比。此rect可能比父rect扩展得更远


然后,可以将遮罩添加到父对象以隐藏不需要的覆盖(不要忘记也添加空图像,否则遮罩将无法工作)。在脚本中,您可能需要处理的唯一一件事是找到图像的正确纵横比。

简而言之,您所说的只是缩放遮罩而不是图像?但如何让“缩略图”并排出现,没有边界?在此解决方案中,我们将看到遮罩边框,因此这与使用图像集键入填充/保持纵横比相同。还是我误解了?好吧,我看了一下UI掩码元素。糟糕的是,它实际上可以工作。我会试着给你回电话。无论如何谢谢你!