인프런 커뮤니티 질문&답변

전인호님의 프로필 이미지
전인호

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

UI 자동화 #3

UI_EventHandler 질문입니다

작성

·

410

1

UI_EventHandler 컴포넌트를 UI_Button 오브젝트에 적용시키고 OnBeginDrag, OnDrag를 콘솔창에 Debug.Log할 때 강의와  질문드립니다.

강의에서는 text, img, button 전부 Drag가 잘 출력되는데 저는 img 오브젝트에서만 반응합니다 UI_Button 오브젝트에서 UI_EventHandler 컴포넌트를 제거하고 ScoreText에만 컴포넌트를 적용시켜 보아도  Drag가 출력되지 않습니다. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class UI_EventHandler : MonoBehaviour, IBeginDragHandler, IDragHandler
{
    public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log("OnBeginDrag");
    }
    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("OnDrag");
    }
}

해결하고 싶습니다 ㅠ.ㅠ

답변 4

1

저도 똑같은 상황이었는데 저의 경우에는 알고 보니까 PlayerController에 있는 코드가 image가 없는 UI_Button 클론을 생성하면서 image를 제외한 다른 것들을 덮어 씌워 버렸어요. 그래서 드래그가 image만 적용된 듯하네요 ㅋㅋ

0

전인호님의 프로필 이미지
전인호
질문자

실험으로 ItemIcon에 UI_EventHandler를 붙이신줄 알고 한번 실험 후 스크립트를 지웠었는데, 그게아니라 ItemIcon에서도 UI_EventHandler를 유지해야하는걸로 확인했습니다! 제가 이해한게 맞을까요?

Rookiss님의 프로필 이미지
Rookiss
지식공유자

현재 프레임워크상 Bind를 할 때 알아서 UI_EventHandler를 코드에서 추가해줄텐데요.
제가 말한 이벤트를 '먹어버리는' 상황은
UI 여러개가 중첩해서 동일한 위치에 겹쳐질 때 다른 애가 먼저 이벤트를 처리해서
뒤에 있는 UI는 이벤트 처리가 되지 않는 상황입니다.

0

전인호님의 프로필 이미지
전인호
질문자

OnDrag함수에서 

transform.position = eventData.position;

으로 버튼이나 이미지를 움직이는 것도 안돼서 Debug.Log로 trasnform.position을 출력해보니 어떤 오브젝트를 드래그해도 UI_Button의 transform 값이 나왔습니다.

아마 강사님이 말씀하신 '먼저 먹어버리는' 오브젝트가 UI_Button이 먹는다고 생각되는데 해결방안이 있나요?

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

위 내용만으로는 알 수 없습니다.
클릭은 되는데 drag만 안되는지도 확인이 필요합니다.
왜냐하면 보통 이런 문제는 앞에 무엇인가가 이벤트를 '먼저 먹어버려서' 막히는 상황인 경우가 많습니다.

전인호님의 프로필 이미지
전인호

작성한 질문수

질문하기