团结正确雪碧/纹理宽度高度
问题描述:
我发现一些有趣的关于统一Sprite
和纹理(Texture2D
)。我制作了一个50x50 .png
,并通过附加到GameObject
并使用SpriteRenderer
将其渲染到Unity中。团结正确雪碧/纹理宽度高度
我意识到什么,每当我称之为统一相关方法(sprite.texture.width
,sprite.rect.width
,sprite.textureRect.width
等),它总是返回50.但是,图像的实际大小变成24×24 12×12或根据该决议我屏幕。
当然,这并不是什么大惊喜,因为投影等是在Unity在屏幕上渲染东西之前应用的;然而,有趣的部分我找不到任何方法或简单的方法来获得应用投影后的Sprite
的大小。
我仍然可以制作自己的投影以提供相关的尺寸;不过,我想知道是否有更简单的方法来获取这些信息。
谢谢!
答
@Draco18s提到的方式似乎是解决这个问题的唯一方法。
所以,我装箱一个Prefab
GameObject
含RectTransform
和SpriteRenderer
,并得到了宽度和高度如下:
GameObject twoSide = Instantiate(Resources.Load(mFilePath + "Locater")) as GameObject;
twoSide.GetComponent<RectTransform>().position = Camera.main.ScreenToWorldPoint (new Vector3 (0, 0, 1));
twoSide.GetComponent<RectTransform>().pivot = new Vector2 (0f, 0f); // RectTransform should have the same pivot location with Sprite
float width = twoSide.GetComponent<RectTransform>().offsetMax.x - twoSide.GetComponent<RectTransform>().offsetMin.x;
float height = twoSide.GetComponent<RectTransform>().offsetMax.y - twoSide.GetComponent<RectTransform>().offsetMin.y;
那是......不是一个容易回答的问题。图像可以在应用比例等的变换内。但是,您可以*从场景单位转换为屏幕坐标。所以如果你知道角落的位置,你可以通过'Camera.main.WorldToScreenPoint(corner)'来计算。 – Draco18s
我可能错了,但渲染图像的“实际”大小取决于屏幕分辨率,相机大小和精灵的PPU值。 –
@ Draco18s它运行不正常。我尝试了sprite.rect.max到世界空间,它返回(-7.3,-4.0),而不是(-4.166,-4.166) – ciyo