아카이브
보관된 모든 글
Height Map은 디스플레이스먼트가 아니라 패럴랙스다
면접에서 테셀레이션 이야기를 듣고 그게 뭔지 찾다가 스크랩한 입문 글이다. 테셀레이션과 디스플레이스먼트를 한 쌍으로 묶은 건 Microsoft 문서가 그렇게 적는 그대로다. 그런데 Unity에서 그 짝으로 보이는 칸, Standard 셰이더의 Height Map은 디스플레이스먼트가 아니다 — 문서가 패럴랙스 매핑이라고 적는다.
페이지는 2023년이라고 적고, 받아보면 2020 LTS판이다
퀄리티 좋은 모델을 쓰면 낮은 사양 PC에서 안 돌아갈 수 있다는 생각이 들어 최적화를 공부하다 스크랩한 안내 페이지다. 페이지는 2023년 10월 19일이라고 적어두는데, Read now로 받은 PDF 표지에는 '2020 LTS edition'이라고 적혀 있다. 그 간극이 본문 어디에 남아 있는지 네 절을 골라 대조했다.
노멀에 곱할 행렬을 정하는 건 역행렬이 아니라 벡터의 위치다
셰이더를 적용하며 공부하던 중 스크랩한 정점 처리 강의 노트다. 규칙 세 개를 명세와 대조했다 — 노멀에 곱하는 행렬, 카메라 축 셋의 외적 순서, 오른손에서 왼손으로 넘어갈 때 바꿀 것. 노멀 쪽은 역행렬이 틀린 게 아니라 벡터를 어느 쪽에 두는지가 빠져 있었다.
영상이 가르치는 세 단계가 이 에셋이 교체된 세 이유다
툰 셰이더를 올릴 예시 모델로 유니티짱을 쓰면서 방법을 찾다 스크랩한 2022년 영상이다. 지금 저장소를 열면 '유지보수나 릴리스 계획 없이 제공된다'고 적혀 있고, 후속 패키지 문서가 교체 사유 셋을 적어둔다 — 설치 방식, 파이프라인, 라이선스. 그 셋이 영상의 챕터 번호와 겹친다.
인스펙터에 띄우는 건 Exposed가 아니라 Show In Inspector다
셰이더를 공부하던 중에 스크랩한 Unity 공식 입문 문서다. 그런데 URL이 10.8이고 지금 에디터에 붙는 건 17.6이다. 그 사이에 프로퍼티 옵션표가 가장 많이 썩었다 — Exposed는 이름만 남고 뜻이 바뀌었고, 인스펙터 노출은 Show In Inspector가 가져갔다.
z를 거리로 읽는 함수와 그냥 버리는 함수가 따로 있다
FPS에서 커서를 숨겨 화면 중앙에 고정하고 그 지점에서 레이를 쏴 탄착점을 찾으려다 스크랩한 코드다. 원문은 z를 '카메라 기준으로 바꿔주는 보정'이라고 설명하는데, 문서는 그 z를 '결과 평면이 카메라에서 얼마나 떨어져 있는지'라고 적어둔다. 보정이 아니라 선택이고, 커서를 고정하면 그 값을 읽을 일조차 없어진다.
바라볼 점을 정하는 건 레이가 아니라 평면이다
탑다운 조작을 쓰려고 방법을 찾던 중 스크랩한, 마우스 쪽을 바라보게 하는 짧은 코드다. 방법이 맞는데, 평면을 원점에 두고 높이를 따로 끼워 넣는 모양이 되었다. 평면을 오브젝트 위치에 두면 그 보정이 사라진다.
멈출 수 있는 건 '현재 설정된 클립'뿐이다
동영상에서 뽑은 사운드를 한 번만 재생하는 방법을 찾다가 스크랩하고, TTS 프로젝트의 대사·효과음 작업에서 다시 꺼내 본 글이다. Play()와 PlayOneShot()의 차이를 두 문단으로 정리해뒀다. 차이는 맞는데, 그 차이가 데려오는 결과가 빠져 있다. 문서는 Play·Pause·Stop을 한 클립의 삼종으로 묶고, PlayOneShot을 그 바깥에 둔다.
그리기 순서를 정하는 건 둘이 아니라 셋이다
인스펙터의 Tag와 Layer가 무엇을 하는 칸인지 찾다가 걸린 학습 일지다. Sorting Layer와 Order in Layer로 2D 그리기 순서를 설명한다. 둘 다 맞는데, 문서는 그 둘을 '더 높은 우선순위의 기준'이라 부르고 그 아래에 하나를 더 둔다. 그리고 레이어 이름을 잘못 적으면 조용히 Default로 간다.
LocalLow에 있는 건 dataPath가 아니라 persistentDataPath다
JSON 세이브를 dataPath에 쓰고 있었던 터라 정확한 경로를 기억해두려고 스크랩한 글이다. 동적으로 만든 파일이 어디로 가는지 정리해뒀다. 그런데 dataPath와 persistentDataPath의 설명이 서로 바뀌어 적혀 있다. 경로 멤버는 셋이 아니라 다섯이고, 상대 경로는 둘 중 어느 쪽 기준도 아니다.
마스크가 고르는 건 부위고, 나머지를 채우는 건 아래 레이어다
IK와 아바타 마스크를 조합해 상체에만 애니메이션을 걸려고 찾던 중 스크랩한 글이다. 아바타 마스크를 만들어 레이어에 꽂는 절차를 보여준다. 절차는 맞는데 마스크가 정하는 것은 어디까지인지가 빠져 있다. 부위 목록은 문서 두 곳에서 다르고, 마스크를 지탱하는 규칙은 본문이 아니라 툴팁에 있다.
스크롤 위치를 쥐고 있는 건 설정이 아니라 쓰는 순서다
스크롤 뷰 작업의 불편을 해결하려고 찾던 중 스크랩한, 팝업의 스크롤 뷰가 매번 맨 아래에서 열리는 기록이다. 저자는 원인을 부모의 오픈 애니메이션으로 찾아냈지만 어떤 상호작용인지는 모르겠다고 적었다. 문서도 프레임 안의 순서를 글로는 적지 않는다. 대신 알아내는 수단과 미루는 수단을 적어둔다.
화질을 쥐고 있는 건 Color Format이 아니라 해상도와 Aspect Ratio다
컷신을 동영상으로 돌리려고 UI에 동영상을 띄우는 글을 스크랩했다. 절차는 맞는데 화질이 나쁜 원인을 Color Format으로 지목하고, 끝났다는 사실을 아는 방법은 한 번도 안 나온다. 문서가 손잡이로 적어둔 것은 해상도와 Aspect Ratio이고, 렌더 텍스처를 아예 거치지 않는 모드가 따로 있다.
Content가 늘어나는 방향을 정하는 건 Anchor가 아니라 Pivot이다
Scroll View에 Layout 컴포넌트로 항목을 넣는 강좌다. 절차대로 하면 만들어진다. 그런데 Content에 Anchor를 설정하라고 적힌 축은 Content Size Fitter가 가져가는 축이고, 방향을 정하는 Pivot은 한 번도 언급되지 않는다.
에러 페이지가 돌아와도 result는 ConnectionError가 아니다
유니티에서 TTS를 구현한 2022년 글이다. 구글 번역 웹 UI의 내부 주소를 호출한다. 그 주소가 언제 막히든 이 코드는 알 수 없다. 실패 다섯 가지 중 하나만 보고 있고, 나머지는 성공 분기로 들어간다.
읽기 전용인 건 클립이 아니라 Animation 창의 뷰다
에셋스토어에서 받은 애니메이션이 ReadOnly로 떠서 수정 방법을 찾던 중 스크랩한 글이다. 복제가 답이라고 적혀 있다. 그런데 읽기 전용인 것은 클립이 아니라 창 하나였고, 수정이라 부를 만한 일의 상당수는 복제 없이 된다.
늘어나는 래그돌을 붙잡는 건 Strength가 아니라 projection이다
래그돌 사용법 글이 엿가락처럼 늘어나는 몸을 Strength 값 탓으로 설명한다. 그런데 Strength는 유니티 매뉴얼 어디에도 설명이 없고, 늘어남에는 전용 페이지가 따로 있다. 그 페이지가 지목하는 것은 다른 것이다.
started와 performed 사이에 있는 건 press threshold다
Input System 입문 글의 저자가 끝내 답을 못 찾고 남긴 질문이 있다. started와 performed가 왜 똑같이 동작하느냐는 것이다. 답은 프레임이 아니라 문턱값 두 개에 있고, 문서는 그 답을 적어놓은 페이지에서 자기 말을 뒤집는다.
스냅샷을 권하고, 코드가 스냅샷에서 빼낸다
Audio Mixer 설정 절차를 정리한 2023년 글이다. 믹서를 쓰는 이유로 스냅샷을 들고, 바로 뒤의 코드가 그 세 파라미터를 스냅샷의 손에서 영구히 빼낸다. 문서에 한 줄로 적혀 있다.
await Awaitable은 변수에 담을 값이 없다
Awaitable을 소개하는 2025년 글이다. 지적한 제약은 지금도 맞는데, 그 제약을 보여주는 예제 두 줄이 컴파일되지 않는다. 그리고 글이 아쉬워한 기능 중 둘은 문서에 멤버로 있다.
1 << -1은 에러가 아니라 31번 레이어다
OverlapSphere로 주변을 탐색하는 2022년 글이다. 레이어를 이름으로 받아오는 것까지는 좋은데, 그 값을 직접 시프트한다. NameToLayer가 -1을 돌려주면 그 식은 예외 대신 31번 레이어를 가리킨다.
익명 함수를 못 지우는 건 익명이라서가 아니다
Action으로 이벤트를 등록하는 2022년 글이다. 동작 설명은 정확한데, 「익명 함수는 삭제 불가」라는 주석이 이유를 가린다. 못 지우는 건 익명이기 때문이 아니라 같은 인스턴스를 들고 있지 않아서다.
백틱은 세 개가 아니라 세 개 이상이다
옵시디언 코드 블록 정리글이다. 설명은 대체로 맞는데, 백틱을 '세 개'로 못 박은 자리에서 글 자신의 첫 예제가 걸린다. 코드 블록 안에 코드 블록을 넣으려고 백틱을 이스케이프했는데, 문서에는 그럴 필요가 없다고 적혀 있다.
Unload(false)는 인스턴스를 내리지 않는다
Unite Seoul 2025 최적화 세션 필기다. 스무 항목쯤을 문서와 하나씩 대조했다. 대부분 맞는데 다섯이 걸린다. 가장 위험한 건 AssetBundle.Unload의 인자 설명이 뒤집혀 있는 쪽이다.
아웃라인은 셰이더가 아니라 정점 복제다
Outline 컴포넌트 문서를 스크랩했는데 Unity 5.3판이다. 그런데 현행 문서와 글자가 거의 같다. 안 바뀐 것이고, 그래서 Use Graphic Alpha의 설명이 프로퍼티 이름과 어긋나는 것도 그대로 남아 있다.
asmdef를 만들면 Assembly-CSharp가 안 보인다
어셈블리 정의 파일 문서를 스크랩했는데 2017.4판이다. 종속성이 한 방향이라는 설명은 맞지만, 반대 방향이 '금지'라는 말이 없다. 그게 '전부 쓰거나 전혀 쓰지 말라'는 권고의 실제 이유다.
Lite 버전은 셰이더 목록에 뜨지 않는다
lilToon 공식 문서의 소개 페이지다. Lite 버전은 직접 설정하지 말고 변환해서 쓰라고 권하면서 이유로 '직관적'을 적는다. 실제 이유는 그 셰이더 이름이 Hidden/으로 시작해서 머티리얼 드롭다운에 아예 뜨지 않는 것이다.
정의가 설명한 건 셰이더가 아니라 픽셀 셰이더다
셰이더가 무엇인지 정리한 2024년 글이다. 표기법 논증은 출처까지 들고 와서 정확한데, 정의 한 문장이 두 절 뒤의 구조 설명과 충돌한다. 거기 적힌 건 셰이더가 아니라 픽셀 셰이더다.
`--parameters`라는 플래그는 없다
Ollama를 로컬에서 API로 띄우는 절차를 11절로 정리한 가이드다. 설치와 CLI는 그대로 쓸 수 있는데, 정작 호스팅에 관한 세 절이 각각 틀렸다. 그리고 여러 클라이언트가 붙을 때 가장 먼저 걸리는 설정이 가이드에 없다.
첫 예제는 `type`이 아니라 `pizza`를 비교한다
Head First를 따라 팩토리 패턴을 정리한 2016년 글이다. 개념 설명은 교과서대로인데 코드가 셋 다 깨져 있다. 그리고 그 셋이 전부 같은 구멍으로 떨어진다. 타입을 문자열로 받으면 컴파일러가 볼 수 있는 게 없다.
`--memory-swap=0`은 스왑을 끄지 않는다
컨테이너 자원 제한 옵션을 표로 정리한 2017년 글이다. 지도로는 쓸모 있는데 복사해 쓰면 걸리는 자리가 셋 있다. 스왑 규칙 둘이 서로 반대로 적혀 있고, 예제의 스왑 용량이 두 배이고, period 기본값이 10배다.
탄성과 마찰은 물체가 아니라 한 쌍이 가진 값이다
Rigidbody와 Physics Material을 직접 돌려보며 정리한 2020년 학습 기록이다. 관찰은 좋은데 글쓴이가 끝까지 못 푼 의문이 둘 있다. 둘 다 같은 자리에서 풀린다. 탄성과 마찰은 한쪽 물체의 값이 아니라 충돌하는 두 콜라이더가 함께 만드는 값이다.
GC를 길게 만든 건 캐시 크기가 아니라 포인터 개수다
Discord의 Go → Rust 전환 글은 진단이 정확하고 지금도 맞다. 그런데 돌려본 손잡이가 둘뿐이다. GOGC는 빈도만 바꾸고 캐시 크기는 적중률을 깎는다. 스캔 비용을 정하는 변수는 포인터 개수이고, Go는 포인터 없는 객체를 아예 스캔하지 않는다.
IsConnected가 Connecting을 보고 있다
시그널링 서버부터 카메라 송출까지 통째로 보여주는 튜토리얼이다. 그런데 IsConnected가 Connecting과 비교하고 있어서, 연결이 실제로 성립한 순간 Disconnect 버튼이 죽는다. RemoveTrack과 OnNegotiationNeeded에도 각각 구멍이 있다.
Override Tags는 태그를 무시하지 않는다
TextMeshPro 인스펙터 칸들을 훑은 정리 글인데, 네 칸이 다른 걸 가리킨다. Override Tags는 색 태그만 무시하고, Text Wrapping Mode에 Overflow라는 값은 없고, Extra Settings에는 윤곽선도 그림자도 없고, Text Style은 Font Style이 아니다.
SetActive(false)는 코루틴을 멈추는 게 아니라 끝낸다
클리핑의 ObjectPool 구현은 공식 API를 제대로 쓴다. 그런데 OnGet과 OnRelease가 SetActive 한 줄뿐이다. 매뉴얼이 반납할 때 되돌리라고 적어둔 여섯 가지 중 하나도 안 하고, SetActive(false)가 끝낸 코루틴은 다시 켜도 돌아오지 않는다.
Control Child Size를 켜면 크기를 묻는 상대가 바뀐다
레이아웃 그룹 인스펙터 설명은 정확하다. 그런데 Control Child Size를 켜면 자식이 0으로 사라지는 이유가 빠져 있다. 이 체크박스는 크기를 Rect Transform이 아니라 레이아웃 요소 속성에서 읽게 만들고, 맨 RectTransform의 그 값은 0이다.
음소거를 풀면 dB가 선형값 자리에 들어간다
AudioMixer로 볼륨을 조절하는 이유와 log 변환 설명은 정확하다. 그런데 음소거 해제 코드가 dB를 선형값 자리에 넣어서, 볼륨이 복구되는 대신 NaN이나 -Infinity가 들어간다.
안드로이드에서 escape는 뒤로 가기 버튼이다
에디터에서 안 멈추니까 #if UNITY_EDITOR로 가르라는 조언은 정확하다. 그런데 이 스크립트를 그대로 안드로이드에 올리면 뒤로 가기 버튼이 종료 버튼이 되고, 문서는 애초에 안드로이드에서 이 함수를 권하지 않는다.
일방통행 플랫폼은 방향이 아니라 각도다
PlatformEffector2D를 찾아낸 것까지는 정확하다. 다만 이 컴포넌트가 실제로 판단하는 것은 '위에서 왔나 아래에서 왔나'가 아니라 충돌 법선이 호(arc) 안에 있느냐다. 그 각도를 모르면 가장자리에서 걸린다.
Claude Code에 돈을 내야 하는 건 MCP 때문이 아니다
MCP for Unity를 붙이는 절차는 따라 할 만하다. 다만 글이 출발점으로 삼은 전제 — 'Claude Code는 MCP 연결에 결제가 필요하다' — 가 문서와 다르고, 제품 이름 둘이 섞여 있다.
미할당 필드의 Fake Null은 에디터에서만 생긴다
Fake Null의 원리 설명은 정확하다. 그런데 뒤에 붙은 '연산 비용 줄이기' 목록이 거의 전부 어긋난다. 같은 함수를 부르는 것을 더 싸다고 하고, 컴파일되지 않는 코드가 둘 있다.
Mirror로 수천 명 동접? 공식 가이드는 인스턴스당 200~300을 말한다
NetworkRoomManager로 멀티플레이 방을 붙이는 절차는 따라 할 만하다. 다만 첫 문단의 규모 이야기가 Mirror 자체 가이드와 한 자릿수 다르고, 씬 네 칸을 짝짓는 방식이 소스 주석과 반대다.
Unity WebRTC 샘플에는 시그널링이 없다
PeerConnection 샘플을 따라가며 개념을 잡는 2022년 글이다. 그런데 이 샘플에서 SDP와 ICE를 주고받는 자리는 네트워크가 아니라 GetOtherPc()라는 메서드 호출이고, 글이 첫 단계로 시키는 WebRTC.Initialize()는 지금 없다.
InputField에 엔터가 안 먹는 이유: 조건문이 캐시를 본다
키보드로도 마우스로도 이름을 입력하려고 쓴 코드인데, 키보드 쪽이 마우스를 한 번 누르기 전까지 동작하지 않는다. 조건문이 인풋필드가 아니라 Awake에서 캐시한 문자열을 보기 때문이다.
PlayerPrefs의 경로는 Company Name과 Product Name으로 조립된다
저장 경로를 알려주는 짧은 글인데, 그 경로가 Player Settings 두 칸으로 조립된다는 게 요점이다. 그 두 칸을 바꾸면 저장한 데이터는 PlayerPrefs로 다시 못 읽는다.
OverlapCapsule의 point0·point1은 캡슐의 끝이 아니다
문서가 point0을 '캡슐 start 쪽 구의 중심'이라고 적는다. 끝점이 아니라 반구의 중심이다. 이걸 맨 끝으로 읽으면 캡슐이 반지름의 두 배만큼 커진다.
Newtonsoft Json 설치: 버전 칸은 비우는 자리다
com.unity.nuget.newtonsoft-json 설치 글을 따라가다 버전 칸이 걸렸다. 3.0.1을 적고 Update를 누르라는 2단계는 통째로 필요 없고, 하필 그 3.0.1이 IL2CPP 관련 수정 이전 버전이다.
Generate C# Class의 본체는 SetCallbacks다
Input System을 설치부터 세 가지 제어 방식까지 훑는 2024년 글을 현행 문서와 대조했다. 예제 세 개에 전부 들어 있는 죽은 조건문이 하나 있고, 생성된 클래스는 정작 그걸 쓸 이유가 되는 기능을 안 쓰고 있다.
플레이 타임은 DateTime이 아니라 TimeSpan이다
타임 어택 게임의 경과 시간을 UI에 띄우려고 현재 시각 유틸리티를 스크랩했는데, 정작 필요한 건 다른 타입이었다. 경과 시간의 타입도, 읽어야 할 시계도, 포맷 문자열의 규칙도 다르다.
isGrounded는 센서가 아니라 지난 Move의 기록이다
isGrounded가 제대로 동작하지 않아 레이캐스트로 바꿨다는 글을 현행 문서와 대조했다. 증상도 해법도 실재하는데, 문서를 보면 원인이 다른 데 있고 해법의 숫자에도 문제가 있다.
IK Pass가 꺼져 있으면 IK 함수 여섯 개가 전부 무음이다
Animator의 프로퍼티와 함수를 정리한 2021년 공부 노트를 현행 문서와 대조했다. 설명은 정확한데, 적힌 스위치를 무효로 만드는 조건 쪽이 비어 있다. 세 군데가 그랬다.
[MenuItem]은 Editor 폴더로 가야 하는데, MonoBehaviour는 거기 못 간다
애트리뷰트 열여덟 개를 정리한 2021년 글을 현행 문서와 대조했다. 대부분 맞는데, 한 예제는 요구가 서로 충돌하고, 하나는 문서가 쓰지 말라고 하며, 하나는 막아주는 범위가 생각보다 좁다.
Release를 먼저 부르면 Completed는 무효해진 핸들을 받는다
Addressables를 정리한 2023년 글을 현행 문서와 대조했다. 예제 코드의 해제 순서에 문제가 있고, 헤맸다는 중복 키 문제는 문서에 한 줄로 적혀 있다. 출발점이었던 언리얼의 소프트 참조와 나란히 놓으면 그 해제 문제가 더 분명해진다.
OverlapSphere는 Ignore Raycast 레이어를 무시하지 않는다
같은 Physics 클래스인데 Raycast와 OverlapSphere의 기본 레이어 마스크가 다르다. 쿼리에서 빼두려고 Ignore Raycast에 올려둔 오브젝트가 OverlapSphere에는 그대로 잡힌다.
CrossFade의 0.3f: 한쪽은 0.3초고 한쪽은 아니다
2014년에 쓰인 CrossFade 설명을 확인했다. 그 글은 맞다. 다만 지금 쓰는 컴포넌트에는 같은 이름의 메서드가 따로 있고, 두 번째 인자의 단위가 다르다.
Clamp이 두 개다: 인자를 거꾸로 주면 한쪽만 예외를 던진다
Mathf.Clamp 설명은 네 줄이면 끝난다. 문제는 그 네 줄 바깥이다. 인자를 거꾸로 줬을 때, NaN이 들어왔을 때, 그리고 각도를 클램프할 때 무슨 일이 생기는지 확인했다.
렌더 파이프라인은 에셋이고, 빌트인은 그 칸이 비었을 때의 결과다
Unity의 렌더 파이프라인 소개 문서를 읽었다. 셋 중 하나를 고르는 문제로 알고 있었는데, 문서를 따라가 보니 빌트인은 고르는 게 아니라 아무것도 배정하지 않았을 때 남는 것이었다.
빌트인 셰이더 예제 13개: 목록 아래로 갈수록 URP로 안 넘어온다
Unity 공식 HLSL 셰이더 예제 13개는 전부 빌트인 전용이다. 위쪽 몇 개는 이름만 바꾸면 URP에서 돌고, 라이팅부터는 재작성이다. 예제별로 어디까지 넘어오는지 대조했고, 그 과정에서 앞 글에서 틀린 줄도 나왔다.
커스텀 셰이더 문서의 표는 목차가 아니라 분기다
Unity의 Custom shaders 페이지에는 URP 줄과 빌트인 줄이 따로 있다. 인터넷에서 찾은 셰이더 코드가 컴파일조차 안 되는 이유가 대개 그 갈림이다. 양쪽의 실제 차이와, 아무도 안 누르는 Troubleshooting 줄 아래 있던 내용을 정리했다.
Unity 코드 최적화 문서는 목차의 목차다: 두 층 내려가서 건진 규칙들
Unity 매뉴얼의 Code optimization 페이지는 링크 다섯 줄이 전부다. 그 다섯 중 넷이 또 목차였다. 끝까지 내려가서 실제로 코드를 바꾸게 만드는 항목만 추렸다.
Sentis 워크플로 6단계: 문서 코드가 생략한 소유권과 블로킹
Sentis 공식 워크플로 문서는 여섯 단계짜리 뼈대다. 그 뼈대가 생략한 것 — Resources 폴더, 텐서 소유권, 결과를 읽는 줄에서 발생하는 GPU 대기 — 를 같은 문서의 다른 페이지와 대조해 정리했다.
443은 TCP만이 아니다
위키백과의 TCP/UDP 포트 목록을 IANA 등록부와 대조했다. 443에 UDP가 빠져 있고, 동적 포트 구간은 실제 리눅스 값과 다르고, 1024번 경계는 고정이 아니다.
Read 한 번이 메시지 하나가 아니다
TcpListener.AcceptTcpClient 문서를 스크랩해뒀었다. 예제 코드가 TCP를 메시지 단위로 다루고, 같은 문서 세트의 다른 페이지에는 고쳐진 판이 올라가 있다.
포크 세 번 끝에 공식판이 나왔다
URP용 글리치 이펙트 패키지의 README를 스크랩해뒀었다. 지금 그 저장소를 열면 저자가 더 이상 갱신하지 않는다는 공지와 함께 keijiro의 공식 URP판을 가리킨다.
FreezePositionY가 얼리는 건 월드 Y다
RigidbodyConstraints를 정리한 글을 매뉴얼과 대조했다. 열거형 멤버 넷이 빠져 있고, 어느 축을 기준으로 얼리는지가 없고, 비트 연산 설명이 두 군데 어긋난다.
huggingface-cli는 없어졌고, SSL 오류의 답은 따로 있다
Hugging Face 모델을 통째로 받는 세 가지 방법을 정리한 글을 확인했다. 그중 둘이 쓰는 명령이 v1.0에서 제거됐고, SSL 오류에 git을 권한 건 맞지만 이유가 글에 적힌 것과 다르다.
ident가 아니라 peer다
우분투에 PostgreSQL을 설치하는 2021년 글을 확인했다. 이 글대로 나오는 12는 2024년에 수명이 끝났고, 인증 방식 설명은 처음부터 한 단어가 어긋나 있었다.
파도 전선이 뭔가 했더니 wavefront였다
Unity의 GPU 최적화 how-to 한국어 페이지를 영문 원문과 대조했다. 용어가 한 문서 안에서 갈리고, 프레임 디버거 항목은 번역이 아니라 원문이 그렇게 적혀 있다.
댓글에서 된다고 확인된 그 기능은 OpenCode 1.3.0에서 빠졌다
OpenCode 사용 후기와 설치 가이드를 지금 기준으로 확인했다. 글이 지금은 된다고 적은 기능은 공식 문서가 금지라고 적게 됐고, JSON 예시에는 복사하면 깨지는 흔적이 남아 있다.
8개월 된 설치 가이드: oh-my-opencode는 이제 그 이름이 아니다
2026년 1월에 나온 oh-my-opencode 설치 가이드를 지금 기준으로 확인했다. 프로젝트 이름부터 바뀌었고, 글이 경고한 Anthropic 구독 차단은 4월에 실제로 시행됐다.
Ollama 응답이 길었던 건 답변이 길어서가 아니다
Ollama API를 훑은 메모를 공식 문서와 대조했다. 답변이 너무 길다던 것의 원인은 stream 하나인데, 원문은 세 가지를 한꺼번에 바꿔서 원인이 셋으로 나뉘어 있었다.
공식 문서를 스크랩했더니: Mirror 문서에 없는 메서드가 하나 적혀 있다
이번 스크랩은 Mirror의 Network Manager 공식 문서 그 자체다. 대조할 원문이 없으니 문서를 소스와 대봤더니, 존재하지 않는 메서드 이름과 실제와 다르게 읽히는 문장이 나왔다.
USING HASH는 InnoDB에서 조용히 B-Tree가 된다
MySQL·MariaDB 인덱스 생성과 EXPLAIN을 정리한 글을 매뉴얼과 대조했다. 해시 인덱스 레시피는 InnoDB에서 동작하지 않고, EXPLAIN 컬럼 설명 넷이 틀렸다.
Mirror 설계 패턴 글의 예제가 씬 전환에서 깨지는 이유
Mirror의 올바른 설계 패턴을 정리한 글을 확인했다. 큰 그림은 맞는데 마지막 예제가 SceneManager.LoadScene을 부른다. 늦게 들어온 클라이언트가 엉뚱한 씬을 받는다.
Mirror 사전 지식: 에셋스토어 배포본은 GitHub보다 1년 넘게 뒤처져 있다
Mirror를 붙이기 전에 알아둘 것들을 정리한 글을 다시 봤다. 개념 설명은 지금도 맞는데 첫 항목이 걸린다. 에셋스토어 배포본은 2025년 2월에 멈춰 있고 GitHub 릴리스는 계속 나오고 있다.
Mirror NetworkManager 인스펙터 다시 읽기: Network Address는 서버가 쓰지 않는다
NetworkManager 인스펙터를 항목별로 정리한 표를 소스의 툴팁과 대조했다. 그룹 배치가 어긋난 곳이 있고, Headless Start Mode의 선택지와 Evaluation Interval의 단위는 틀렸다.
Mirror의 Command와 RPC: 서버에서 실행된다는 게 안전하다는 뜻은 아니다
Mirror의 Command, ClientRpc, TargetRpc를 정리한 글을 다시 봤다. 접두사 규칙과 인자 타입이 지금과 다르고, 무엇보다 예제 코드가 서버 권위를 무력화하는 패턴을 그대로 담고 있다.
Unity JsonUtility 정리: 제약은 JSON이 아니라 직렬화기에서 온다
JsonUtility의 제약 목록을 외우는 대신 하나의 규칙으로 정리했다. 인스펙터에 안 보이면 JSON에도 안 담긴다. 그리고 문서에 없는 가장 위험한 항목인 다형성 문제까지.
문자 인코딩 정리: 유니코드는 2바이트가 아니다
ISO 8859-1부터 EUC-KR, CP949, UTF-8까지 정리한 글을 다시 봤다. 널리 퍼진 오해 세 개를 공식 문서와 직접 측정한 바이트로 바로잡고, 글자가 깨졌을 때 원인을 역추적하는 방법까지 정리했다.
ML-Agents 설치 문서 읽기: 파이썬 3.10.12는 권장이 아니라 상한이다
ML-Agents 설치 절차가 왜 이렇게 까다로운지를 툴킷이 두 조각으로 나뉜 구조에서 짚었다. Conda와 3.10.12 지정의 이유, Unity 패키지와 Python 패키지의 버전 짝, 그리고 Sentis와 Inference Engine이라는 두 이름까지.
InputAction을 직접 구독하기: 델리게이트로 다루는 입력의 수명
PlayerInput의 Behavior 대신 InputAction을 코드에서 직접 구독하는 방식을 정리했다. 등록과 해제를 짝으로 두는 이유, 액션을 누가 활성화하는가, 그리고 문자열로 액션을 찾는 것의 비용까지.
GPU 인스턴싱 셰이더: 한국어 매뉴얼의 매크로 이름에 A가 빠져 있다
커스텀 셰이더에 GPU 인스턴싱을 붙이는 Unity 2021.3 매뉴얼을 지금 기준으로 다시 봤다. 한국어 페이지에 매크로 오타가 세 군데 있고, 렌더 파이프라인 호환성 표는 그 사이에 바뀌었다.
Git LFS 추적 해제하기: `git lfs uninstall`은 기본이 전역이다
LFS 추적을 해제하고 GitHub 저장공간을 되찾는 절차를 정리한 2021년 글을 지금 기준으로 다시 봤다. 명령어 세 개의 설명이 실제 동작과 다르고, GitHub의 LFS 정책도 그 사이에 바뀌었다.
Docker 빌드와 실행 다시 보기: `docker build .`의 점은 Dockerfile 경로가 아니다
DB를 컨테이너에 격리해두려고 찾다가 스크랩한 글이다. `docker build .`의 점이 무엇인지, 예제 Dockerfile이 왜 실제로는 실행되지 않는지, 그리고 정작 DB를 올릴 때 필요한 것들은 무엇인지 정리했다.
DeepVoice AI 에셋 다시 보기: '외부 연결 없이 독립적으로'가 아니었다
로컬에서 도는 TTS 에셋을 찾다가 스크랩해둔 리뷰였는데, '완전히 독립적으로 동작한다'는 결론이 사실과 달랐다. 그 근거는 원문 안에 이미 네 개나 적혀 있었다. 그럼 정말 로컬로 도는 건 무엇인지까지 정리했다.
Mirror의 클라이언트 사이드 예측: Physics.Simulate 없이 되감기
예측이 왜 필요하고 어떻게 동작하는지, 그리고 Mirror가 물리 씬 전체를 재시뮬레이션하지 않는 대신 무엇을 포기했는지 정리했다. 문서가 2024년 3월에 멈춰 있다는 점과 그 사이 코드는 계속 움직였다는 점도 함께.
Unity PlayerInput 정리: Behavior 하나가 코드를 통째로 바꾼다
PlayerInput의 API 레퍼런스는 프로퍼티 목록일 뿐이라 정작 필요한 걸 알려주지 않는다. Behavior 네 가지가 왜 서로 다른 코드를 요구하는지, 콜백이 왜 여러 번 오는지, 그리고 싱글플레이어에 이 컴포넌트가 필요한지를 정리했다.
Cinemachine Follow Camera 뜯어보기: Binding Mode는 회전 모드가 아니다
레이싱·러너 게임의 추적 카메라를 만드는 Follow Camera를 Cinemachine 3 기준으로 정리했다. Binding Mode가 실제로 무엇을 정하는지, 그리고 흔히 오해되는 마우스 입력·Target Offset을 공식 문서로 바로잡았다.
AWS 마켓플레이스로 뒤끝 구독하기: 경고문이 왜 붙어 있는지부터
뒤끝을 AWS 마켓플레이스에서 구독하는 절차와, 안내문에 붙은 두 개의 경고가 왜 붙어 있는지를 AWS SaaS 온보딩 구조로 설명했다. 해지가 무엇을 정지시키는지와 요금이 어디에 적혀 있는지도 정리했다.
AWS 데이터 전송 비용: 요금표가 아니라 경계선을 봐야 한다
2021년에 정리된 AWS 데이터 전송 요금 글을 지금 기준으로 다시 봤다. 숫자는 이미 여러 번 바뀌었지만 구조는 그대로다. 무엇이 경계선이고, 원문의 어느 부분이 지금은 틀렸는지 정리했다.
Unity용 Gemini 클라이언트를 뜯어보다: 클라이언트에 API 키를 넣는다는 것
asus4/google-gemini-unity는 Unity에서 Gemini API를 부르는 비공식 클라이언트다. 설치 절차와 의존성 체인을 정리하고, README가 안내하는 .env 방식이 배포 빌드에서 왜 성립하지 않는지, 그럼 무엇을 써야 하는지까지 짚었다.
서명된 APK 뽑기: 진짜 결과물은 APK가 아니라 키스토어다
오픈 소스 앱을 직접 빌드해보려다 정리한 글. Android Studio의 Generate Signed Bundle/APK 절차와, 이 절차에서 한 번 만들면 되돌릴 수 없는 키스토어를 어디에 두어야 하는지, Play의 AAB 요구와 앱 서명이 무엇을 바꿨는지까지 짚었다.
Unity 광고 미디에이션 정리: 워터폴이 끝나고 비딩만 남았다
미디에이션이 무엇이고 워터폴과 인앱 비딩이 어떻게 다른지, 그리고 클라이언트 개발자 입장에서 이 SDK가 빌드에 무엇을 붙이는지 정리했다.
Sentis에서 텐서 데이터에 직접 접근하기: 리드백을 피하는 이유와 방법
온디바이스 추론의 병목은 대개 추론 자체가 아니라 GPU와 CPU 사이의 데이터 이동이다. Sentis가 그걸 줄이려고 제공하는 API를 정리했다.
lilToon 파라미터 정리: 공식 문서를 대조한 한국어 레퍼런스
lilToon 인스펙터는 한국어를 지원하지만 공식 문서는 일본어뿐이다. 한국어 자료에 오역이 도는 이유이기도 해서, 일본어 원문을 항목별로 대조해 정리했다.
Ext4와 NTFS: 리눅스와 윈도우가 디스크를 다루는 방식
우분투를 설치하다 기본값으로 찍혀 있던 Ext4가 뭔지 몰라 찾아본 기록. 구조부터 윈도우와 공유할 드라이브 포맷, 그리고 개발에서 가장 자주 물리는 대소문자 문제까지.
그래픽스 파이프라인 정리: 정점이 픽셀이 되기까지
3D 기하가 화면의 픽셀이 되기까지 거치는 단계를 순서대로 정리했다. 한국어 자료에서 자주 빠지는 정점 후처리와 출력 병합, 그리고 메시 셰이더처럼 최근에 생긴 경로까지 포함했다.
adb 정리: 안드로이드 디버그 브리지의 구조와 명령어
안드로이드 빌드를 붙잡고 디버깅할 때 쓰는 adb를 구조부터 명령어까지 정리했다. SDK Platform Tools 37.0.1 기준이며, 한국어 자료에 흔한 10년 전 정보와 어디서 갈리는지도 같이 짚었다.