当前位置: 首页 > 编程语言 > C#

CheckingifUIElements-RectTransformOverlapping分享

时间:2023-04-10 11:55:17 C#

CheckingifUIElements/RectTransformOverlapping我想知道如何检查UnityCanvas上的两个UI面板是否相互重叠。目前我通过比较画布元素Rects画布设置画布缩放器设置代码来检查[Header("CheckForOverlap")]publicRectTransformPlayerBar;公共RectTransform左栏;公共矩形RectOne;公共矩形RectTwo;公共布尔重叠;//检查两个canvas元素Rects是否相互重叠publicvoidCheckForOverlap(){overlapping=false;//将CanvasRectTransforms转换为WorldRectsRectOne=GetWorldRect(LeftBar);RectTwo=GetWorldRect(PlayerBar);如果(RectOne.Overlaps(RectTwo)){重叠=true;}}publicRectGetWorldRect(RectTransformrt){//获取世界角点,取左上角Vector3[]corners=newVector3[4];rt.GetWorldCorners(角落);Vector3topLeft=corners[0];//RectSize...我不确定这是否正常工作?Vector2size=newVector2(rt.rect.size.x,rt.rect.size.y);返回新的矩形(topLeft,尺寸);发生了什么'overlap'布尔值立即变为true。RectOne返回(示例)X-7.5,Y2.5W98.5,H164.1667ConvertRectTransformtoRect然后检查它是否重叠。这是一个简单的函数:boolrectOverlaps(RectTransformrectTrans1,RectTransformrectTrans2){Rectrect1=newRect(rectTrans1.localPosition.x,rectTrans1.localPosition.y,rectTrans1.rect.width,rectTrans1.rect.height);Rectrect2=newRect(rectTrans2.localPosition.x,rectTrans2.localPosition.y,rectTrans2.rect.width,rectTrans2.rect.height);返回rect1.Overlaps(rect2);用法:publicRectTransformuiRect1;公共RectTransformuiRect2;voidUpdate(){if(rectOverlaps(uiRect1,uiRect2)){Debug.Log("Overlaps");}else{Debug.Log("不重叠");更好的是,让它成为一个扩展方法:rect.width,rectTrans1.rect.height);Rectrect2=newRect(rectTrans2.localPosition.x,rectTrans2.localPosition.y,rectTrans2.rect.width,rectTrans2.rect.heigHT);返回rect1.Overlaps(rect2);现在,你可以做publicRectTransformuiRect1;公共RectTransformuiRect2;voidUpdate(){if(uiRect1.rectOverlaps(uiRect2)){}//ORif(uiRect2.rectOverlaps(uiRect1)){}}考虑rectTransformscale的更新版本以上就是C#学习教程:检查UI元素/RectTransform是否重叠,共享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicstaticclassRectTransformExtensions{publicstaticboolOverlaps(thisRectTransforma,RectTransformb){returna.WorldRect().重叠(b.WorldRect());}publicstaticboolOverlaps(thisRectTransforma,RectTransformb,boolallowInverse){returna.WorldRect().Overlaps(b.WorldRect(),allowInverse);}publicstaticRectWorldRect(thisRectTransformrectTransform){Vector2sizeDelta=rectTransform.sizeDelta;floatrectTransformWidth=sizeDelta.x*rectTransform.lossyScale.x;floatrectTransformHeight=sizeDelta.y*rectTransform.lossyScale。是;Vector3position=rectTransform.position;returnnewRect(position.x-rectTransformWidth/2f,position.y-rectTransformHeight/2f,rectTransformWidth,rectTransformHeight);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: