본문 바로가기
Programming/Unity

[Unity] EventSystem.current - 클릭했을때 UI인지 Gameobject인지 구별하기

by 타임박스 2021. 5. 10.
반응형


✔ 유니티 이벤트 시스템 - Get Current UI Object



마우스에서 화면을 클릭했을때 클릭된 대상이 UI인지 확인 할 수 있다.

GameObject obj = UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject;

 

- UI가 클릭되었을때 : 위 코드에서 obj는 클릭된 UI 객체가 참조된다.

- UI가 클릭되지않았을때 (Gameobject 등 UI 이외의 모든것들) : 위 코드에서 obj = null 이 된다.

 

대게 Delete키를 누르면 삭제하는 이벤트를 많이 사용한다.

하지만 InputField에서 입력하는 도중에 글자를 지우기위해 Delete 키를 누르는 경우가 있을 수 있다.

그럼 글자도 지워지고 Delete키 이벤트도 동작하게 된다.

InputField에서 입력하고 있을 경우에는 삭제 이벤트를 발생시키지 않게 하려면?

여러가지 방법이 있는데 가장 편리한 방법은 위에 코드 내용과 같이 현재 클릭된 UI 오브젝트를 가져와서 

InputField인지 확인하고 이벤트를 발생시키지 않는것이다.

protected virtual void Update()
{
    //Delete 입력 발생
    if(Input.GetKeyDown(KeyCode.Delete))
    {
        //InputField 라면 아무것도 하지않음
        if (UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject != null
            && UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.GetComponent<InputField>() != null)
            return;
        else
           //Delete 이벤트 발생 처리...
        
    }
}

위 코드를 Delete 키 이벤트 발생전에 체크하면 된다.

# 다른 방법으로는 InputField에 있는 isFocus를 활용하는 방법이 있다.

InputField.isFocus가 True라면 활성화 상태인데.. 모든 InputField를 확인하는 것은 쓸데없으니..

내가 원하는 방식은 아니였다.

 

또 다른 좋은 방법이 있다면 공유부탁드립니다.

 

감사합니다.

반응형

댓글