본문 바로가기

전체 글

(277)
[Unity] 유니티 오브젝트의 null 확인 Preface: UnityEngine.Object 유니티에서의 모든 게임 오브젝트는 UnityEngine.Object로부터 상속을 받는다. UnityEngine.Object는 유니티 엔진에서 생성된 C++ 내부 구현 객체와 C#에서 해당 객체의 포인터를 참조하는 인터페이스 클래스로 구성되어 있다. 여기서 C++은 unmanaged 언어라 프로그래머가 객체의 메모리 해제 시점을 결정할 수 있지만 C#은 managed 언어이기 때문에 메모리 해제를 GC에 맡겨야 하는 차이가 있다. UnityEngine.Object의 파괴 유니티로 코딩을 하면서 UnityEngine.Object(혹은 그를 상속하는)를 파괴하려고 하면 Destroy() 또는 DestroyImmediate()를 호출하게 된다. 이때 위에 언급한..
LIS와 multiset 사실 이게 뭔진 모르겠지만 나 스스로 뭔가 흥미로운 방법으로 문제를 풀고 있는 것 같아 기록해둔다. 일단 이 문제를 보자. https://www.acmicpc.net/problem/19598 19598번: 최소 회의실 개수 서준이는 아빠로부터 N개의 회의를 모두 진행할 수 있는 최소 회의실 개수를 구하라는 미션을 받았다. 각 회의는 시작 시간과 끝나는 시간이 주어지고 한 회의실에서 동시에 두 개 이상의 회의 www.acmicpc.net 회의를 모두 진행할 수 있는 회의실의 최소를 구하는 것이다. 나는 이렇게 풀었다. 1. 빨리 끝나는 순서로 정렬한다. 끝나는 순서가 같으면 시작하는 시간이 빠른 순서로 정렬한다. 2. multiset을 준비한다. 첫 번째 회의는 trivial case로 두어 첫 번째 회의..
AtCoder Educational DP Contest J - Sushi 분석 https://atcoder.jp/contests/dp/tasks/dp_j J - Sushi AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp 앳코더에는 Educational DP Contest라고 PS에서 자주 출몰하는 26가지 유형을 정리한 DP 문제집이 제공되고 있다. 그중에서도 J는 기댓값을 다루는데 어떻게 푸는지 본인의 시행착오를 덧붙여 분석하고자 한다. 먼저 삼소멤 블로그에서는 다음과 같이 설명하고 있다. 다 좋은데 기댓값이 $\frac{N - (i + j + k)}{i + j + k}$ 라고 한다. 하지만 기하..
유니티 Terrain Sample Asset Pack 셰이더 오류 해결 에셋 스토어에서 유니티 공식으로 제공하는 지형 에셋인 Terrain Sample Asset Pack이 있다. 다양한 브러시나 각종 머티리얼을 제공하여 지형을 더 멋지게 만들 수 있도록 해준다. 하지만... 식물 프리팹을 쓰려고 하면 이렇게 충격적인 분홍색이 우리를 반겨준다. 이 문제를 해결해보도록 하자. 직접 수정하기 분홍색이 나오는 이유는 유니티에서 셰이더에 오류가 있을 때 나오는 기본 색이다. 오류가 나오는 이유 중 하나는 에셋이 URP나 HDRP를 쓰고 있는데 우리 프로젝트는 그렇지 않고 기본 렌더링 파이프를 쓸 때 호환이 맞지 않아서다. 따라서 우리는 프로젝트를 HDRP로 올려주거나 에셋의 렌더링 파이프를 빌트인 수준으로 내리는 작업을 해야 한다. 여기서는 재작업을 통해 에셋을 살려보겠다. 머티리..
CLion PS용으로 설정하기(파일 입출력, 다중 main) ICPC에서도 공식적으로 지원하는 IDE인 CLion은 많은 부분이 편하지만 표준 입출력을 리눅스처럼 파일을 줄 수 없다던가 프로젝트 단위로 지원해서 파일 하나하나에 main 함수를 넣을 수 없다던가 하는 문제가 존재한다. 이 포스트에서는 적절한 설정을 통해 CLion을 PS 환경에서 쓰기 편하게 하는 법을 알아본다. 파일 입출력 에디터에서 빨간 동그라미에 해당하는 메뉴에 프로젝트 명 뒤 옵션이 Debug로 되어있는지 확인한다. 그렇지 눌러서 Debug로 바꿔주자. 그리고 Edit Configuration 메뉴에 들어간다. Working Directory에 입출력 파일이 들어갈 폴더를 지정한다. 이러면 프로젝트에서 외부 파일 IO를 할 수 있는 root directory가 설정된다. 그 다음 CMakeL..