2016-03-29 4 views
4

Diese Frage bezieht sich nur auf die Unity-Spielengine.In Unity, erhalten Sie das Mesh, oder sonst erhalten Sie lokale Grenzen auf einem Sprite?

Hier ist ein visuelles Beispiel für eine sogenannte Unity "Sprite" (Unity Sprite-Klasse), die ein dünnes 3D-Objekt ist.

enter image description hereenter image description here

AABB gezeigt (grüne Linie). In Unity wird Live-AABB von der GPU über (doco) ausgegeben. Wenn neu in CG, explanation of AABB.

(Hinweis, "local" in Unity (doco, doco) bedeutet: in der quaternion des übergeordneten Objekts, "Welt" bedeutet in der quaternion des Szene-Objekts.)

Now! Für alle Unity-Ingenieure zu lesen:

Normalerweise in Unity, mit einem sichtbaren Objekt, wenn Sie die Unity Bounds,

, wenn Sie wollen, dass sich im Welt-Raum erhalten wollen, renderer.bounds gibt die Unity Bounds im Welt-Raum.

Wenn Sie sie im lokalen Raum möchten, gibt mesh.bounds die Unity Bounds im lokalen Raum zurück.

Dies ist ein Grund der Einheit und Sie tun es die ganze Zeit. Jedoch. Mit dem neuen Sprite, also SpriteRenderer, gibt es keinen wirklichen Zugriff auf das Mesh, soweit ich weiß.

(Sie können tatsächlich die .triangles zu bekommen, aber es wäre ein ziemlich mühsam von dort die Wicklung und Größe zu rekonstruieren.)

Wie dann können Sie die lokaleUnity Bounds für einen Sprit bekommen?

(Beachten Sie, dass sprite.bounds selbst ist nur die gleiche renderer.bounds, das nicht hilft.)

+0

Ich verstehe die downvotes nicht. +1 – Programmer

+2

einige Nicht-Unity-Leute haben nicht verstanden, dass eine "Sprite" -Klasse in Einheit ein 3D-Objekt ist. – Fattie

Antwort

5

Ich glaube, Sie suchen SpriteRenderer.sprite.bounds.

public class LogBounds : MonoBehaviour { 
    void OnGUI() { 
     var r = GetComponent<SpriteRenderer>(); 
     GUILayout.Label("SpriteRenderer.bounds center " + r.bounds.center + " size " + r.bounds.size); 
     GUILayout.Label("SpriteRenderer.sprite.bounds center " + r.sprite.bounds.center + " size " + r.sprite.bounds.size); 
    } 
} 

example

Beachten Sie, dass die Werte für SpriteRenderer.sprite.bounds nicht ändern, wie die Eigenschaften der Transformation geändert werden - diese Werte sind in lokalen Koordinaten.

+0

Sorry, aber das ist definitiv falsch. SpriteRenderer.bounds und SpriteRenderer.sprite.bounds geben unterschiedliche Werte zurück. –

+0

Editierte Antwort zum Hinzufügen von Code/Screenshot –

+0

'Sprite' macht' Vertices' 'Dreiecke' und' UV'-Eigenschaften verfügbar, was alles ist, was Sie brauchen, um ein anständiges 'Mesh' zu erstellen. Ich bin nicht sicher, welche anderen maschenartigen Eigenschaften, die Sie interessieren würden, die noch auf einen Sprite anwendbar wären oder nicht leicht abgeleitet werden konnten (z. B. Normale) –