이전 글에서 만들어 보았던 드래그 박스를 이용해서,
이번에는 그 드래그 박스 안에 포함된 오브젝트에 대해서 선택하는 부분을 구현해보았습니다.
처음에는 좌표값을 이용해서, 내부에 있는 오브젝트를 찾으면 되겠다! 하고 구현하였으나,
콜라이더의 OverlapCollider를 이용하면 좀 더 직관적으로 구현할 수 있겠다 싶어 새로 구현해보았습니다!
(드래그는 아래글에서 구현해놓았습니다!)
[Unity] 유니티 마우스 입력을 이용한 드래그 박스
오랜만에 구현한 기능은...UI Sprite를 이용한 드래그박스! 모바일 게임이긴 한데, 드래그 박스를 만들일이 생겨서 한번 만들어 보았습니다.코드는 되게되게 짧아서.... 흠... 일단 시작!우
ljhyunstory.tistory.com
해당 드래그는
마우스 입력과 아래와 같은 UI의 크기조절을 통해 드래그를 만들어 주었는데....
void DrawSelectionBox()
{
if (!selectionBox.gameObject.activeSelf)
selectionBox.gameObject.SetActive(true);
Vector2 size = endPos - startPos;
// 중심점 설정
selectionBox.anchoredPosition = startPos + size / 2;
selectionBox.sizeDelta = new Vector2(Mathf.Abs(size.x), Mathf.Abs(size.y));
SelectObjects();
}
여기서 하단에 SelectObjects함수를 추가해,
드래그 박스가 유지되는 동안 내부의 아이템들을 선택할 수 있도록 해주었습니다.
SelectObjects함수를 보기 전에
먼저 Collider2D의 OverlapCollider함수를 살펴보면.....
Collider2D-OverlapCollider - Unity 스크립팅 API
Get a list of all colliders that overlap this collider.
docs.unity3d.com
흠..... 기본적으로 아래와 같은 형태를 가지고 있다고 합니다.
public int OverlapCollider (ContactFilter2D contactFilter, Collider2D[] results);
첫번째 요소 Filter는 콜라이더에 포함되어 있는 오브젝트에 대해 말 그대로 걸러주기 위한 조건들을 설정하는 부분이고,
두번째 요소 results는 반환값들을 저장하는 부분입니다.
그래서! 가장 먼저
선택된 오브젝트에 대해 저장하기 위한 collidersInside리스트를 생성해주었습니다.
그 다음은 filter에 대해 설정부분입니다.
ContactFilter2D filter = new ContactFilter2D();
filter.SetLayerMask(LayerMask.GetMask("Item"));
저는 단순히 레이어 마스크 부분만 "Item" 레이어만 포함하도록 설정해 주었습니다.
그렇게 완성된 함수!
// 박스 선택
void SelectObjects()
{
List<Collider2D> collidersInside = new List<Collider2D>();
ContactFilter2D filter = new ContactFilter2D();
filter.SetLayerMask(LayerMask.GetMask("Item"));
BoxCollider2D TempCollider = selectionBox.gameObject.GetComponent<BoxCollider2D>();
TempCollider.size = selectionBox.sizeDelta;
TempCollider.OverlapCollider(filter, collidersInside);
.....
}
짧....죠?
추가로 위에서 드래그를 통해 UI의 크기를 조절했지만, collider는 그에 영향을 받지 않기에....
TempCollider.size = selectionBox.sizeDelta;
따로 사이즈만 조절해 주는 코드 한줄 추가했습니다.
여기까지 하고, SelectObjects함수 아래부분에 선택된 오브젝트에 대한 처리 부분만 추가추가하면 끝!
드래그를 통해 오브젝트를 선택할 수 있습니다...!

끝!
틀린점이 있다면 댓 달아주세요!

'유니티 최고 > 유니티 구현' 카테고리의 다른 글
[Unity] 유니티 Canvas Group을 이용한 UI컨트롤 + Dotween (0) | 2025.03.08 |
---|---|
[Unity] 유니티 텍스트 입력에 따라 변하는 동적 채팅 UI (1) | 2025.02.19 |
[Unity] 유니티 마우스 입력을 이용한 드래그 박스 (0) | 2025.02.15 |
[Unity] 유니티 Navigation 시스템을 이용한 클릭 이동 (NavMesh) (3) | 2024.11.06 |
[Unity] 유니티 암호 입력 시스템구현에 대해서 (0) | 2024.11.04 |
댓글