강의

멘토링

로드맵

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

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

작성한 질문수

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

UI 자동화 #3

UI_EventHandler 질문입니다

작성

·

534

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");
    }
}

해결하고 싶습니다 ㅠ.ㅠ

퀴즈

유니티에서 UI 요소를 화면에 표시하고 마우스 클릭 같은 상호작용 이벤트를 처리하기 위해 기본적으로 필요한 요소는 무엇일까요?

GameObject와 Component

Rect Transform과 Transform

Canvas와 Event System

Anchor와 Pivot

답변 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만 안되는지도 확인이 필요합니다.
왜냐하면 보통 이런 문제는 앞에 무엇인가가 이벤트를 '먼저 먹어버려서' 막히는 상황인 경우가 많습니다.

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

작성한 질문수

질문하기