자세히보기

공부 나눔 (Sharing Study)/Unity 와 C#

[Unity/C#] 방금 클릭한 UI 이름, 정보 가져오기

윤스톤 2021. 3. 18. 18:16

유니티에서 방금 클릭한 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);
    }
}

ClickWhat.cs
0.00MB

(위 코드를 복사하시려면 이 스크립트를 다운받아주세요 - 우클릭 방지)

더보기

[ 코드 설명 💬 ]

EventSystems를 선언하여 UI를 생성할 때 자동으로 함께 생성되는 EventSystem을 통해
이벤트 처리를 담당하여 우리가 원하는 기능을 가능하게 해줍니다.
(유니티 씬 내에 EventSystem이 없다면 기능이 정상적으로 작동되지 않으니 없으시다면 생성해주세요)


방금 클릭한 버튼 속 문자도 가져오기 위해 UI도 함께 선언해줍니다
(게임 오브젝트의 이름만 필요하다면 선언하지 않아도 됩니다)

 

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

 

currentSelectedGameObejct 변수를 사용하여 현재 EventSystem에 의해 활성화 된 게임 오브젝트를 가져와줍니다.

 

2. 버튼에 함수 넣기

미리 생성해둔 버튼들에 방금 작성한 함수를 적용시켜보겠습니다.

버튼의 부모인 Canvas에 생성한 ClickWhat 스크립트를 드래그하여 컴포넌트로 넣고,
함수를 적용시킬 버튼을 전부 클릭한 후 OnClick에서 +버튼을 누릅니다.

 

None에 Canvas를 드래그하여 넣고,
ClickWhat - ClickBtn() 순서대로 누르면 준비가 모두 끝납니다

실행하여 잘 작동하는지 확인해보겠습니다.

 

버튼을 누르면 공동작업인 "버튼 클릭"이 출력되고,
각 버튼의 이름과 문자도 정상적으로 출력되는 모습이 보입니다.

꼭 이름이 아닌 게임 오브젝트의 원하는 정보를 가져와 사용하실 수 있습니다.

 

다음 게시물에서는 이 기능을 응용하고,
추가로 Resources 폴더에서 프리팹을 복제하여 생성하는 기능을 배워보도록 하겠습니다.


방금 클릭한 UI 가져오는 방법이었습니다 :)

끝까지 읽어주셔서 감사합니다! 도움이 되셨다면 댓글+하트 해주세요 🥰

반응형