Unity Correct Sprite/Texture 宽高
Unity Correct Sprite/Texture Width Height
我发现了一些关于 Unity Sprite
和纹理 (Texture2D
) 的有趣内容。我创建了一个 50x50 .png
并通过附加到 GameObject
并使用 SpriteRenderer
.
在 Unity 中渲染它
我意识到,每当我调用 Unity 相关方法(sprite.texture.width
、sprite.rect.width
、sprite.textureRect.width
等)时,它总是 return 50。但是,图像的实际大小变成 24x24 或 12x12,具体取决于我屏幕上的分辨率。
当然,这并不奇怪,因为投影等是在 Unity 渲染屏幕上的东西之前应用的;然而,有趣的是,在应用投影后,我找不到任何方法或简单的方法来获取 Sprite
的大小。
我仍然可以通过自己的投影来得出相关的尺寸;但是,我想知道是否有更简单的方法来获取这些信息。
谢谢!
@Draco18s 提到的方法似乎是解决这个问题的唯一方法。
所以,我创建了一个包含 RectTransform
和 SpriteRenderer
的 Prefab
GameObject
,得到的宽度和高度如下:
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;
我发现了一些关于 Unity Sprite
和纹理 (Texture2D
) 的有趣内容。我创建了一个 50x50 .png
并通过附加到 GameObject
并使用 SpriteRenderer
.
我意识到,每当我调用 Unity 相关方法(sprite.texture.width
、sprite.rect.width
、sprite.textureRect.width
等)时,它总是 return 50。但是,图像的实际大小变成 24x24 或 12x12,具体取决于我屏幕上的分辨率。
当然,这并不奇怪,因为投影等是在 Unity 渲染屏幕上的东西之前应用的;然而,有趣的是,在应用投影后,我找不到任何方法或简单的方法来获取 Sprite
的大小。
我仍然可以通过自己的投影来得出相关的尺寸;但是,我想知道是否有更简单的方法来获取这些信息。
谢谢!
@Draco18s 提到的方法似乎是解决这个问题的唯一方法。
所以,我创建了一个包含 RectTransform
和 SpriteRenderer
的 Prefab
GameObject
,得到的宽度和高度如下:
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;