- Home /
Unity Check overlap of rect works except if in gridlayoutgroup
So for my scene I have an Item and a Slot script. If the Slot script is applied to UI in GridLayoutGroup it doesn't read, even if it is hovering or not. However if Slot UI object is not insideGridLayoutGroup it reads overlap fine.
Below are the scripts. I am basing scale on 35px currently for testing.
Slot.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Slot : MonoBehaviour, IDragHandler, IDropHandler
{
public RectTransform Item_DragRect
{
get
{
if(Item_CS.Item_Dragged != null)
{
return Item_CS.Item_Dragged.GetComponent<RectTransform>();
}
else
{
return null;
}
}
}
public RectTransform rectTransform;
public Rect DisplayRect;
public Color D_Color;
public Color O_Color;
public Color T_Color;
public GameObject CurrItem;
// Start is called before the first frame update
void Start()
{
rectTransform = this.GetComponent<RectTransform>();
}
// Update is called once per frame
public void FixedUpdate()
{
DisplayRect = new Rect(rectTransform.localPosition.x, rectTransform.localPosition.y, rectTransform.rect.width, rectTransform.rect.height);
if (Item_DragRect != null)
{
CurrItem = Item_DragRect.gameObject;
Rect myRect = new Rect(rectTransform.localPosition.x, rectTransform.localPosition.y, rectTransform.rect.width, rectTransform.rect.height);
Rect ItemRect = new Rect(Item_DragRect.localPosition.x, Item_DragRect.localPosition.y, Item_DragRect.rect.width, Item_DragRect.rect.height);
if (ItemRect.Overlaps(myRect))
{
GetComponent<Image>().color = O_Color;
}
else
{
GetComponent<Image>().color = D_Color;
}
}
else
{
CurrItem = null;
GetComponent<Image>().color = D_Color;
}
}
public void OnDrag(PointerEventData eventData)
{
}
public void OnDrop(PointerEventData eventData)
{
}
}
Item_CS.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Item_CS : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler, IPointerExitHandler
{
public static GameObject Item_Dragged;
public GameObject CurrID;
public Vector2 MyScale;
private Vector3 ItemPos;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
RectTransform rectTransform = this.GetComponent<RectTransform>();
rectTransform.sizeDelta = new Vector2(MyScale.x * 35, MyScale.y * 35);
DragFunction();
CurrID = Item_Dragged;
}
public void DragFunction()
{
if(Item_Dragged != null)
{
Item_Dragged.transform.SetAsLastSibling();
}
}
public void OnBeginDrag(PointerEventData eventData)
{
if(Item_Dragged == null)
{
Item_Dragged = gameObject;
GetComponent<CanvasGroup>().blocksRaycasts = false;
}
else
{
Item_Dragged = gameObject;
GetComponent<CanvasGroup>().blocksRaycasts = false;
}
}
public void OnDrag(PointerEventData eventData)
{
this.transform.position = Input.mousePosition;
}
public void OnEndDrag(PointerEventData eventData)
{
Item_Dragged = null;
GetComponent<CanvasGroup>().blocksRaycasts = true;
}
public void OnPointerEnter(PointerEventData eventData)
{
//throw new System.NotImplementedException();
}
public void OnPointerExit(PointerEventData eventData)
{
//throw new System.NotImplementedException();
}
}
Comment
Your answer
Follow this Question
Related Questions
How to Stretch objects in grid layout when screen size is changed 0 Answers
Scaling GridLayoutGroup cells for multiple mobile aspect ratios 1 Answer
Why doesn't childing a gameobject to GridLayoutGroup at runtime align it properly? 1 Answer
Dynamically added buttons aren't aligned in GridLayoutGroup 0 Answers