Guess who has a new post on Unreal Engine shenanigans?
miltoncandelero.github.io/focus-naviga...
Guess who has a new post on Unreal Engine shenanigans?
miltoncandelero.github.io/focus-naviga...
Have I unlocked a secret, forbidden technique to render a UI shader outside its quad? (in Unreal Engine)
Maybe? π
Read more about it on my new, organic, 100% human written blog post.
miltoncandelero.github.io/coloring-out...
(Special thanks to @unreal-garden.com π±)
An Iceberg meme about branches in a live game
Did I spend more time making an iceberg meme than writing my blogpost about how to source control a live game with frequent updates?
Maybe π
But hey, at least I can boast that it is a 100% organic, human written article. π
miltoncandelero.github.io/iceberg-vers...
And one day, I wrote again
miltoncandelero.github.io/stealing-unr...
So... how are we feelin'?
Ctrl + P
*Almost* works like a "jump to any file"
In Unreal Engine, when working with c++, If you replace a component, make sure you give it a different name.
Not 100% sure why, also hasn't happened 100% of the time, but the worst corruptions I've got where because of this.
Be esoteric, be paranoid, be safe β€οΈ
Am I the only one that steals (and ports) ideas, concepts and tools from one game engine to another when I jump from project to project?
What do you mean you don't have to jump between 3 different engines on the same week?!?!
Bonus points: you get to be pedantic and say
β¨ ππππππ β¨
I don't know why people don't use the Facade + Strategy pattern
Use Facade to create a simple API like Data.Write("stuff")
Use Strategy to swap the actual implementation under the hood: send it to your server or write on toilet paper, the rest of your game will never know!
Unreal constructors donβt run when you spawn an actor.
Spawning is just cloning the Class Default Object (CDO)
The constructor already ran once when the class loaded.
Want to set up logic? Use BeginPlay().
Constructor is for defaults only.
"But what is a good epsilon?", I hear you ask.
Well, first of all, WHERE ARE YOU!? WHY CAN I HEAR YOU!!!?!?
Second, a good epsilon is "just small enough" to make sense.
When in doubt, think your epsilon as 0.0001*max(a,b)
Never compare floats directly.
Use the function that your engine gave you, or use an epsilon (nerd name for "a kinda small number).
Unity: Mathf.Approximately(a, b)
Unreal: FMath::IsNearlyEqual(a, b)
With an epsilon: abs(a - b) < 0.0001
A clean, loud crash is better than silently limping forward with broken state.
Unity:
- UnityEngine.Assertions.Assert.IsTrue(...)
Unreal:
- check(...)
- verify(...)
- ensure(...)
Raw JS:
- console.assert(...)
There is no excuse!
Sometimes your game should crash.
If something must exist, donβt write
if (thing == null){
// This should never happen
return;
}
Assert that shit!
Assert(thing != null, "This should never happen because bla bla bla...")
Sometimes you donβt need a tween library, an animation controller, or a full timeline.
Sometimes⦠you just need a spring.
Every time I hear "this system is simple" I start sweating.
At this point, "simple" just means "I haven't thought about edge cases yet"
The last 10% that takes 90% of the time...
Even if the day had 40 hours, Iβd still be juggling 5 projects, learning 3 new tools, rewriting a system I just finished, and somehow still not touching that one βquick fixβ from 2 weeks ago.
I think I might need another me.
Could I hide LLM commands in obfuscated code, so that if somebody tries to de-obfuscate it with AI it just fails/refuses/returns garbage?
π€
While my code was building, I learned:
π€Ή Juggling
π Cardistry
βοΈ Pen flipping
πͺ Rolling a coin on my knuckles
πͺ Balisong tricks
π₯ Zippo tricks
πͺ Yoyo tricks
π Lockpicking
At this point I'm not a dev, I'm a circus act with good version control.
In Unreal, a destroyed object is literally nullptr (black magic involved?).
In Unity, it's not null⦠it just pretends to be via a custom == operator.
So "if (obj == null)" works,
but "obj is null" or "obj ?? fallback" can silently fail.
Stuff of nightmares, yo.
An entire generation of game devs thinks IEnumerator means "do this async" because of Unity.
Those are generator functions, not sleep timers!
I'm all for redlining your tools but please learn the proper use first, then twist it into shape.
Always sanitize all user inputβincluding game state messages.
Just because itβs βyour own protocolβ doesnβt make it safe.
Clients lie. They will send impossible positions, invalid actions, and corrupt packets. Yes, even in mobile games.
Validate everything. Always.
"Any number that can be created by fetishistically multiplying 2s by each other, and subtracting the occasional 1, will be instantly recognizable to a hacker."
π₯π₯
A Megaman battle network toy riding a Uni the unicorn from dungeons and dragons toy, both protecting a unity game build process
Pro tip: to increase the chances of your Unity build succeeding, you need to keep a Megaman riding an Unicorn nearby
Jester, a beautiful silver cat with a red ribbon looking confused at the human taking the picture
"hooman why you laying in the floor?"
Jester, a beautiful cat with silver hair and white gloves
What if I use bsky to post cat pictures? π€