inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

UI 자동화 #3

Rect Transform

431

Hyobin Kim

작성한 질문수 81

0

((PointerEventData data) => {evt.gameObject.transform.position = data.position;})

처음에는 transform.position = data.postion이라고 했다가, image UI가 드래그 해도 움직이지 않게 되는걸 보여주셨고

그래서 뒤에 evt.gameObejct를 추가해서

UI_EventHandler를 들고 있는 게임오브젝트의 트랜스폼을 변경하는걸로 고쳐주시잖아요

이 부분을 이해하는건 딱히 어렵지 않았습니다만

그 과정에 발생하지 않은 어떤 부분이 이해가 안됩니다

처음에 transform.position = data.position만 있을때는 말 그대로 이 스크립트(UI_Button.cs)가 붙어있는 UI_Button이라는 게임오브젝트의 트랜스폼을 변경하는거잖아요

당연히 이 오브젝트는 Transform 대신에 RectTransform을 들고 있으니까 저 변경이 적용될리가 없다고 이해했습니다

그런데 왜 여기서 NullReferenceException이 뜨질 않는건가요?

어쨋든 Transform이라는 컴포넌트가 있는건 아닌데 말이죠

지금 그 다음강의를 보고 있다가 혹시나 하는 생각으로 글에다 추가 중인데요

혹시 저기서 NullReferenceException이 뜨질 않는 이유가, RectTransform이 Transform을 상속하고 있는것과 관련이 있나요?

그리고 한가지 더 질문을 드리면, 수정전 코드로 이미지UI를 드래그해서 움직이려고 하면 UI_Button 오브젝트의 transform을 변경하게 되는거였다고 했잖아요

그런데 UI_Button의 RectTransform 컴포넌트의 좌표를 보고 있어도 변하질 않던데 이건 왜 그런가요?

C# unity

답변 3

0

Rookiss

첫번째 답변에 따르면, 코드에서 접근하려는 컴포넌트 그자체가 게임오브젝트에 달려있지 않지만, 해당 게임 오브젝트가 코드에서 접근하려는 컴포넌트를 상속받고 있는 컴포넌트를 들고 있으면 괜찮다는 말씀이시죠?

네 맞습니다.

컨텐츠 작업에 유용하다는 말씀은 무슨 뜻인가요?

나중에 후반부에 RPG 샘플 게임을 만들면 감이 오실텐데
우리가 붙이는 MonoBehaviour 스크립트들도 상속 구조로 만들어서,
부모 클래스를 찾는 방법 등을 이용하게 됩니다. (ex. CreatureController, PlayerController 등)

코드가 이럴때의 경우, 드래그해서 transform.positon에 변화가 생기는 대상은 캔버스 그자체 UI_Button이잖아요?
그런데 이건 코드를 저 상태로 두고 Image UI를 드래그 해도 움직이질 않더라고요

어떤 UI가 이벤트를 안 먹는 경우는 빈번하게 일어나고
이유는 굉장히 다양하게 존재할 수 있습니다.
가령 EventSystem을 빼먹었다거나, Raycast Target을 뺴먹은 등의 경우도 있지만

가장 찾기 어려운 케이스는 동일한 위치의 다른 UI가
클릭 이벤트를 '먼저' 먹어 버린 경우가 많습니다.
지금은 아마 그런 경우로 예상되네요.
저런 문제 판별하려면 로그를 찍는게 가장 확실합니다.

0

Hyobin Kim

첫번째 답변에 따르면, 코드에서 접근하려는 컴포넌트 그자체가 게임오브젝트에 달려있지 않지만, 해당 게임 오브젝트가 코드에서 접근하려는 컴포넌트를 상속받고 있는 컴포넌트를 들고 있으면 괜찮다는 말씀이시죠?

컨텐츠 작업에 유용하다는 말씀은 무슨 뜻인가요?

두번째 답변에서 영상에서 잘 움직이고 있는 RectTransform은 ItemIcon의 TectTransform이고

제가 질문 드린바는

        AddUIEvent(go, (PointerEventData data) => {transform.position = data.position; }, Define.UIEvent.Drag); 

코드가 이럴때의 경우, 드래그해서 transform.positon에 변화가 생기는 대상은 캔버스 그자체 UI_Button이잖아요?

그런데 이건 코드를 저 상태로 두고 Image UI를 드래그 해도 움직이질 않더라고요

0

Rookiss

혹시 저기서 NullReferenceException이 뜨질 않는 이유가, RectTransform이 Transform을 상속하고 있는것과 관련이 있나요?

-> 맞습니다. RectTransform 코드를 따라가보면 Transform을 상속받고 있습니다.
Component끼리 상속 관계가 있을 때 부모 클래스로 찾을 수가 있는데,

컨텐츠 작업에 특히 유용합니다.

그런데 UI_Button의 RectTransform 컴포넌트의 좌표를 보고 있어도 변하질 않던데 이건 왜 그런가요?
-> 혹시 해당 오브젝트의 RectTransform을 보고 계신게 맞을까요?
15:41 부근을 보시면 잘 움직이고 있습니다

UI 기능 관련 질문이 있습니다!

0

29

2

픽셀 좌표 스크린 좌표

0

30

0

전체적으로 코드 읽는게 굉장히 오래 걸리네요...

0

70

2

카메라 #2 수업 캐릭터 쓰러짐 해결

0

82

1

플레이어 움직임이 끝날때, 기울어짐 현상

0

81

1

Input 적용과 관련하여 질문 있습니다.

0

73

1

디버그 불가.. Unity에 연결 불가

0

78

1

달리기 애니메이션 에러

0

86

2

오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다

0

64

1

GetKey 오류

0

109

2

에셋을 어디에 올려두신지 알 수 있나요?

0

105

1

재귀호출? 오류나는데 왜 이래요 ?

0

167

6

Animation blending 파라미터 계산

0

66

1

newPos와 to지점이 겹쳐져야 하는거 아닌가요?

0

95

3

오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다

0

86

2

질문있습니다

0

142

2

아 이거 소스코드 같은거 없나요?

0

140

3

질문 드립니다. string.IsNullOrEmpty(name)

0

85

2

@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?

0

134

2

유니티6 NavMesh 안되는분들

1

174

1

Unity6 Unity-Chan Material 마젠타 문제 해결법

7

524

1

GetComponent<Poolable> 질문드립니다.

0

100

2

UI 불러오지 못함

0

116

2

UI 자동화 #1 - Util.cs의 FindChild함수에서 component.name에 컴포넌트 이름이 뜹니다.

0

154

2