Archives
All the articles I've archived.
The Point of Generate C# Class Is SetCallbacks
A 2024 walkthrough of the Input System — from installation to three ways of driving it — checked against the current docs. All three of its samples carry the same dead conditional, and the generated class never uses the one feature that justifies generating it.
Play Time Is a TimeSpan, Not a DateTime
I clipped a current-time utility while trying to put a time-attack run timer on screen, but the type I needed wasn't that one. The type for elapsed time, the clock to read, and the format string rules are all different.
isGrounded Isn't a Sensor — It's a Record of the Last Move
I checked a post about replacing a misbehaving isGrounded with a raycast against the current docs. The symptom and the fix are both real, but the docs put the cause somewhere else — and one number in the fix is far more generous than intended.
With IK Pass Off, All Six IK Functions Are Silent
I checked a 2021 set of study notes on Animator's properties and functions against the current docs. The descriptions are accurate; what's missing is the conditions that make those switches do nothing. Three places had that shape.
[MenuItem] Belongs in an Editor Folder, and a MonoBehaviour Can't Go There
I checked a 2021 round-up of eighteen attributes against the current docs. Most of it holds, but one example asks for two incompatible things, one is something the docs tell you not to use, and one guards less than it looks like it does.
Release First and Completed Gets an Invalidated Handle
I checked a 2023 write-up of Addressables against the current docs. The example's release ordering is wrong, and the duplicate-key problem the author spent hours on is one line in the manual. Lining it up with Unreal's soft references — where I started — makes that release problem clearer.
OverlapSphere Doesn't Ignore the Ignore Raycast Layer
Same Physics class, different default layer masks for Raycast and OverlapSphere. An object you parked on Ignore Raycast to keep it out of queries still shows up in OverlapSphere.
CrossFade's 0.3f: On One Side It's 0.3 Seconds, on the Other It Isn't
I checked a CrossFade explanation written in 2014. It's correct. But the component you'd actually use today has a method by the same name, and the second argument is in a different unit.
There Are Two Clamps: Swap the Arguments and Only One Throws
Mathf.Clamp takes four lines to explain. The trouble is everything outside those four lines: what happens when you swap the bounds, when NaN arrives, and when you clamp an angle.
A Render Pipeline Is an Asset, and Built-In Is What's Left When the Field Is Empty
I read Unity's introduction to render pipelines. I had it filed as picking one of three, but following the docs it turns out Built-In isn't something you pick — it's what remains when you've assigned nothing.
Thirteen Built-In Shader Examples: The Further Down the List, the Less Ports to URP
Unity's thirteen official HLSL shader examples are all Built-In only. The first few port to URP by renaming things; from lighting onward it's a rewrite. I mapped them one by one — and found a line I got wrong in the previous post.
The Table on Unity's Custom Shaders Page Is a Fork, Not an Index
Unity's Custom shaders page has a separate row for URP and for the Built-In pipeline. That split is usually why shader code you find online won't even compile. Here's what actually differs on each branch, plus what's under the Troubleshooting row nobody clicks.
Unity's Code Optimization Page Is a Table of Contents of Tables of Contents
Unity's Code optimization manual page is five links and nothing else. Four of those five are tables of contents too. Here is what's left after descending to the leaves — only the parts that actually change code.
The Six-Step Sentis Workflow: The Ownership and Blocking the Docs Leave Out
Unity's official Sentis workflow page is a six-step skeleton. Here is what it omits — the Resources folder, tensor ownership, and the GPU stall hiding in the line that reads your result — filled in against the rest of the same manual.
443 Isn't Only TCP
I checked Wikipedia's TCP/UDP port list against the IANA registry. UDP is missing from 443, the dynamic port range doesn't match what Linux actually uses, and the 1024 boundary isn't fixed.
One Read Is Not One Message
I saved the TcpListener.AcceptTcpClient documentation. Its example treats TCP as a stream of messages, and another page in the same doc set carries a fixed version of it.
Three Forks Later, an Official Version Appeared
I saved the README of a URP glitch effect package. Open that repository now and it carries a notice that the author has stopped updating it, pointing at keijiro's official URP version.
What FreezePositionY Freezes Is World Y
I checked a write-up on RigidbodyConstraints against the manual. Four enum members are missing, there's nothing about which axis it freezes relative to, and the bitwise explanation is wrong in two places.
huggingface-cli Is Gone, and the Answer to the SSL Error Is Elsewhere
I checked a write-up on three ways to download a whole Hugging Face model. Two of them use a command removed in v1.0, and recommending git for SSL errors works — for a reason the article doesn't give.
It's peer, Not ident
I checked a 2021 guide to installing PostgreSQL on Ubuntu. The version it gets you went end-of-life in 2024, and its explanation of authentication had one word wrong from the start.
I Wondered What a Wave Front Was — It Was a Wavefront
I checked the Korean machine translation of Unity's GPU optimization how-to against the English original. Terms split within a single document, and the Frame Debugger note isn't a translation problem — the original says it too.
The Feature Confirmed Working in the Comments Was Removed in OpenCode 1.3.0
I checked an OpenCode usage review and install guide against how things stand now. What the article said works today is now called prohibited by the official docs, and its JSON examples carry a paste artifact that breaks on copy.
An Eight-Month-Old Install Guide: oh-my-opencode Isn't Called That Anymore
I checked a January 2026 oh-my-opencode install guide against how things stand now. The project has been renamed, and the Anthropic subscription cutoff it warned about actually took effect in April.
The Ollama Response Was Long Because of the Format, Not the Answer
I checked a set of notes on the Ollama API against the official docs. The cause of the too-long response was one parameter, but the notes changed three at once, so the credit got split three ways.
I Scraped the Official Docs, and They Name a Method That Doesn't Exist
This clipping is Mirror's own Network Manager documentation. With no source to check it against, I checked it against the code — and found a method name that doesn't exist and a sentence that reads backwards.
USING HASH Silently Becomes a B-Tree on InnoDB
I checked a write-up on MySQL/MariaDB index creation and EXPLAIN against the manuals. The hash index recipe doesn't work on InnoDB, and four of the EXPLAIN column descriptions are wrong.
Why the Example in a Mirror Design-Patterns Guide Breaks on Scene Change
I checked a write-up on Mirror's correct design patterns. The big picture holds up, but its last example calls SceneManager.LoadScene — and a client that joins later ends up in the wrong scene.
Mirror Prerequisites: The Asset Store Build Is Over a Year Behind GitHub
I revisited a write-up covering what to know before adding Mirror. The concepts still hold up, but the first item doesn't: the Asset Store build stopped in February 2025 while GitHub releases kept coming.
Re-reading the Mirror NetworkManager Inspector: The Server Doesn't Use Network Address
I checked a field-by-field table of the NetworkManager inspector against the tooltips in Mirror's source. Some groupings are off, and the Headless Start Mode options and the unit on Evaluation Interval are wrong.
Mirror's Commands and RPCs: Running on the Server Doesn't Mean It's Safe
I revisited a write-up on Mirror's Command, ClientRpc, and TargetRpc. The prefix rule and argument types differ from today's docs, and more importantly, the example code carries a pattern that defeats server authority.
Unity's JsonUtility: The Limits Come From the Serializer, Not From JSON
Rather than memorising JsonUtility's list of limitations, one rule predicts them: if it isn't visible in the Inspector, it isn't in the JSON. Plus the most dangerous item, which the manual never mentions — polymorphism.
Character Encodings: Unicode Is Not Two Bytes
Revisiting a write-up covering ISO 8859-1 through EUC-KR, CP949 and UTF-8. Three widespread misconceptions corrected against the official specs and bytes I measured myself, plus how to trace mojibake back to its cause.
Reading the ML-Agents Install Docs: Python 3.10.12 Is a Ceiling, Not a Recommendation
Why ML-Agents installation is so particular, traced back to the toolkit being split in two. What Conda and the exact 3.10.12 are for, how the Unity and Python package versions pair up, and the two names for the inference layer.
Subscribing to InputAction Directly: The Lifetime of Delegate-Based Input
Handling input by subscribing to InputAction in code instead of using PlayerInput's Behavior. Why subscribe and unsubscribe belong in a pair, who actually enables the action, and what looking actions up by string costs you.
GPU Instancing Shaders: The Korean Manual Is Missing an A
Revisiting Unity's 2021.3 manual page on adding GPU instancing to custom shaders. The Korean localisation has three macro typos, and the render pipeline compatibility table has changed since.
Untracking Git LFS: `git lfs uninstall` Defaults to Global
Revisiting a 2021 write-up on untracking LFS and reclaiming GitHub storage. Three of its commands are described differently from what they actually do, and GitHub's LFS policy has moved since.
Revisiting Docker Build and Run: The Dot in `docker build .` Isn't the Dockerfile Path
A post I clipped while trying to isolate a database in a container. What the dot in `docker build .` actually is, why the example Dockerfile won't run as written, and what you actually need when the thing you're containerising is a database.
Revisiting the DeepVoice AI Asset: It Isn't "Completely Standalone"
A review I clipped while looking for a TTS asset that runs locally — except its conclusion that the asset 'works completely standalone' isn't true, and four pieces of evidence against it were already in the review. Plus what actually does run locally.
Mirror's Client-Side Prediction: Rewinding Without Physics.Simulate
Why prediction is needed and how it works, and what Mirror gave up by not resimulating the whole physics scene. Also: the docs stopped in March 2024 while the code kept moving.
Unity's PlayerInput: One Behavior Setting Rewrites Your Code
PlayerInput's API reference is a list of properties, which is not what you need when you first attach it. Why the four Behavior options demand different code, why callbacks fire more than once, and whether a single-player project needs this component at all.
Taking Apart Cinemachine's Follow Camera: Binding Mode Isn't a Rotation Mode
The Follow Camera used for racing and runner chase cameras, written up against Cinemachine 3. What Binding Mode actually decides, and two widely repeated misreadings — mouse input and Target Offset — corrected against the official docs.
Subscribing to BACKND via AWS Marketplace: Start With Why the Warnings Are There
The steps for subscribing to BACKND through AWS Marketplace, and why the two warnings in the announcement exist — explained through the AWS SaaS onboarding flow. Plus what cancellation actually suspends and where the real price list lives.
AWS Data Transfer Costs: Read the Boundaries, Not the Rate Table
Revisiting a 2021 write-up of AWS data transfer pricing against today's rates. The numbers have changed several times over; the structure hasn't. Which boundaries cost money, and which parts of the original are now wrong.
Reading a Unity Gemini Client: What It Means to Put an API Key in the Client
asus4/google-gemini-unity is an unofficial client for calling the Gemini API from Unity. The install steps and the dependency chain, why the .env approach the README describes doesn't hold up in a shipped build, and what to use instead.
Building a Signed APK: The Real Output Isn't the APK, It's the Keystore
Notes from trying to build an open-source app myself. The Generate Signed Bundle/APK flow in Android Studio, where the keystore it creates should actually live, and what Play's AAB requirement and Play App Signing changed.
Unity Ads Mediation: Waterfall Is Ending, Only Bidding Is Left
What mediation is, how waterfall differs from in-app bidding, and what this SDK actually drags into your build as a client developer.
Accessing Tensor Data Directly in Sentis: Why and How to Avoid Readback
The bottleneck in on-device inference is usually not inference itself but data movement between GPU and CPU. Here are the Sentis APIs that reduce it.
lilToon Parameters: A Reference Cross-Checked Against the Official Docs
lilToon's inspector is localized, but its official docs are Japanese only — the source of the mistranslations, so I cross-checked every entry.
Ext4 and NTFS: How Linux and Windows Handle Disks
Looking up Ext4 after it showed up as the default in an Ubuntu install: its structure, formats for drives shared with Windows, and case sensitivity.
The Graphics Pipeline: How a Vertex Becomes a Pixel
Every stage 3D geometry passes through on its way to becoming pixels, including vertex post-processing, output merger, and the newer mesh shader path.
adb Notes: The Architecture and Commands of Android Debug Bridge
Notes on adb for debugging Android builds, from architecture to commands, based on SDK Platform Tools 37.0.1, plus where decade-old guides go wrong.