instance의 초기화를 위해서, 유니티 생명주기의 Awake, Start를 사용한다.
초기화 이후의 실행
아래의 상황을 보면서 다시 이야기해 보겠다.
"ObjectPool에 생성한 객체들의 초기화 작업이 이루어진 이후에 다음 동작을 수행한다."
위 예시를 구현하려 한다면, 아래와 같은 상황이 발생한다.
"객체가 초기화가 되었는지 어떻게 확인하지?"
단순히 bool 변수를 이용해서 초기화가 되었는지 확인할 수도 있다.
나는 이 부분에서 이렇게 구현해야 하는지에 대한 고민을 계속해서 하였다.
"초기화 되었는지를 확인하기 위해서 전용 public 변수를 만들어주어야 하는가?"
"Awake랑 Start 각각의 초기화가 실행되었는지 구분할 필요가 있다면?"
"서로 다른 기능을 가지는 모든 스크립트에 작성해 줄 것인가?"
"Awake에서 초기화가 끝나는 객체가 있는 반면, Start에서 초기화가 끝난다면?"
이런 질문들 때문에, 내가 내린 결론은 bool 변수로 초기화 작업이 이루어졌는지를 확인하는 것은 좋은 방법이 아니다.
didAwake와 didStart
위의 두 함수를 통해서, Awake와 Start가 호출되었는지를 확인할 수 있다.
using UnityEngine;
public class Example : MonoBehaviour
{
private void Awake()
{
Debug.Log(this.didAwake);
}
private void Start()
{
Debug.Log(this.didStart);
}
}//실행 결과 : true, true가 나오는 모습을 확인할 수 있다.
didAwake와 didStart는 ‘호출’되면 true를 반환합니다. 위의 코드에서 확인할 수 있듯이, Start 메서드 내에서 didStart를 하였을 때 true라는 결과를 확인할 수 있습니다.
기존의 Awake와 Start는 한번만 실행되기 위해서, c++쪽에 플래그가 있었다. 필요에 의해서 그 값을 노출한 것이다.
주의할 점
위의 didAwake와 didStart 프로퍼티는 2023.1부터 사용가능합니다.
'유니티 > 개념 정리' 카테고리의 다른 글
| Null Return (0) | 2024.12.03 |
|---|---|
| Call Back (0) | 2024.12.02 |
| GC(Garbage Collector) (0) | 2024.11.25 |
| 대리자 활용 (0) | 2024.11.19 |
| IEnumerable과 IEnumerator (0) | 2024.11.18 |