ui 생성 질문 있습니다.
ui 생성할 때 메모리 관련 질문 있습니다.
강의를 쭉 듣는 중입니다. UI 생성시에는
프리팹 제작,
Instantiate(Resources.Load<>("UI/xxxx"))로 ui 생성하고
팝업 안에 아이템이 있는 경우에는 전부 생성
사용 종료 후 destroy 하는 방식
으로 이해했습니다.
gameObject 생성 때 Object Pool 방식 구현 강의에서 메모리 관련해서 얘기 주셨는데요, 이런 ui 생성,destroy사용방식이 메모리 부하는 따로 없을까요?
방치형 게임에서 유아이도 많이 눌러서 많이 일어날거라 생각이 들어서요.
SetActive로 관리하면 어떤지.. 다른 방법이 없나?? 궁금하여 문의드립니다.
답변 2
0
안녕하세요, 말씀주신대로 UI역시 Object Pool 방식으로 SetActive값을 변경하셔서 하는 것을 더 추천 드리고 있기는 합니다.
다만 3D의 Object Pool과, 2D의 Object Pool의 성능 최적화 부분은 생각보다 큰 차이가 있어서 UI의 경우에서는 Instantiate로 하셔도 크게 문제는 없다는 점 참고 부탁드리겠습니다!
물론 말씀주신 것 처럼 SetActive로 처리하시는게 가장 좋기는 합니다. UI자체가 Resources에서 나오는거라서 조금 더 깔끔하게 보이기 위하여 해당 방식을 채택한것이니 수정을 원하신다면 수정 하시는 걸 추천 드리겠습니다 ㅎㅎ
0
안녕하세요, 인프런 AI 인턴입니다. 지선님.
UI 생성 시 메모리 관련 문제에 관한 궁금증을 이해합니다. 게임 개발, 특히 방치형 게임에서는 UI 요소들이 자주 나타나고 사라지기 때문에 메모리 관리에 신경을 써야 합니다. 이를 위한 몇 가지 전략을 소개합니다.
Instantiate와 Destroy 방식의 문제
- Instantiate와 Destroy는 유연하지만, 잦은 사용은 메모리 할당과 해제로 인한 성능 저하를 유발할 수 있습니다. 특히 객체를 자주 생성하고 파괴하는 경우, 메모리 단편화(fragmentation)가 발생할 가능성이 있습니다.
메모리 관리 방법
오브젝트 풀링(Object Pooling):
- 오브젝트 풀링은 자주 사용되는 객체를 미리 생성해 두고 필요할 때 활성화하여 사용하는 방식입니다. 객체가 필요 없어지면 삭제하지 않고 풀에 반환하여 다음에 다시 사용하는 것이죠.
- UI 요소도 오브젝트 풀링을 사용하면 Instantiate와 Destroy를 반복적으로 수행하지 않아 성능을 개선할 수 있습니다.
- 오브젝트 풀링은 자주 사용되는 객체를 미리 생성해 두고 필요할 때 활성화하여 사용하는 방식입니다. 객체가 필요 없어지면 삭제하지 않고 풀에 반환하여 다음에 다시 사용하는 것이죠.
SetActive 방식:
- UI 객체를 미리 만들어둔 후에 SetActive(false)로 비활성화하고, 필요할 때 SetActive(true)로 활성화합니다.
- 이 방식은 Instantiate와 Destroy 대신 사용될 수 있어, 메모리 할당 및 해제 비용을 줄여줍니다.
- UI 객체를 미리 만들어둔 후에 SetActive(false)로 비활성화하고, 필요할 때 SetActive(true)로 활성화합니다.
메모리 프로파일링:
- Unity에서 제공하는 메모리 프로파일러를 사용하여 메모리 사용량을 모니터링하면 어떤 부분이 메모리를 많이 사용하는지 파악할 수 있습니다.
- Unity에서 제공하는 메모리 프로파일러를 사용하여 메모리 사용량을 모니터링하면 어떤 부분이 메모리를 많이 사용하는지 파악할 수 있습니다.
참고 자료
- UI 성능 최적화에 대한 질문: UI 컴포넌트의 효율적인 사용에 대한 다양한 전략을 설명합니다.
- 오브젝트 풀링 기법: 오브젝트 풀링의 이점과 구현 방법에 대한 논의를 확인해 보세요.
실제 게임 개발 현장에서는 각자의 프로젝트 특성에 맞는 방법을 채택하는 것이 중요합니다. 게임의 요구사항에 맞춰 UI 관리 방식을 선택하시길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
코드 관련 질문
0
31
2
39. Main화면 추가 UI 에서 자료는 어디서 받나요??
0
40
1
cleric.fbx 파일을 열 수 없다는 에러가 뜹니다
0
69
2
강의 15분에 질문드립니다
0
72
2
교육자료 마젠타색
0
70
1
26분에 질문 드립니다
0
66
1
코인 획득 강의 질문입니다.
0
71
2
시간이없어서 빠르게 공부하게 프로젝트 공유좀 부탁드려요
0
109
2
TextMeshPro, TextMeshProUGUI, 그리고 Text의 차이점이 궁금합니다
0
130
1
피격테스트 30:20
0
61
1
구현 문의
0
79
1
안녕하세요! 게임개발 협업관련해서 질문드립니다!
1
159
2
Pool_Mng, Base_Mng 참조
0
109
3
CSV대신 DB
0
90
2
DB 관련 궁금한 점이 있습니다.
0
80
2
네이밍 컨벤션 질문
0
88
2
Dice Prefab
0
80
2
State Pattern #6 (Dead) 챕터의 Spawner.m_Players.Add(this); 문의드립니다.
0
62
1
혹시 섹션별 스크립트 소스 있으신지요?
0
125
2
Firebase 웹에서 값 변경 후
0
84
1
Material 파일이 깨지는거 같아요
0
166
2
절전모드 카메라 끄는 것
0
80
1
프로젝트 파일 공유 가능할까요?
0
184
2
프로젝트 관련 질문
0
95
1





