1

我正在创建一个益智游戏,它使用 2D 网格生成随机大小的碎片。图像包含透明部分,有时一块是完全透明的。我需要检测一块透明的百分比。我发现这样做的一种方法是逐像素进行。我在这里发布了我的解决方案。但是,这个过程在加载过程中增加了几秒钟,我想避免,我正在寻找其他想法

我考虑过使用 MeshCollider 的选择轮廓来以某种方式获得可以与网格的表面积进行比较的表面积,但我发现的一切都是使用专门的着色​​器渲染轮廓。有没有人有任何想法来解决这个问题?

示例拼图,头顶周围有透明像素。.

在此处输入图像描述

4

1 回答 1

2

1)我想你可以在你的精灵中添加一个 PolygonCollider2D 并使用它的 Path 来绘制轮廓和计算表面积。但是不确定这是否会更快。

PolygonCollider2D.GetPath

路径是定义 Collider 轮廓的点之间的线段循环序列

检查PolygonCollider2D.GetTotalPointCount或路径长度可能足以确定精灵是否为“空”。

Sprite.verticesSprite.triangles也可能有帮助。

2)您还可以提高第一种方法的性能:

  • 而不是像现在那样调用 GetPixel,而是使用 GetPixels 或 GetPixels32 并在一个 for 循环中循环遍历数组。

使用 GetPixels 比重复调用 GetPixel 更快,尤其是对于大型纹理。此外,GetPixels 可以访问单独的 mipmap 级别。对于大多数纹理,更快的是使用 GetPixels32,它返回低精度颜色数据,无需昂贵的整数到浮点数转换。

  • 仅检查每第二个或第 n 个像素,因为它应该足以进行近似
  • 限制类型转换的数量
于 2020-06-11T10:10:16.207 回答