Skip to content
HY Devlog

Archives

All the articles I've archived.

202699
October36
  • A Height Map Isn't Displacement, It's Parallax

    A beginner's explainer clipped after hearing tessellation come up in an interview and going to look up what it was. Pairing tessellation with displacement is exactly what Microsoft's docs do. But the field that looks like that pairing in Unity, the Standard Shader's Height Map, isn't displacement — the docs call it parallax mapping.

  • The Page Says 2023, and What You Get Is the 2020 LTS Edition

    A landing page clipped while studying optimization, after it occurred to me that using high-quality models might make the game unplayable on a low-spec PC. The page is dated October 19, 2023, but the cover of the PDF behind Read now says '2020 LTS edition'. I picked four sections to see where that gap shows in the body.

  • What Decides the Matrix for a Normal Isn't the Inverse, It's Where the Vector Sits

    Lecture notes on vertex processing, clipped while studying shaders by applying them. I checked three of its rules against the specs — the matrix a normal gets multiplied by, the cross-product order for the three camera axes, and what to change going from right-handed to left-handed. On the normal, the inverse isn't the wrong answer; what's missing is which side the vector sits on.

  • The Three Steps the Video Teaches Are the Three Reasons This Asset Was Replaced

    A 2022 video, clipped while using the Unity-chan model as the example to put a toon shader on and looking for how to do it. Open the repository now and it says the package is provided without any maintenance or release plan, and the successor package's docs list three reasons for the replacement — install method, pipeline, license. Those three line up with the video's chapter numbers.

  • What Puts It in the Inspector Isn't Exposed, It's Show In Inspector

    Unity's own getting-started doc, clipped while studying shaders. Except the URL says 10.8 and what ships with the current Editor is 17.6. The property options table rotted the most in between — Exposed kept its name and changed its meaning, and Show In Inspector took over exposing the property.

  • Some Functions Read z as a Distance and Others Throw It Away

    Code I clipped while trying to hide the cursor at the center of the screen in an FPS and raycast from that point to find where a shot lands. The original calls z a 'fix that puts the axis in camera terms'; the docs call it 'the distance of the resulting plane from the camera'. It's not a fix, it's a choice — and locking the cursor removes the need to read the value at all.

  • What Decides the Point to Look At Is the Plane, Not the Ray

    Short code for facing the mouse, clipped while looking for how to do top-down controls. The method is right, but the plane sits at the origin and the height gets patched in separately. Put the plane at the object's position and that patch disappears.

  • What You Can Stop Is Only 'the Currently Set Clip'

    Clipped while looking for how to play a video's separately extracted audio just once, then pulled back out while working on in-game dialogue and SFX output for the TTS project. It lays out the difference between Play() and PlayOneShot() in two paragraphs.

  • What Decides Draw Order Is Three Things, Not Two

    A learning diary I landed on while trying to find out what the Tag and Layer fields at the top of the Inspector actually do. It explains 2D draw order with Sorting Layer and Order in Layer. Both are right, but the docs call those two the higher-priority criteria and put one more underneath. And getting a layer name wrong quietly lands you in Default.

  • What's in LocalLow Is persistentDataPath, Not dataPath

    Clipped to pin down the exact path, since I'd been writing JSON saves to dataPath. It lays out where dynamically created files go. But the descriptions of dataPath and persistentDataPath are swapped. There are five path members, not three, and a relative path is relative to neither of them.

  • What a Mask Picks Is Body Parts; What Fills the Rest Is the Layer Below

    Clipped while looking for how to combine IK with an Avatar Mask so animation lands on the upper body only. It walks through making an Avatar Mask and plugging it into a layer. The procedure is right, but how far the mask's reach goes is missing. The body-part list differs between two pages, and the rule that holds the whole thing up lives in a tooltip, not the prose.

  • What Holds the Scroll Position Is the Write Order, Not the Settings

    Clipped while working through the annoyances of a Scroll View: a record of a popup's scroll view opening at the bottom every time. The author traced it to the parent's open animation but wrote that he wasn't sure what the interaction was. The docs don't write the within-frame order down either. What they do give is a way to find out and a way to defer.

  • Resolution and Aspect Ratio Hold the Quality, Not Color Format

    I was planning cutscenes as video playback when I clipped a post on putting video in the UI. The procedure is right, but it blames Color Format for the quality and never once says how to know the video ended. What the docs list as the knobs are resolution and Aspect Ratio, and there's a mode that skips the Render Texture entirely.

  • What Decides Which Way Content Grows Is the Pivot, Not the Anchor

    A tutorial on filling a Scroll View with Layout components. Follow it and you get a working one. But the axis it tells you to anchor is the axis the Content Size Fitter takes over, and the Pivot that decides the direction is never mentioned.

  • An Error Page Comes Back and result Still Isn't ConnectionError

    A 2022 post implementing TTS in Unity. It calls an internal address belonging to the Google Translate web UI. Whenever that address stops answering, this code can't tell. It checks one of five failure results, and the rest fall into the success branch.

  • What's Read-Only Isn't the Clip, It's the Animation Window's View

    I clipped this while looking for a way to modify an Asset Store animation that showed up as ReadOnly. The post says duplicate it. But what's read-only is one window, not the clip, and a good deal of what counts as modifying needs no duplicate.

  • What Holds a Stretching Ragdoll Together Is projection, Not Strength

    A ragdoll walkthrough blames bodies stretching like taffy on a low Strength value. But Strength is documented nowhere in the Unity manual, and stretching has a page of its own. That page points at something else.

  • What Sits Between started and performed Is the Press Threshold

    The author of an Input System walkthrough left a question unanswered: why do started and performed behave identically? The answer isn't a frame, it's two thresholds — and the page that documents them contradicts itself in the same entry.

  • It Recommends Snapshots, and Its Code Takes Them Away

    A 2023 write-up of the Audio Mixer setup procedure. It lists snapshots as a reason to use the mixer, and the code right after permanently takes those three parameters out of snapshot control. The docs say so in one line.

  • await Awaitable Has No Value to Assign

    A 2025 introduction to Awaitable. The constraints it points out still hold, but the two lines demonstrating them don't compile. And two of the features it wishes for are documented members.

  • 1 << -1 Isn't an Error, It's Layer 31

    A 2022 post on scanning the surroundings with OverlapSphere. Fetching the layer by name is the right move, but the value then gets shifted by hand. When NameToLayer returns -1, that expression points at layer 31 instead of throwing.

  • You Can't Remove an Anonymous Function — But Not Because It's Anonymous

    A 2022 post on registering events with Action. The behavior descriptions are accurate, but the comment 'anonymous functions can't be removed' hides the reason. What blocks removal isn't anonymity — it's not holding the same instance.

  • It's Three or More Backticks, Not Three

    A write-up on Obsidian code blocks. The explanations mostly hold, but where it pins backticks at 'three', the post's own first example trips. It escaped the backticks to nest a code block inside a code block — and the docs say that isn't necessary.

  • Unload(false) Doesn't Unload the Instances

    Notes from the Unite Seoul 2025 optimization session. I cross-checked some twenty items against the docs one by one. Most hold up; five don't. The most dangerous is AssetBundle.Unload, whose two parameter cases are swapped.

  • An Outline Is Duplicated Vertices, Not a Shader

    I clipped the Outline component doc and it's the Unity 5.3 edition. Yet the wording is nearly identical to the current page. It wasn't updated — which is why Use Graphic Alpha's description still contradicts the property's own name.

  • Create an asmdef and Assembly-CSharp Goes Dark

    I clipped the assembly definition files doc and it's the 2017.4 edition. Its account of one-directional dependency is right, but it never says the reverse direction is forbidden. That's the actual reason behind the 'all scripts or none' recommendation.

  • The Lite Version Doesn't Show Up in the Shader List

    The introduction page of lilToon's official docs. It recommends converting a material rather than assigning the Lite version directly, and gives 'more intuitive' as the reason. The actual reason is that the shader's name starts with Hidden/, so it never appears in the material dropdown at all.

  • The Definition Describes a Pixel Shader, Not a Shader

    A 2024 write-up on what a shader is. The transcription argument is accurate and even brings sources, but one sentence of the definition conflicts with the structure section two sections later. What's written there is a pixel shader, not a shader.

  • There Is No `--parameters` Flag

    A guide that lays out serving Ollama locally as an API across eleven sections. Install and CLI are usable as written, but the three sections actually about hosting are each wrong. And the setting you hit first when several clients connect isn't in the guide.

  • The First Example Compares `pizza`, Not `type`

    A 2016 write-up following Head First through the factory patterns. The concepts are textbook-correct, but all three code sections are broken — and they break the same way. Take the type as a string and there's nothing for the compiler to see.

  • `--memory-swap=0` Doesn't Turn Swap Off

    A 2017 write-up that tabulates the container resource-limit options. It works as a map, but three spots snag if you copy from it. Two swap rules are written as opposites, the example's swap size is doubled, and the period default is off by ten.

  • Bounciness and Friction Belong to a Pair, Not to an Object

    A 2020 learning log that turns Rigidbody and Physics Material dials and films the result. The observations are good, but two puzzles are left open. Both resolve in the same place: bounciness and friction aren't one object's values, they're made by the two colliders in contact together.

  • What Made GC Long Wasn't the Cache Size, It Was the Pointer Count

    Discord's Go-to-Rust post diagnoses the problem accurately, and the diagnosis still holds. But only two knobs got turned. GOGC sets frequency and cache size cuts the hit rate. The variable that sets scan cost is the pointer count, and Go doesn't scan pointer-free objects at all.

  • IsConnected Is Looking at Connecting

    A tutorial that shows the whole thing, from a signaling server to sending a camera feed. But IsConnected compares against Connecting, so the Disconnect button dies the moment the connection is actually established. RemoveTrack and OnNegotiationNeeded each have a hole too.

  • Override Tags Doesn't Ignore Tags

    A walkthrough of the TextMeshPro Inspector where four fields point at the wrong thing. Override Tags only ignores color tags, Text Wrapping Mode has no Overflow value, Extra Settings holds neither outline nor shadow, and Text Style isn't Font Style.

  • SetActive(false) Doesn't Pause a Coroutine, It Ends It

    The clipping's ObjectPool implementation uses the official API correctly. But OnGet and OnRelease are one line each. It does none of the six things the manual says to reset on release, and the coroutine SetActive(false) ended doesn't come back when you re-enable.

September53
August10