유니티에서 방금 클릭한 UI를 가져오는 방법을 알아보도록 하겠습니다!
여러 개의 버튼에 동일한 기능(함수)을 넣고 싶은데
누른 버튼의 이름 혹은 버튼의 정보에 따라 다른 작업을 추가하고 싶을 때
각각 다른 함수를 만들어 넣는 것보다 더욱 효율적인 방법입니다 :)
1. 버튼을 눌렀을 때 호출될 함수 작성하기
저 버튼을 눌렀을 때 호출이 될 함수를 작성합니다
저는 ClickWhat이라는 이름으로 스크립트를 만들었습니다.
ClickWhat 스크립트를 열어 코드를 적어봅시다.
(주석 부분과 print()는 선택사항입니다)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class ClickWhat : MonoBehaviour
{
// 버튼을 눌렀을 때 호출될 함수
public void ClickBtn()
{
print("버튼 클릭");
// 방금 클릭한 게임 오브젝트를 가져와서 저장
GameObject clickObject = EventSystem.current.currentSelectedGameObject;
// 방금 클릭한 게임 오브젝트의 이름과 버튼 속 문자 출력
print(clickObject.name + ", " + clickObject.GetComponentInChildren<Text>().text);
}
}
(위 코드를 복사하시려면 이 스크립트를 다운받아주세요 - 우클릭 방지)
[ 코드 설명 💬 ]

EventSystems를 선언하여 UI를 생성할 때 자동으로 함께 생성되는 EventSystem을 통해
이벤트 처리를 담당하여 우리가 원하는 기능을 가능하게 해줍니다.
(유니티 씬 내에 EventSystem이 없다면 기능이 정상적으로 작동되지 않으니 없으시다면 생성해주세요)
방금 클릭한 버튼 속 문자도 가져오기 위해 UI도 함께 선언해줍니다
(게임 오브젝트의 이름만 필요하다면 선언하지 않아도 됩니다)

함수는 꼭 public으로 생성하여 외부에서 접근하여 호출할 수 있도록 해줍니다.

currentSelectedGameObejct 변수를 사용하여 현재 EventSystem에 의해 활성화 된 게임 오브젝트를 가져와줍니다.
2. 버튼에 함수 넣기
미리 생성해둔 버튼들에 방금 작성한 함수를 적용시켜보겠습니다.
버튼의 부모인 Canvas에 생성한 ClickWhat 스크립트를 드래그하여 컴포넌트로 넣고,
함수를 적용시킬 버튼을 전부 클릭한 후 OnClick에서 +버튼을 누릅니다.
None에 Canvas를 드래그하여 넣고,
ClickWhat - ClickBtn() 순서대로 누르면 준비가 모두 끝납니다
실행하여 잘 작동하는지 확인해보겠습니다.
버튼을 누르면 공동작업인 "버튼 클릭"이 출력되고,
각 버튼의 이름과 문자도 정상적으로 출력되는 모습이 보입니다.
꼭 이름이 아닌 게임 오브젝트의 원하는 정보를 가져와 사용하실 수 있습니다.
다음 게시물에서는 이 기능을 응용하고,
추가로 Resources 폴더에서 프리팹을 복제하여 생성하는 기능을 배워보도록 하겠습니다.
방금 클릭한 UI 가져오는 방법이었습니다 :)
끝까지 읽어주셔서 감사합니다! 도움이 되셨다면 댓글+하트 해주세요 🥰
'공부 나눔 (Sharing Study) > Unity 와 C#' 카테고리의 다른 글
[Unity/C#] 가장 쉽게 포물선 '위로' 그리는 방법 (+라인 렌더러) (0) | 2022.05.26 |
---|---|
[Unity/C#] 영상 재생, 일시정지, 볼륨 조절 (Video Player) (0) | 2021.05.22 |
[Unity/C#] 데이터 저장/불러오기 가장 쉬운 방법 (Json) (22) | 2020.05.26 |
[Unity/C#] UI 버튼 일반 클릭(터치) vs 롱클릭(터치) (2) | 2020.03.13 |
[Unity/C#] CSV파일 파싱하는 방법 (6) | 2020.03.06 |