일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Til
- 유니티
- 스파르타부트캠프
- 코딩테스트
- 텍스트게임
- input system
- 분반별
- 스파르타내일배움캠프
- 스탠다드
- 최종프로젝트
- 스파르타내배캠til
- 마크다운
- 피셔예이츠
- 오블완
- 티스토리챌린지
- 내배캠
- 코테풀기
- Input Field
- Action
- 알아볼것
- 스파르타내일배움캠프TIL
- projectl
- 분반별학습
- 스파르타
- 내일배움캠프
- 내주말
- 코테
- 백준
- string배열과 char
- 프로그래머스
- Today
- Total
Ottoman
내일배움캠프 7주 토요일 TIL- 코루틴매니저? 프로퍼티에 이벤트? 본문
코루틴은 오브젝트가 비활성화되면 에러로그를 남기면서 멈춰버린다.
이를 방지하는 사용방법은
1. 빈 오브젝트를 상위 오브젝트로 두고 여기에 코루틴을 사용하는 스크립트를 넣는다. => 활성화, 비활성화될 오브젝트는 하위 오브젝트로 만들어 스크립트를 담은 오브젝트가 비활성화되는걸 피한다
2. 코루틴매니저
코루틴을 돌려주는 클래스를 따로 만들어서 관리한다.
// 코루틴 매니저는 어떤 역할을 하지?
Chapter 11. Corutine, 커스텀 코루틴, 최적화 - 평생 공부 블로그 : Today I Learned 🌙 (ansohxxn.github.io)
https://ansohxxn.github.io/unity%20lesson%202/ch11/
Chapter 11. Corutine, 커스텀 코루틴, 최적화
인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진 강의를 듣고 정리한 필기입니다. 😀 🌜 강의 들으러 가기 Click
ansohxxn.github.io
코루틴(Coroutine) 대신 유니테스크(UniTask) : 네이버 블로그 (naver.com)
https://m.blog.naver.com/sorang226/223273254019
코루틴(Coroutine) 대신 유니테스크(UniTask)
게임을 개발하면서 비동기 로직을 가볍게 만들 일이 있을 때 유니티 기본 내장인 Coroutine도 조종 썼고, ...
blog.naver.com
StartCoroutine을 사용하면 가비지가 생긴다. => 새로운 StartCoroutine을 호출할 때마다 가비지가 생긴다?
(GPT)
코루틴을 사용할 때 가비지 컬렉션(GC)이 발생하는 이유는 IEnumerator를 통해 반환된 객체들이 반복적으로 생성되고, 이 객체들이 더 이상 참조되지 않으면 가비지 컬렉션이 이를 정리하기 때문입니다. 일반적으로 Unity의 코루틴에서 가비지가 많이 발생하는 주요 원인은 다음과 같습니다:
- 박싱(Boxing): 값 타입(예: int, float, bool)이 IEnumerator의 Current 속성으로 반환될 때, 박싱이 일어나면서 힙에 할당되고 이후 가비지가 됩니다.
- 익명 메서드와 람다 표현식: 코루틴 내에서 익명 메서드나 람다 표현식을 사용할 경우, 이들이 클로저(closure) 객체를 생성하여 힙 메모리를 소비합니다.
CoroutineManager 자체가 이러한 가비지 생성을 직접적으로 줄여주는 것은 아닙니다. 그러나 몇 가지 방법을 통해 코루틴 사용 시 가비지 생성을 최소화할 수 있습니다:
가비지 생성을 줄이는 방법
- 재사용 가능한 IEnumerator 구현:
- 코루틴을 매번 새로 생성하지 않고, 반복 사용 가능한 IEnumerator를 구현하여 재사용합니다.
public class CoroutineManager : MonoBehaviour
{
private static CoroutineManager _instance;
public static CoroutineManager Instance
{
get
{
if (_instance == null)
{
GameObject obj = new GameObject("CoroutineManager");
_instance = obj.AddComponent<CoroutineManager>();
}
return _instance;
}
}
private List<Coroutine> coroutines = new List<Coroutine>();
public Coroutine StartManagedCoroutine(IEnumerator routine)
{
Coroutine coroutine = StartCoroutine(routine);
coroutines.Add(coroutine);
return coroutine;
}
public void StopManagedCoroutine(Coroutine coroutine)
{
if (coroutines.Contains(coroutine))
{
StopCoroutine(coroutine);
coroutines.Remove(coroutine);
}
}
public void StopAllManagedCoroutines()
{
foreach (var coroutine in coroutines)
{
StopCoroutine(coroutine);
}
coroutines.Clear();
}
}
// 재사용 가능한 IEnumerator 예시
public class ExampleScript : MonoBehaviour
{
private WaitForSeconds wait = new WaitForSeconds(1f);
void Start()
{
CoroutineManager.Instance.StartManagedCoroutine(MyCoroutineRoutine());
}
IEnumerator MyCoroutineRoutine()
{
while (true)
{
// Do something
yield return wait;
}
}
}
2. 박싱 방지:
- 코루틴 내에서 값 타입을 반환하지 않도록 합니다. 예를 들어, yield return 0; 대신 yield break;를 사용합니다.
IEnumerator MyCoroutineRoutine()
{
while (true)
{
// Do something
yield return null; // or yield return new WaitForSeconds(1f); to avoid boxing
}
}
3. 클로저 사용 최소화:
- 람다나 익명 메서드를 사용하지 않거나, 필요한 경우 최소한으로 사용하여 클로저 객체 생성을 줄입니다.
CoroutineManager의 간접적인 장점
CoroutineManager가 가비지 생성을 직접적으로 줄여주지 않지만, 다음과 같은 간접적인 장점이 있습니다:
- 코루틴 재사용 촉진: 중앙 관리 방식은 코루틴을 더 체계적으로 재사용할 수 있게 도와줍니다. 이는 가비지 생성을 줄이는 데 도움이 됩니다.
- 효율적인 관리: 코루틴의 시작과 중지를 중앙에서 관리함으로써 불필요한 코루틴의 생성을 줄이고, 더 나아가 메모리 사용을 최적화할 수 있습니다.
결론
CoroutineManager 자체가 가비지 생성을 줄이는 직접적인 해결책은 아닙니다. 그러나 올바르게 사용하면 코루틴의 생성과 관리를 더 체계적으로 하고, 재사용 가능한 패턴을 도입할 수 있어 가비지 생성을 줄이는 데 도움이 됩니다. 코루틴을 재사용하고, 박싱을 피하며, 클로저 생성을 최소화하는 것이 가비지 생성을 줄이는 주요 방법입니다. CoroutineManager는 이러한 관리 작업을 더 쉽게 만들어 줄 수 있습니다.
소감
아직 코루틴을 많이 써보지도 않았고 코루틴매니저를 써 본적도 없다. 코루틴을 사용하게 된다면 코루틴매니저를 만들어서 어떤 점이 달라지는지 직접 경험해보자.
// 프로퍼티의 set에서 이벤트를 호출하는 경우?
주로 프로퍼티 값이 변경될 때 다른 시스템이나 객체에 변경 사항을 알리기 위해 사용된다.
(GPT)
이벤트 호출을 위한 게터, 세터, 프로퍼티- 기본구조 알기 - Beatchoi
이벤트 호출을 위한 게터, 세터, 프로퍼티- 기본구조 알기
Getter, Setter, Property를 이용해 이벤트 호출
beatchoi.github.io
// 유니티 콘텐츠 개발의 특성상 데이터의 은닉의 경우 그 활용도가 점점 줄어들고 있는 추세??
(GPT)


이런 시선도 있구나 정도...
'TIL' 카테고리의 다른 글
내일배움캠프 8주 1일차(34) TIL- Sibling, 3d팀프 (1) | 2024.06.03 |
---|---|
내일배움캠프 7주 토요일 TIL- 메모. 디자인패턴, layermask추가, enumflag (0) | 2024.06.02 |
내일배움캠프 7주 5일차(33) TIL - 디버깅 ,직렬화 메모 (0) | 2024.05.31 |
내일배움캠프 7주 4일차(32) TIL - 트러블슈팅 (0) | 2024.05.30 |
내일배움캠프 7주 3일차(31) TIL (0) | 2024.05.29 |