三流豆腐。

三流のゲームプログラマ。C/C++/C#/Objective-C/python/技術向上を目指します。

【Unity】recttransformから幅、高さをとるには?

recttransformから幅、高さをとるには?

recttransformから幅、高さを取りたいと思うことは多いと思います。

sizeDeltaを使用して取得していましたが、Anchorの設定がstretchの際に正常に値が取得出来なかったのでご紹介します。

下記記事を参考にさせていただきました。

http://sprfield.hatenablog.jp/entry/2017/03/19/233623

Unityバージョン:Unity 2018.3.13f1

 

比較

手順

①width:720 height:1080のScreenを用意

②width:100 heigh:100 Anchor:stretchのImageを用意

③sizeDelta、rectをDebug.Log()で確認

f:id:tofu_doon:20190502113159p:plain

 

参考記事にもありましたが、rectだと正常に幅、高さが取得出来ていますね。

一方、sizeDeltaの値はおかしいですね……。

Screenの幅、高さからImageの幅高さを引くと確かに(620,980)にはなりますが、Logに出力されている値のマイナスはどこからきたものなのでしょう……。

f:id:tofu_doon:20190502113454p:plain

 

色々探していると、下記記事で原因がわかりました。

https://codeday.me/jp/qa/20190320/440891.html

AnchorがstretchなのでAnchor間の幅、高さはCanvasと同じになります。

CanvasはScreenと同じ大きさなので(720,1080)。

(Imageの幅、高さ) - (Anchor間の幅、高さ) = sizeDelta

(100,100) - (720,1080) = (-620,-980)

こういうことだったんですね。

 

まとめ

・幅、高さを取るにはrecttransform.rect

・sizeDeltaは(オブジェクトの幅、高さ) - (アンカー間の幅、高さ)

Unityのドキュメントも確認していましたが、ちょっと分かり辛かったですね。

https://docs.unity3d.com/ja/current/ScriptReference/RectTransform-sizeDelta.html