1. Start() vs Awake()
스타트와 어웨이크는 얼뜻보면 같아보인다.
하지만 그 의미가 아주 다른다.
마치 스타트는 생성자처럼 보인다. 왜냐하면 기본적으로 생성되어 나오기때문에,
기존 프로그래머들은 아마도 아~ 스타트는 생성자랑 비슷한가 보다..
라고 생각할것이다.
하지만 스타트는 전~혀 생성자 라고 말하기 힘들다.
생성자라기 보다는 업데이트직전에 불려지는 업데이트의 문이라고 생각하시면 더 정확할것이다.
그럼 반면에 어웨이크는 기본적으로는 보이기 않기때문에 잘 모르는 개발자가 있을수도 있지만,
어웨이크가 훨씬 생성자에 가깝다고 말할수 있다.
말그대로 깨어나다 라는 뜻을 가진 어웨이크는 그 클라스가 어웨이크 할때 즉 생성될때 불려진다.
왜 스타트와 어웨이크가 중요한가하면 다음의 소스를 보면 이해하기 쉬울것이다.
public class Cell : MonoBehaviour {
Renderer materialColor;
void Awake(){
}
// Use this for initialization
void Start () {
materialColor = GetComponent<Renderer> ();
materialColor.material.color = new Color(Random.Range(0.0f, 0.9f)
,Random.Range(0.0f, 0.9f)
,Random.Range(0.0f, 0.9f));
}
위와같이 스타트에서 materialColor를 정의한다면, 다른 게임메니져에서 이 prefab을 생성했을때에 과연 materialColor를 접근할수 있을까?
물론 퍼블릭이니까 접근가능하다, 하지만! NullPoint를 가질것이다.
왜냐하면 생성했다고 해서 스타스에 들어가지는 않기때문이다.
매니저의 스타트도 다 끝나고 업데이트를 하기 직전에 불려지는 것이 스타트이기때문이다.
그렇게 때문에 매니저에서 객체를 생성에서 조작접근하고 싶다면, 그 객체는 어웨이크를 생성자로 생각하고 개발하는것이 좋을것이다.
덕분에 개고생했다.
'IT > 유니티' 카테고리의 다른 글
배열 형태의 JSON데이타 가져오기 (Feat.JsonUtility) (1) | 2016.09.01 |
---|---|
2016/8/24 개발노트 (0) | 2016.08.24 |
20. 유니티 교육 (Sebastian Lague 강의-2DRunner #2) (0) | 2016.08.09 |
19. 유니티 교육 (Sebastian Lague 강의-2DRunner #1) (0) | 2016.08.08 |
18. 유니티 교육 (Sebastian Lague 강의-3DShooter #5) (0) | 2016.08.05 |