RectTransform
親の RectTransform 内に重複を考慮せずに、ランダムに配置した場合は 下図のように重複してしまう場合がある そのため、重複しないようにランダムに配置するスクリプトを作成した これにより、上図のように配置することができる もちろん、配置する数が多す…
Content Size Fitter や LayoutGroup などを使っていると、Inspector の値を変更できなくなる これを実現するためには、DrivenRectTransformTracker を利用する DrivenRectTransformTracker は 登録した RectTransform の値を Inspector で変更できなくし ス…
ContentSizeFitter 等を利用した RectTransform では サイズを確定させるためには 1フレーム待つ必要があります もし、待ちを無くす場合は以下のどちらかのメソッドを呼び出すことで 1フレームの待ちをせずサイズを確定させることができます Canvas.ForceUpd…
UI 上に 3D モデルを出したい際には RenderTexture を利用したりするが、 メモリを食ってしまったり、汚かったりする その場合、UI 上に映るように 3D モデル を別カメラで写してやることがある この際に UI の位置が変わるたびに、カメラの Rect を調整する…
hacchi-man.hatenablog.com の記事に内容を追加して拡張メソッドとして利用できるようにしたものです GetWorldCorners を利用すると RectTransform の4角の座標を取得することができる この際に Canvas の RenderMode が Overlay じゃない場合は、座標変換が…
RectTransform の Rect を取得するには、 Canvas が Overlay 以外の場合 Camera が必要になり、自前で取得処理をする必要がある それが面倒だったので PointerEventData の enterEventCamera を利用して楽に Rect を取得する public static class RectTransf…
public static Vector2 GetCenterPosition(RectTransform rect) { var position = rect.transform.position; // 真ん中Pivotじゃなければ真ん中を計算する if (rect.pivot != new Vector2(0.5f, 0.5f)) { var scaleX = rect.transform.lossyScale.x; var sca…
RectTransform の位置を取得するとPivot に応じた位置が取得できる たまに Pivot (0.5, 0.5) の場合の位置を取得したい場合に利用できます using UnityEngine; public static class RectTransformExtension { public static Vector3 CenterPosition(this Rec…
RectTransform から Bounds を取得し、Bounds を用いて判定を行うことで範囲内かどうか知ることができます RectTransformUtility.CalculateRelativeRectTransformBounds を利用することで Bounds が取得できますが、 これは子供の RectTransfrom も対象にし…
RectTransform で サイズを変えた際に子供のサイズも同じように変えたい場合 Stretch に変えるだけでは下図のように子供のサイズが想定しないようになります 左:もともと 右:サイズを10倍してスケールを1/10にしたもの これを解決するには Anchors を調整しL…
RectTransform を Scale した場合 Pivot の位置から Scaleされるので Pivot (0.5, 0.5) 以外の場合変な Scale 処理になってしまう なので Scale処理の間は Pivot を (0.5, 0.5) にして終わったら Pivot を戻すことでいい感じに Scaleさせることができる 単純…
UI を作成している際に親の RectTransform の Rect を見つつ作業したいが 基本的には選択しているものしか範囲がわからないので UI を作りづらい これの解決方法として、編集する RectTransform 選択時親の Rect を描画することにする RectTransform の Rect…