web-dev-qa-db-ja.com

RectTransformでsizeDeltaを計算する方法は?

カスタムレイアウトに必要なカスタムコンテンツフィッターを作成します。そのため、RectTransform.sizeDeltaプロパティは、アンカーが同じではないが、この値を示す値を取得できません。
Unity3D API 参照は必要ありません。それを読んで、何も書かれていません。

アンカー間の距離に対するこのRectTransformのサイズ。アンカーが一緒になっている場合、sizeDeltaはsizeと同じです。アンカーが親の4つの角のそれぞれにある場合、sizeDeltaは、四角形が親と比較してどれだけ大きいか小さいかです。

誰もが通常の言語でそれが何を意味するのか説明できますか?そして、アンカーが同じではないときに手動で計算するにはどうすればよいですか?

12
Шах

実際、この定義はやや混乱しています。

sizeDeltaは、基本的に、UI要素の実際の長方形とアンカーで定義された長方形の差を返します。

たとえば、300x200の長方形が与えられた場合:

長方形の角と同じ場所にあるアンカー:sizeDeltaは(0,0) enter image description here

長方形の半分の幅の左右のアンカー:sizeDeltaは(150,0) enter image description hereenter image description here

ポイント内の4つのアンカーすべて:sizeDeltaは(300,200)(つまり、長方形と同じサイズ) enter image description hereenter image description here

ご覧のように、それはまったく関係ありませんwhereアンカーによって定義された長方形の中心は、重要なのは違いだけです要素の長方形とアンカーの長方形の幅と高さの間。

擬似コードでは、次のようになります。

sizeDelta.x = UIElementRectangle.width - AnchorsRectangle.width;
sizeDelta.y = UIElementRectangle.height - AnchorsRectangle.height;

したがって、UIの長方形の寸法がアンカーの寸法よりも大きい場合、sizeDeltaは正であり、小さい場合、sizeDeltaは負です。

26
Galandil

sizeDelta:検索を行った場合、GetComponent()。sizeDelta.yのように、sizeDeltaの意味を説明するためにここで終了します。マインド。

大きなCANVASの上に置かれた小さなパネルを視覚化します。これは親オブジェクトです。 PANELのRect Transformコンポーネントには、2つの長方形が定義されています:

(a)アンカーによって定義された長方形。それらの三角形。通常、親オブジェクトの場所と次元、この場合はCANVASに関連しています。

(b)独自のサイズ、パネルの独自の寸法で定義された長方形。

sizeDelta =(b) a)

それでおしまい。通常、ボタンのようなインタラクティブなコンポーネントは、パネルのような静止しているオブジェクトに比べてサイズが小さいため、通常、sizeDeltaは負の値です。ボタンサイズ-パネルサイズ=通常は負の値。一般的な設計理論で使用されているネガティブスペースという用語を知っていますか?パネル上にあるボタンで使用されていないスペースと考えてください。

例:パネル、つまりカメラオーバーレイであるキャンバスの子、つまり画面サイズの高さを見つける方法。パネルのアンカーは、キャンバスの寸法に関連しています。スクリプトはPanelオブジェクト上にあります。

panelHeight = Screen.height + this.GetComponent()。sizeDelta.y;

通常、sizeDeltaは負であるため、この擬似コードのようになります。

panelHeight = Screen.height-this.sizeDelta.y

これがお役に立てば幸いです。しばらく私を夢中にさせました。乾杯!

参照:

---(https://www.youtube.com/watch?v=VhGxKDIKRvc

https://www.youtube.com/watch?v=FeheZqu85WI

4
Marco António