2017-05-23 4 views
0

Ich entdeckte etwas Interessantes über Unity Sprite und Texturen (Texture2D). Ich erstellte einen 50x50 .png und rendere ihn in Unity, indem ich ihn an einen GameObject anschließe und SpriteRenderer verwende.Einheit Korrekt Sprite/Textur Breite Höhe

Was ich realisiert, wenn ich eine Einheit im Zusammenhang Methode aufrufen (sprite.texture.width, sprite.rect.width, sprite.textureRect.width, etc.), es 50. Aber immer wieder zurückkehren, die wirkliche Größe des Bildes verwandelt sich in 24x24 oder 12x12 abhängig von der Auflösung auf meinem Bildschirm.

Natürlich ist dies keine große Überraschung, da die Projektion usw. angewendet wird, bevor Unity die Dinge auf dem Bildschirm rendern kann; jedoch, der interessante Teil konnte ich keine Methode oder einfachen Weg finden, um die Größe der Sprite nach der Projektion angewendet wird.

Ich kann immer noch meine eigene Projektion machen, um mit der zugehörigen Größe zu kommen; Ich würde jedoch gerne wissen, ob es einen einfacheren Weg gibt, diese Informationen zu erhalten.

Vielen Dank!

+0

Das ist ... keine einfache Frage zu beantworten. Das Bild könnte sich in einer Transformation befinden, in der eine Skalierung angewendet wurde usw. Aber Sie * können * von Szeneneinheiten in Bildschirmkoordinaten umwandeln. Wenn Sie also wissen, wo die Ecken sind, können Sie 'Camera.main.WorldToScreenPoint (corner)' daraus berechnen. – Draco18s

+0

Ich könnte mich irren, aber die 'wirkliche' Größe des Bildes, das gerendert wird, hängt von Ihrer Bildschirmauflösung, der Kamera-Größe und dem PPU-Wert des Sprites ab. –

+0

@ Draco18s es funktioniert nicht gut. Ich versuchte mit sprite.rect.max zum Weltraum und es kam (-7.3, -4.0) zurück (-4.166, -4.166) – ciyo

Antwort

0

Der Weg @ Draco18s erwähnt scheint der einzige Weg, um dieses Problem zu lösen.

Also, ich crated eine PrefabGameObject enthält RectTransform und SpriteRenderer, und bekam die Breite und Höhe wie folgt:

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;