4

この質問は、Unity ゲーム エンジンのみに関するものです。

これは、薄い 3D オブジェクトである、いわゆる Unity の「スプライト」 (Unity Sprite クラス)の視覚的な例です。

ここに画像の説明を入力 ここに画像の説明を入力

AABB が表示されます (緑色の線)。Unity では、GPU から離れたライブ AABB は.bounds( doco ) を介して提供されます。CG初心者ならAABBの説明

(注、Unity の「ローカル」( docodoco ) は、親オブジェクトのクォータニオンを意味します。「ワールド」は、シーン オブジェクトのクォータニオンを意味します。)

今!Unity エンジニア向けの記事:

通常 Unity では、可視オブジェクトを使用して、Unity Boundsを取得する場合、

ワールド空間でそれらが必要な場合は、ユニティ境界renderer.boundsをワールド空間で返します。

ローカル空間でそれらが必要な場合は、ローカル空間でUnity Boundsmesh.boundsを返します。

これは Unity の基本であり、常に行っています。でも。新しいスプライトでは、つまり、私の知る限り、メッシュへの実際のアクセスはSpriteRendererありません。

(実際には .triangles を取得できますが、そこから巻線とサイズを再構築するのは非常に面倒です。)

では、スプライトのローカル Unity Boundsを取得するにはどうすればよいでしょうか?

sprite.bounds(それ自体はまったく同じであることに注意してください。それはrenderer.bounds役に立ちません。)

4

1 に答える 1

6

を探していると思います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);
    }
}

例

変換のプロパティが変更されても、SpriteRenderer.sprite.bounds の値は変更されないことに注意してください。これらの値はローカル座標にあります。

于 2016-03-29T18:19:24.287 に答える