inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

이벤트는 따로 삭제하지 않아도 되나요?

188

태사단

작성한 질문수 17

0

이벤트에 함수를 추가해줄 경우, 따로 삭제해주지 않으면 스크립트가 붙은 오브젝트가 파괴된 후에도 계속 해당 스크립트를 참조하고 있는걸로 알고 있습니다. 참조가 하나라도 있으면 가비지 콜렉터가 해당 스크립트의 내용을 메모리에서 지우지 못한다고... 그래서 기존에는 OnDestroy() 에서 추가해준 이벤트를 일일히 삭제했었는데요, 강의를 보니 이벤트 추가 때 혹시 모르니 함수를 한번 뺀 다음 추가해주는 방식을 사용하더라고요. 참신하면서도 되게 편리한 방식이라고 느껴서 앞으로는 이렇게 하려고 합니다.

그런데 한 가지 걱정되는게 있습니다. 같은 프리팹이라도 파괴 후 재생성하면 엄연히 다른 오브젝트일텐데, 이전에 지워진 오브젝트에 붙어 있던 스크립트는 이벤트를 삭제해주지 않아서 여전히 참조되고 있지 않나요? 이로 인해 UI를 켰다 끌 때마다 메모리에 공간이 할당되고 지워지지 못하는 등의 문제가 발생하지는 않는지 궁금합니다.

어설프게 주워들은게 많다보니 질문이 많네요. 정확한 표현이 되었는지 모르겠습니다. 죄송합니다 ㅠㅠ

unity C#

답변 1

1

Rookiss

정확히 알고 계신게 맞습니다.
한번 -= 을 해준 것은 동일한 오브젝트에 대해 함수를 중복 등록할까봐 넣어준거지,
삭제되는 객체에 대한 처리를 위함이 아닙니다.
말씀주신대로 UI를 끌 때 혹은 OnDestroy에서 이벤트를 Clear 해주는게 맞습니다.

당장 UI에서 그 부분을 크게 신경쓰지 않은 이유는,
나중에는 처음에 특정 Scene에서 필요한 UI를 한 번 로드해서
(Prefab 생성/삭제를 반복하는게 아니라)
계속 메모리에 UI 객체를 들고 있으면서 On/Off 처리하는 방식으로 수정될 예정이기 때문입니다.

그런데 FM대로 하면 이벤트 정리도 하는 것이 맞습니다.
안그러면 reference count가 0이 되지 않아 해제되지 않겠죠!

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

0

37

2

픽셀 좌표 스크린 좌표

0

33

0

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

0

73

2

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

0

84

1

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

0

83

1

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

0

75

1

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

0

82

1

달리기 애니메이션 에러

0

89

2

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

0

66

1

GetKey 오류

0

109

2

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

0

107

1

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

0

169

6

Animation blending 파라미터 계산

0

68

1

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

0

97

3

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

0

88

2

질문있습니다

0

143

2

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

0

142

3

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

0

87

2

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

0

136

2

유니티6 NavMesh 안되는분들

1

176

1

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

7

527

1

GetComponent<Poolable> 질문드립니다.

0

102

2

UI 불러오지 못함

0

118

2

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

0

155

2