버그 해결을 위한 모든 질문을 던져
0 votes
241 views
로딩씬 구현 중 의문이 생겨 질문드립니다. :)

씬을 비동기 로드하는것과 별개로 로딩씬에서 다음 씬에서 사용 할 객체들을 풀링하고 있는데

풀링과정에서 다수의 객체들을 Instantiate할때 당연히(?) 렉이 발생합니다.

(로딩씬에는 애니메이션이 플레이 되고 있고 애니메이션이 끊김없이 재생되길 바랍니다)

유니티는 싱글쓰레드 이므로 Instantiate 할 때 끊기는 현상은 어쩔 수 없다고 생각이 드는데..

혹시 해결법 알고 계신분들은 답변 부탁드립니다.

유니티에서 비동기 객체생성은 안되는 걸까요?
asked (10 point) , 241 views

3 answers

0 votes
우수 답변
유니티 테크놀로지 답변은 신뢰도가 낮긴 한데 불가능하다고 합니다.

유니티 기능이 메인스레드에서만 가능한 경우가 많아서 아마 안 되지 않을까요?

 

코루틴으로 최대한 쪼개는 방법밖에 없을 듯...
answered (70 point)
선택됨
역시 싱글쓰레드의 한계군요. ㅠ

코루틴으로 잘게 자르는것도 애초에 덩치가큰 프리펩이면 의미가 없을듯 하네요.

성능이 낮은 디바이스도 지원 예정이라 애니메이션을 덜어내고 빠르게 로딩을 가져가도록

기획 변경을 요청해야 할 것 같습니다.

답변 감사드립니다.
0 votes
비동기 객체생성의 경우엔 코루틴으로 오브젝트 풀을 처리하면될것 같습니다. 로딩씬에서 애니메이션이 끊기신다고하셨는데 혹시 Update내에서 해당 구문을 처리하면 끊기실일이 없으실것같을것같은데..
answered (14 point)
답변 감사드립니다. ^^

저는 코루틴과 Update 메서드는 같은 쓰레드에서 돈다고 알고 있는데.. 그렇다면 코루틴에서 풀링을 하고 Update에서 애니를 처리하던 풀링을 하는 순간 (예로 100개정도에 프리펩을 한번에 Instantiate ) 렉이 발생할거 같은데.. 혹시 풀링을 프레임별로 나눠서(예로 한프레임당 10개씩) 하라는 말씀이신 가요?
프레임별로 잘게 쪼개는 경우, 풀링에걸리는 시간이 오래걸릴것같습니다.

제 프로젝트의경우에는 로딩에서 사용하는 비지인디케이터의 활성/비활성은 Update구문에서 동작하게 하여 타 쓰레드와 관계없이 동작하도록 하였고, 코루틴을 통해 풀링 또는 초기화가 모두 끝나면, Update에서 비지인지케이터를 비활성시켜주도록 동작하고 있습니다.

코루틴을 쓰면 로딩 중 애니메이션이 끊기는 것은 이전보다 개선될것이라 생각하지만, 로딩시간이 이전보다 길어지는 문제점은 확실히 있다고 생각합니다. 다른 개선방법은 현재로썬 떠오르는 것은 풀링 시키는 오브젝트의 갯수를 줄이는 게 제일 큰 효과를 본다고 생각하고 있습니다.

답변이 도움이 되었으면 좋겠네요 ㅎㅎ 즐코딩하시길바랍니다.
답변 감사드립니다 :)
0 votes
Instantiate 시에 끊기는 현상은 여러 이유가 있겠지만

메모리 할당 때문일 활률이 크다고 예상합니다.

해당 경우에는 Memory Pooling을 사용해보시는걸 추천합니다.
answered (8 point)
음.. 제가 본문을 난해하게 적은 걸까요,

간단하게 오브젝트풀 객체 할당시 생기는 렉현상을 해결할 방법을 찾고 있습니다.

답변 감사드립니다 :)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

270 질문
403 answers
407 댓글
563 users