EventSystem.current.currentSelectedGameObject
안녕하세요.
이번 시간에는 UI 버튼에 관련된 내용을 포스팅 하겠습니다. 최근에 알아낸 거라 그리고 유용하게 쓰일 여지가 있다고 생각해서 이렇게 남기게 됐습니다. 시작하겠습니다.
알아볼 것은 UGUI에서 현재 선택된 UI오브젝트를 받아오는 방법입니다. 저는 주로 버튼 오브젝트에 활용했는데요. 지금 눌린 버튼이 자기 자신을 매개 변수로 넣을 때 활용했습니다. 구구절절 설명하는 것보다 예시를 보시는 게 더 빠르다고 생각합니다. 바로 보시겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class Manager : MonoBehaviour { public void EventSystemTest() { print(EventSystem.current.currentSelectedGameObject.name); } } | cs |
먼저 UnityEngine.EventSystems 네임스페이스를 선언해주셔야 합니다. 매니저 클래스를 만들어줍니다. 다음으로 버튼을 3개 정도 만들어주고 EventSystemTest 메소드를 연결시켜줍니다. 그러고 나서 버튼을 클릭하면?
이렇게 자기 이름을 출력합니다. 이게 언제 편하냐면 버튼이 갖고 있는 속성에 접근할 때 굉장히 편해집니다. 저는 처음에 매개 변수로 GameObject 설정해주고 일일이 드래그해서 연결해줬는데, 이렇게 스크립트로 지정할 수 있어서 매우 편리합니다. 그런데 이게 모든 UI오브젝트에 적용되는 점은 아닙니다.
currentSelectedGameObject에 커서를 올려서 설명을 보시면 "The GameObject currently considered active by EventSystem."라고 적혀있습니다. 토글, 드랍다운, 버튼, 슬라이더 같이 먼가 액션이 있는 친구들은 접근이 가능했지만, 이미지나 패널류의 친구들은 접근을 할 수 없었습니다. 아마 어떤 액션이 있는 UI오브젝트들은 EventSystem에서 관리를 하는 친구들이라서 그런게 아닐까 싶습니다. 그러므로 UI가 아닌 일반 오브젝트들도 이 방법으로 접근할 수 없습니다. 안되는 오브젝트들은 NullRefereceException 에러가 나더라고요. 물론 늘 그렇듯 정확한 정보는 아닐 수 있습니다. 다음에 이쪽으로 지식이 깊어지면 수정하도록 하겠습니다.
어쨌든 버튼만 사용한다고 쳐도 유용한 방법이라고 생각합니다. 다음에도 또 유용하다고 느끼는 정보가 있으면 포스팅 하도록 하겠습니다.
감사합니다.
'Unity Tip' 카테고리의 다른 글
Additive모드로 씬 불러오기와 주의할 점. (1) | 2018.04.29 |
---|---|
UGUI버튼 스크립트로 메소드 연결하기 (0) | 2018.04.15 |
유니티에서 Web Text 긁어오기(3) (0) | 2018.04.05 |
유니티에서 Web Text 긁어오기(2) (0) | 2018.04.04 |
유니티에서 Web Text 긁어오기(1) (1) | 2018.04.03 |