DropDown List controll을 마우스 오버로 펼치는 방법 - youchangCho/DevelopDoc GitHub Wiki
Drop down list 는 그 구조의 복잡성이 unity에서도 꽤 높은 자리를 차지 하고 있는 듯 합니다.
마우스 Over를 인지 하기 위한 여러 방법이 있겠지만 가장 간단하게 할 수 있는 방법은 [Event trigger] component를 이용하는 것이라 생각이 드는 군요.
물론 어떤 트리거를 사용해도 무관 합니다.
트리거 이벤트는 중요한게 아니거든요
Mouse over라는 이벤트는 MonoBehaviour class에 있기는 합니다 만... 일단 전 이거로 하진 않고 [Event Trigger]를 사용하였습니다.
- Mouse Enter Event
- 마우스 진입이 된 후 해당 객체 위로 올라가면 현 이벤트가 발생됩니다.
- Mouse Exit Evet
- 마우스 진입이 제거 될 경우 현 이벤트가 발생됩니다.
여기서 중요한 부분은 Drop down list 최 상위 Object에는 exit를 넣어버리면 않됩니다.
이유는 Drop down이 될 경우 focus가 하단의 Object로 이동이 되어 버리는 문제가 발생되기 때문입니다.
그래서 제가 한 방법은 Dropdownlist 내부 하위 트리에 있는 Template Object에 Event를 다시 등록 하는 것입니다.
- Dropdownlist 최 상위 object에 Mouse Enter 이벤트를 등록
- Dorpdownlist 하위 Template Object에 Mouse Enter와 Exit를 등록
어떤 함수를 사용해도 무관합니다.
//dropdownlist 의 객체를 저장 합니다.
public var dropdonwlist;
//List 를 펼치게 됩니다.
public void ListDown()
{
dropdownlist.Show();
}
//List 를 접습니다.
public void ListUp()
{
dropdownlist.Hide();
}
위 코드를 Debug.Log() 로 출력 해보면 Dropdonw 이 펼처질때 제어가 이동되는 것을 확인 할 수 있습니다.
Dropdownlist 의 Template 에 Enter event를 재 등록 하는 이유는 List가 펼쳐진뒤 펼쳐진것을 유지하기 위한 것입니다.
물론 약간 매끄럽진 않습니다.
실제로 펼쳐진 List에 마우스가 가지 않은 상태에서 Dropdownlist에서 마우스가 벋어나면 접히지 않는 문제가 있습니다.
다른 좋은 방법이 있으면 공유 부탁 드립니다.