2017-05-23 35 views
0

我发现一些有趣的关于统一Sprite和纹理(Texture2D)。我制作了一个50x50 .png,并通过附加到GameObject并使用SpriteRenderer将其渲染到Unity中。团结正确雪碧/纹理宽度高度

我意识到什么,每当我称之为统一相关方法(sprite.texture.widthsprite.rect.widthsprite.textureRect.width等),它总是返回50.但是,图像的实际大小变成24×24 12×12或根据该决议我屏幕。

当然,这并不是什么大惊喜,因为投影等是在Unity在屏幕上渲染东西之前应用的;然而,有趣的部分我找不到任何方法或简单的方法来获得应用投影后的Sprite的大小。

我仍然可以制作自己的投影以提供相关的尺寸;不过,我想知道是否有更简单的方法来获取这些信息。

谢谢!

+0

那是......不是一个容易回答的问题。图像可以在应用比例等的变换内。但是,您可以*从场景单位转换为屏幕坐标。所以如果你知道角落的位置,你可以通过'Camera.main.WorldToScreenPoint(corner)'来计算。 – Draco18s

+0

我可能错了,但渲染图像的“实际”大小取决于屏幕分辨率,相机大小和精灵的PPU值。 –

+0

@ Draco18s它运行不正常。我尝试了sprite.rect.max到世界空间,它返回(-7.3,-4.0),而不是(-4.166,-4.166) – ciyo

回答

0

@Draco18s提到的方式似乎是解决这个问题的唯一方法。

所以,我装箱一个PrefabGameObjectRectTransformSpriteRenderer,并得到了宽度和高度如下:

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;