This is a quick post to point out to iterate through the entire Hierarchy in Unity. This is something I've wanted to be able to do for a long time, but didn't know how to do in Unity. I had asked a lot of Unity experts and everyone told me it was possible, but couldn't tell me how.

for (var go : GameObject in FindObjectsOfType(GameObject))
{
// do whatever you need to do here.
}

This seems pretty strightforward, but I guess I never thought to look for a type of "gameobject." Anyway, I thought I'd share.

There's a lot of ways Unity could be improved for savegames. here's some of my thoughts on that.

I think the big one is to save a scene (and reload it) during playback. It's clear the editor has this power in some fashion already, and it would be hugely useful for many types of games.

But I know that's no small task. So, besides that, there's a ton that Unity could include, like:

More data types for PlayerPrefs. The abllity to save arrays, for example. See EasySave on the asset store for a good third party solution for this.

Unique GameObject IDs that are static. When you save data associated with an object, you need to uniquely identify the object. GetInstanceID is a unique id for each object, but they can change every time you load the scene. I came up with a simple hack for powerups, but there should be a better way, especially since Unity's own way of saving data (PlayerPrefs) requires unique keys.

An automated way to load and save a script's current properities. Right now, you need to write your own saver and loader for every single variable in your script. Add a variable? Add some code to saver. And don't forget your loader. This is error-prone, and this should be automated. It's clear that the property editor has automated access to all the script's variables, so why not give us a way to bundle it up and save it and load it? It wouldn't have to work for everything (I understand the problems with saving transforms and whatnot) but just letting us save all integers, floats, and strings would save a ton.

And if not that, at least give us a way to walk through them ourselves so we could roll our own autmated saver that doesn't require me hand-adding variables to save every time I change my script. There would still be the need for special-casing things, but this would be a great head start.

Summary

I know there's no way for Untiy Technologies to make the perfect SaveMyGame() feature that would work for every game out there, but really Unity needs more than what it has at the moment. It's almost non-existant. In other game development environments, I'd have the tools to say "these variables are going to be saved." and then that's the end of it.

Currently, for any game this isn't dead simple, SaveGame is one of the first things I need to think about -- and think hard about -- before I do any fundimental development. And that's typically not what Unity's about. Unity is about focusing on your game, and not your engine.

Anything worth doing is worth overdoing

While in Hawaii working on custom games for Disney's Aulani hotel, I had a hairbrained idea to trick out a My Little Pony with a custom paint job. The thought wouldn't go away, and eventually I had to do something about it. So I got a hold of an albino My Little Pony and tricked and went all Xzibit on her.

At the time I had no clue that My Little Pony had had a resurgence. Here are the results.

Silly that Unity doesn't support this. Uses the name of the first GO selected (the one in the inspector) to rename the rest of them. This is actually a great template for all sorts of batch editor commands in Unity.

A random idead I had while on vacation

One interesting idea I had while on the river was an RPG with crafting (ala minecraft) but your character has an "ingenuity" stat. This stat reflects how McGuyvery you are. But game mechanic-wise, what it does is affects "hints" when crafting.

How I imagine it is you can place objects into the crafting table, and depending on your ingenuity stat, you may see some spots around the item you place light up slightly. Rolling over these lit up spots, you may see items in your inventory highlighted. This is giving you hints of how new crafting recipes can be discovered. This is an in-game approximation for having your character have insight into how things are built and how they can be put together.

The idea is that with low ingenuity, the highlights don't appear for some recipes, and when they highlight objects, they highlight "fuzzy" -- meaning it may highlight false positives in your inventory, or not highlight others. As your ingenuity increases, these fuzzy recipes get more defined, and new highlights start to appear for new recipes. Each recipe has it's own skill level, so easy and basic things appear first, with more complex recipes appearing with higher ingenuity. Not all recipes would appear this way -- some could only be learned via wall carvings or parchments, etc.

Ingeunuty, or perhaps another stat like "skill", may keep you from successfully building complex items (keeping people from looking up the reciipe online and buliding things their character couldn't have otherwise known about)

Some people have a hard time sketching in their sketchbooks, for fear of drawing something crappy in it. Fortunately, I'm an expert at crappy drawings. The tag crappy drawings documents them.

This is a free association sketch I did while brainstorming on Maquette. Note the simplified dome in the middle of the image.

I do a lot of free association drawing. it's just like free association writing, except for I'm drawing. But quite often I have no idea what I'm about to draw when I start. This is one of those cases. It's not about the quality of the sketch, or even the content. It's more about what my brain thinks of while I'm drawing it.