반응형
✔ 유니티 이벤트 시스템 - 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를 확인하는 것은 쓸데없으니..
내가 원하는 방식은 아니였다.
또 다른 좋은 방법이 있다면 공유부탁드립니다.
감사합니다.
반응형
'Programming > Unity' 카테고리의 다른 글
[Unity] URP - Lit Shader Properties 런타임에서 변경 (6) | 2021.06.11 |
---|---|
[Unity] .mtl file 이란? (3) | 2021.05.18 |
[Unity] UnityWebRequest로 json 데이터를 Http body에 Post로 전달방법 (8) | 2021.04.21 |
[Unity3D] 웹 데이터 파일 다운로드,업로드(GET, POST) 및 저장 (UnityWebRequest) (2) | 2021.03.16 |
[Unity3D] Unity에서 C# 스크립트 클릭 시 Visual Studio 안열림, 무반응 [ 해결법 ] (2) | 2021.01.07 |
댓글