7cec9e36ebd518986abce89544807d6458


1. 다른 스크립트 (컴포넌트)의 내부 프로퍼티를 참고할때는 Start()에서 해라. Awake()에서 참조하려고 하면 참조대상이 초기화되기전에 코드가 먼저 실행될 수도 있어서 NullReferecne 에러가 난다




7ce99e36ebd518986abce8954e80776828


그래도 무조건 Awake에서 불러와야겠다 하면 Project settings에서 스크립트 실행 순서를 수정할 수 있는데, 이렇게 임의로 실행순서를 건드리는 것은 예상치 못한 사이드 이펙트를 초래할 수 있기 때문에 가급적이면 하지 말자

(GameManger가 무조건 spawner 보다 먼저 실행되게 해서 spawner가 GameManager를 참조할 수 있도록 함)




7cee9e36ebd518986abce89547837764cd7c


(스크립트 실행 순서를 조절 하니 Spawner가 GameManger의 level 프로퍼티를 잘 불러온다)



2. Prefab을 로드하는 방법은 Inspector에서 드래그 드랍 하는 방법 외에도 Resources 폴더에서 코드로 불러 올 수 있다.


-> 유니티에서 Resources 폴더는 프레임워크 매직의 영향을 받는 폴더이다. 루트/Resources에 위치한 파일들은 ResourcesLoad 메서드를 사용해서 로드 가능하다.


- 프리펩 이외의 다른 파일들도 가능할 것으로 판단된다.



결국 프리팹 같은 리소스를 메모리에 올릴때, 인스펙터 GUI에서 할당하는 방법과 코드로 할당하는 방법 2가지가 되는데, 두 방법을 혼용하지 않도록 멘탈 모델을 제대로 가져가야할 필요가 있겠다는 생각을 다시 한번 했다.


오브젝트의 내부 프로퍼티를 초기화 할 때도 비슷한 생각을 몇번 했는데, 분명 코드에서 transform을 줬음에도 불구하고, game scene에서는 이상한 값이 들어가있길래 확인해보니 Inspector에서 뚱딴지 같은 값이 들어가 있어서 존재하지 않는 버그와 섀도우 복싱을 뒤지게 했기 때문이다



74f3c028e2f206a26d81f6e04e86706e


(뜬금없이 Transform의 Z축이 음수로 되어있어서 생성되는 하위 Object가 바닥에 가려서 안보였다)


3dafd520e4d02be6e26b3e3fce01a9c40489c89ef72228de399978ca83ff6d5408


* 스크립트와 인스펙터 번갈아가면서 잘 보자. 아니면 앗싸리 둘 중 하나로만 밀고 가던가



3. Instantiate를 해줘야지 게임월드에서 상호작용이 가능하다.


Prefab 로드를 한다는건. 그냥 메모리에 올렸다!!! 이 뜻이다. 실제 게임에서 상호작용하려면 Instantiate 메서드를 사용해 실제 게임 월드에 올려야한다 <<< 매우 중요




4. LinQ Extension Method



분명 같은 리스트인데, using System.Linq 라고 특정 네임스페이스의 사용 유무에 따라서 자료형이 사용할 수 있는 메서드가 달라진다고??

좀 더 알아보니, 이런 확장 메서드는 사용자가 직접 만들어서 기본 자료형에 삽입할 수도 있다는데, 이건 너무 프로그래머들을 믿어주는게 아닌가...하는 생각이 든다.


C# 전문가한테 물어보니, 이런 모르면 쳐맞는 패턴들이 왕왕 있기에 자바나 dotnet에서 무거운 IDE를 선호하는 경향이 있다고 한다.


매우 흥미롭네요.....



7fed9e36ebd518986abce8954483746c3f



(OrderBy 메서드는 Linq 를 using하지 않으면 쓸수 없다~)




5. Collider가 스프라이트와 일치하지 않을때는 Reset을 누르면 알잘딱센 맞춰준다



7fec9e36ebd518986abce89545817064b0


이건 개꿀팁이 맞네요....







오늘 유니티 좀 하려고 휴가까지 쓰면서 방방 뛰면서 해봤는데, 뭔가 얻어가는 정보들은 많은데, 머리에 한번에 정렬이 되지 않네

항상 그렇듯 계속 반복하고 대가리도 박아보면서 머슬 메모리로 만드는 수 밖에 없겠다



30