프로젝트 진행 중에 엑셀 등의 외부 요소와 연동을 하기 위해서 Json이나 Csv, ScriptableObject 등을 사용하는 건 일전에도 몇 번 설명한 적 있다.다만, 그 때에는 '직렬화/역직렬화 방법' 만을 서술했지, 그래서 어떻게 구성하면 되느냐는 서술한 적이 없다.그러니, 그것을 작성하는 방식에 대해서 '간략하게' 설명 해 보자.직렬화, 역직렬화직렬화는 프로그램 내부의 각종 요소들을 외부 프로그램으로 입/출력 할 수 있도록 '형태 자체를 간략화 시키는' 행위를 말하며, 역직렬화는 이렇게 '간략화 된 형태를 원상 복귀 시키는' 행위를 가리킨다.비단 게임 제작 뿐만이 아니라 프로그램 개발 전체에서 다른 부서와의 협업을 한다거나 자동화 시스템을 구축한다거나 하는 경우에 매우 자주 활용되는 개념으로, ..
상당히 단골 소재로 사용되는 소재인 '초기화'.다만, 실제로 써 보면 이 만큼 머리 아픈 요소도 별로 없다. 당연한 것이, 초기화 순서가 잘못되면 NullException이 뜨는데, 이 순서를 맞추는 것이 조금 만 복잡해 져도 머리가 아파진다.그렇기 때문에 이를 대처하기 위한 초기화 방식에도 종류가 다소 나뉘는 편.이전에는 '게임 오브젝트의 라이프 사이클과 이에 의한 난점'을 중점으로 서술했다면, 오늘은 '초기화' 그 자체에 집중 해 보자.외부 클래스 주체의 초기화초기화를 자기 자신이 시행하는 것이 아닌, 다른 총체 역할을 하는 클래스에서 하는 방식.Pacade 디자인과 함께 쓰면 강력한 초기화 방법으로, 초기화 순서와 시점이 확실하게 명시되기 때문에 이래저래 코드를 파악하기가 수월하다는 특징이 있다.초..
일전에, 3번에 걸쳐서 객체 지향에 대해서 서술한 적이 있다.[참고 URL]더보기1편 - https://lsu0503.tistory.com/76 Today I Learned - Day 22 [객체, 그 개념에 관하여 - 1]오늘날 프로그래밍 언어는 절차적 언어와 객체 지향 언어로 나뉘어 있다.[유니티에서 '정보 지향'이라는 새로운 개념을 꺼내어 들기는 했으나, 사실상 유니티의 단점을 우회하기 위한 것이라서lsu0503.tistory.com2편 - https://lsu0503.tistory.com/77 Today I Learned - Day 23 [객체, 그 개념에 관하여 - 2]1부: https://lsu0503.tistory.com/76 Today I Learned - Day 22 [객체, 그 개념에 ..
일전에 GetComponent의 최적화와 관련해서 정리했던 적이 있다.[참고 URL: https://lsu0503.tistory.com/121]이번에는 이와 무관한 최적화 요소에 대해서 정리 해 보자.금일은 다소 간단할 것이다.C# 자체의 구조적 한계C#은 기본적으로 쓰고 남은 클래스, 가비지의 정리를 '가비지 컬렉터'가 전담하고 있다.그리고, 이 가비지 컬렉터는 어지간한 무겁다는 연산들에 준하거나 그보다 더 높은 연산 부하를 자랑한다.즉, '힙 영역을 많이 사용할 수록 회적화에 적신호가 켜진다.' 힙 영역을 적게 사용해야 한다 = 인스턴스 수를 줄여야 한다는 것인데, 사실 이게 말 처럼 쉽지는 않다.거기다가 가독성이나 기타 여러 사항들을 고려했을 때에는 '클래스 수를 늘리는 게 유리한' 경우도 많기도 ..
UI를 작업하다 보면 Layout Group를 뗴어놓을 수가 없다.별다른 작업 없이 오브젝트를 균일한 간격으로 정리할 수 있는 매우 유용한 기능이다.하지만, 이를 사용하다 보면 몇 가지 난점을 가질 수 있다.바로, '정렬 순서가 하이어라키 상의 순서에 의존한다'는 것. 이외에도 겹쳐진 오브젝트들 사이에서의 표시 순서도 하이어라키 상의 순서에 의존한다. 이렇듯, UI 상에서는 하이어라키의 순서에 의존하는 요소가 상당수 존재하는데, 이 순서를 스크립트로 조절하려면 어떻게 해야할까.그리고 '이 요소를 이용해서 제작할 수 있는 유용한 기능'은 무엇일까.한번 살펴보도록 하자.SetSiblingIndex()오늘의 본문, 하이어라키 상에서 순서를 변경하는 함수다.사용할 수 있는 방식에는 4가지가 있다.Transfor..
코딩을 하다 보면 무아지경으로 코드를 써 내려가고 있는 경우가 있다.그 동안에는 희안하게도 머리속에서 로직이 자동으로 정리되어 가면서 술술 써내려가게 된다.그러나, 이렇게 작성을 했다면 반드시 후폭풍을 주의해야 한다. 어떤 한 가지 일을 하게 되면서 '습관'이 안 생길 수가 없다. 생기지 않는 것이 오히려 더 이상하다.그런데, 이 '습관' 중에서 완벽한 습관이라고 할 수 있는 습관도 없다.그렇기에 프로젝트에서 복기가 중요한 것이고, 동시에 리팩토링을 진행하는 이유이기도 한 것이다. 그렇다면 한번 살펴보자. 실수하기 쉬운 부분들을 말이다.아, 참고로 GetComponent도 있는데, 이건 이전에 정리했으니까 이번에는 생략하겠다.foreach문의 함정C#에서 쓸 수 있는 반복문은 크게는 2가지, 세부적으로는..
자, 어제 정리한 Activator.CreateInstance()에서 살짝 눈을 돌려 보자.var typeValue = Type.GetType(typeName); // typeName을 타입으로 변경/* 인자 없이 생성 */var typeClass = Activator.CreateInstance(typeValue);var typeClass = Activator.CreateInstance(typeValue, Object[]); // 인자 전달하며 생성자, 어제는 여기서 아래쪽을 설명했었다. 그러면 이번에는 위쪽을 보자. Type.GetType(typeName);이라는 문구가 보일 것이다.이는 typeName에 해당하는 타입, 즉 변수형을 반환하는 함수다.여기서 처음 보는 사람도 있을 거고, 이에 대한 지식..
프로그래밍을 하다 보면 '기능을 모르면 아예 연상도 못하는' 경우가 더러 있다. 만약에 event를 몰랐다고 가정 해 보자.코딩 자체가 클래스 간 자료 교환을 함수 호출으로 하는 것이 기초적인 방법인 탓에 event를 안쓰고도 대부분의 기능은 작성이 가능하다. 반대로 말하면, '별 다른 요소 없이, event를 자연스럽게 의식하는 것은 어렵다'라고도 말할 수 있을 것이다.[물론, event 자체는 워낙 중요한 시스템이다 보니, 이런저런 곳에서 많이 나와서 이럴 일이 그다지 없긴 하다.] 즉, 기존에 가능한 부분을 더욱 간단하게, 명료하게 정리할 수 있는 부분은 정말로 알아차리기 어렵다.오늘은 본인 기준으로는 그러했던 기능 중 하나를 설명하고자 한다.'한 변수에 Enum값에 따라 다른 자식 클래스를 할당해..
이번에도 찾아온 디자인 패턴 정리 시간이다.금일에는 '생성'과 관련된 패턴을 정리해볼까 한다.[참고 URL: https://refactoring.guru/ko]디자인 패턴 - 1 : https://lsu0503.tistory.com/120 Today I Learned - Day 59 [디자인 패턴 - 1]자, 금일 부터는 디자인 패턴에 대해서 설명해 보자.다만, 디자인 패턴은 형식이 정해진 것이 아니라, 개발의 편의성과 효율 등을 높이기 위한 일종의 '경향'이라는 것을 주의하도록 하자. '이렇lsu0503.tistory.com빌더[참고 URL : https://refactoring.guru/ko/design-patterns/builder]빌더라고 하면 개발자 입장에서는 코드를 Build하는 그것을 떠올릴..
저번 주 부터 최종 프로젝트에 돌입하였다.사실 주의 마무리로 적는다는 개념으로 작성하기에는 다소 많이 늦은 감이 있으나, 일단 WIL을 프로젝트 경과 정리용으로 작성하고 있는 터라, 앞으로도 기간은 벗어났어도 당 주에 작업한 내용에 대해서 서술하는 방식으로 작성하게 될 듯 하다.솔직히는 담당한 영역에 집중하다 보면 본 게시글을 작성할 시간이 녹록치 않은 것이 사실이기도 한 지라...[근데 이러면 WIL이 맞느냐는 의문이 든다는 점은 뒤로 넘기도록 하자... 이 때 까지 계속 이렇게 해온 터라 지금 바꾸기도 난감하다.] 더 이상 주 단위로 작성하기가 힘든 것으로 판단, 최종 프로젝트 별개의 카테고리로 분리하였다.다른 것이 아니라, 최종 프로젝트의 작업량 덕분에 TIL을 쓰면서 WIL까지 작성할 여유가 도저..