1
Unity Canvasの2つのUIパネルが互いに重なり合っているかどうかを確認する方法を知りたいと思います。UI要素/ RectTransformがオーバーラップしているかどうかをチェック
は現在、私はcanvas要素を比較することによって、これをやっていることはRects
キャンバス設定
- レンダリングモード:画面のスペース - カメラ
- ピクセルパーフェクト:[はい]
- レンダリングカメラを:メインカメラ
- 飛行機の距離:100
- ソートレイヤー:レイヤーのデフォルト
- 受注:0
キャンバススケーラー設定
- UIスケールモード:一定のピクセルサイズ
- スケールファクタ:1
- リファレンスピクセルパー単位:100
コードは、私が
'オーバーラップ' をたまたまBOOLが瞬時にtrueに変更
[Header("Check For Overlap")]
public RectTransform PlayerBar;
public RectTransform LeftBar;
public Rect RectOne;
public Rect RectTwo;
public bool overlapping;
//Check if the two canvas element Rects overlap each other
public void CheckForOverlap()
{
overlapping = false;
// Convert Canvas RectTransforms to World Rects
RectOne = GetWorldRect(LeftBar);
RectTwo = GetWorldRect(PlayerBar);
if (RectOne.Overlaps(RectTwo))
{
overlapping = true;
}
}
public Rect GetWorldRect(RectTransform rt)
{
// Get World corners, take top left
Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners);
Vector3 topLeft = corners[0];
// Rect Size ... I'm not sure if this is working correctly?
Vector2 size = new Vector2(rt.rect.size.x, rt.rect.size.y);
return new Rect(topLeft, size);
}
かどうか確認するために使用しています。
(例えば)などのRectつ戻り
X -7.5、Y 2.5 98.5 W、H 164.1667
ありがとう、これは本当に便利でした。特に拡張メソッドのヒント – Jim