首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Canvas rect中检查UI rect

如何在Canvas rect中检查UI rect
EN

Stack Overflow用户
提问于 2020-07-10 13:00:02
回答 1查看 119关注 0票数 3

如何在画布rect中检查UI rect?

rect.contains(Vector2) is Vector2...

rect.overlaps(Rect)不会为false,除非它完全在外部...

代码语言:javascript
复制
void Update()
{
    Vector2 pos;
    var screenPos = Camera.main.WorldToScreenPoint(targetTransform.position + offset);
    RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRectTransform, screenPos, uiCamera, out pos);
    if (!CheckInsideRect(myRectTransform.rect,canvasRectTransform.rect))
    {
        myRectTransform.localPosition = pos;
    }
}

我想要得到的结果

EN

回答 1

Stack Overflow用户

发布于 2020-07-10 14:14:18

您可以通过使用一些扩展方法来“手动”完成此操作,例如

代码语言:javascript
复制
public static class RectTransformExtensions
{
    ///<summary>
    /// Returns a Rect in WorldSpace dimensions using <see cref="RectTransform.GetWorldCorners"/>
    ///</summary>
    public static Rect GetWorldRect(this RectTransform rectTransform)
    {
        // This returns the world space positions of the corners in the order
        // [0] bottom left,
        // [1] top left
        // [2] top right
        // [3] bottom right
        var corners = new Vector3[4];
        rectTransform.GetWorldCorners(corners);

        Vector2 min = corners[0];
        Vector2 max = corners[2];
        Vector2 size = max - min;
 
        return new Rect(min, size);
    }
 
    ///<summary>
    /// Checks if a <see cref="RectTransform"/> fully encloses another one
    ///</summary>
    public static bool FullyContains (this RectTransform rectTransform, RectTransform other)
    {       
        var rect = rectTransform.GetWorldRect();
        var otherRect = other.GetWorldRect();

        // Now that we have the world space rects simply check
        // if the other rect lies completely between min and max of this rect
        return rect.xMin <= otherRect.xMin 
            && rect.yMin <= otherRect.yMin 
            && rect.xMax >= otherRect.xMax 
            && rect.yMax >= otherRect.yMax;
    }
}

请参阅RectTransform.GetWorldCorners

所以你可以像这样使用它

代码语言:javascript
复制
if (!canvasRectTransform.FullyContains(myRectTransform))
{
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62827599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档