Category: Knowledge Nuggets

Unite 2014 Presentation: BUILDING A SOLID FOUNDATION

Video recording of my session

Presentation slides

Locking layers in the Unity scene

Every now and then, while working Unity, I find that they changed something. It’s Like Déjà vu in the Matrix, but in a good way. This time I found that you can lock assets in place in the scene view. Its really weird because I was just lamenting about this, and “poof”, there is it! Its incredibly useful when you are laying out a 2D scene or UI against a comp where you are trying to match the source image your artist gave you. The problem was that, while placing or moving items, I would continuously selecting the layout image and then moving that. OMG, the pain! Now, I just make a layer in my project called “layout”, place my source image on that and then lock it. I make my source image a Unity sprite because A) its super easy to drag and drop into the scene and B) the layer locking only works with Unity native objects… not with 2D Tool Kit sprites. So Here is how you do it

Nift Unity layer pop-up for locking and hiding layers

Click the “Layers” drop-down in your scene view
Click the little lock next to the layer
Enjoy (preferably with a cup of coffee)

Connecting the Unity Profiler to your iOS Device

While doing some contract work recently I found that the Unity Profiler no longer reports accurate texture memory figures for mobile while you are in editor. Maybe it never did but I swear it did an some point. Rest assured, all the texture compression settings are still fine, you just have to test on device now. I had never done this with the latest release of Unity and remembered the days where I wished I could. So I gave it a bash and it is dope! Here are the steps you follow:

Make sure your mobile device is on the wifi network. The profiler uses a network connection to send data back to Unity.
Make sure you have “Development Build” and “Auto Connect Profiler” check to on in the build settings (handy shortcut for the build menu, Command + Shift + B)

Build for XCode. Make sure you are using a profile that allows you to be running the XCode debugger, so not an enterprise profile.
When the game launches, grab the IP address that appears in the XCode debug console. It will have a port number so make sure to get that as well.

In Unity, in the profiler, click on the “Active Profiler” button in the bar at the top. Sometimes it picks it up automatically, but if not, dump in…

Resizing Textures In Unity

It sounds silly but its true! Unity does not have any methods for resizing textures. Experienced readers might object, “what about Texture2D.Resize?” you say. Well, turns out that Texture2D.Resize only resizes the texture container, like trimming an array. Unlike trimming an array, Texture2D.Resize also sets the pixels to undefined. So really, all its doing is changing the amount of memory allocated. Thats all a bit disappointing, especially when you might be wanting to build a multi resolution pipeline for mobile. The weird thing is that Unity does this already when generating mip maps. So, lets roll up the old sleeves and figure this out.

We can get pixel data from texture, check! We can alter the pixel data, check! We can put pixel data into a texture, check! So whats left? The algorithm to resample pixel data. Resample is really the operative word because we are going to sample the source texture from the destination texture, pixel by pixel. This is exactly how pixel shaders work. So, We have our source texture at 1024×1024 and a destination texture at 512×512. What we are going to do is iterate through that 512×512 grid, find the corresponding color from the source texture and fill out destination pixel. Now we get to words you might have heard but never have known what they meant. Bilinear sampling is most common in games and gives a good understanding of how to sample but we are going to start with a technique called Nearest Neighbor. Resampling is mapping one set of coordinates onto another. So…

Unity & MonoDevelop 4 Woes

Unity usually always brings it to the table with their updates but sometimes they miss a few things. The MonoDevelop 4 is shiny but has one serious problem with the basics, at least on OSX. This is code folding! At first, code folding looks great. I do like the ability to fold “if” statements, but after I update something, all hell breaks loose and I can’t fold anything anymore. My workflow relies on folding to help me navigate code (as I think it is so with a lot of other devs). So here are some steps to get back to the old version of Mono. I am on OSX Mavericks, on a mac book pro BTW. I am not sure if yall PC people have the same issue, but then you are probably using VS.

Dual Install Unity
Most people don’t know, but you can have multiple versions of unity on your machine. First, uninstall all your Unity instances. Next, do an install of Unity 4.2.2 (anything that is before 4.3). Once you have done this, rename your unity folder. I just rename it to “Unity 4.2.2”. Now install teh latest version of unity. So now, you have both versions of unity installed on your machine. The folders are “Unity” for the current and “Unity 4.2.2” for 4.2. Make sure update your shortcuts in your dock.
Link To The Old Mono
In the current install of Unity, open the Unity preferences and go to External Tools (Unity->Preferences->External Tools ). There, select “External Script Editor” and “Browse…” to open…

Game Jam to Shipped Game

After this year’s global game jam, I wanted to share some experiences about shipping games to encourage first timers to get their games out there. First thing you need to understand is that you are not near to done. Our industry usually thinks in terms of features but this is misleading. We think “Camera system, it works… Done!”, but what we really we need to ask is “is this feature shippable?”. And in there lies the rub, what is shippable to you?

Game jams are rapid prototyping sessions. They are hugely valuable to determine if you are heading down the right track. They help to find the fun fast, so you know the general direction you will be taking on your game creation voyage. If your prototype is not fun to you, its probably not a good idea to pursue it. I am speaking from the heart here, spending may hours of time I will never get back trying to make something that is not inherently fun, fun. If you have a choice, and as indies you do, don’t to it if your prototype is not fun right now.

Once you have the fun, its time to do time estimates. It does not matter if you schedule or you scrum, you still need to estimate time. If you are new to scheduling, once you are done, double your time! I mean it. As developers, we are hugely optimistic and love what we do and sometimes we forget the bad times. Shit happens……

Lists and Linq in Unity, do it!

I have been using C# for many years now in game dev and I love it. Most hardcore C++ guys have always given me grief but I still think the language is beautiful! Yes yes, its memory managed but thats a whole beast unto its self. At least I don’t have to spend a week looking for an illusive overwrite or leak. But each unto their own, we all make games and in todays world, fast to market is a big deal, especially with little to no budget.

One of the great things in C# is Lists. For those of you who don’t know them, they are basically dynamic arrays with a whole host of special functions. They are wonderful things, especially for inventory systems. There is a lot of debate about if they are significantly slower than arrays but the general rule is don’t add to them in a critical update loop. Besides being able to add and remove items dynamically, you can also just bake the list to an array using ToArray(). This way you can have a list that you use to manage your stack and once you are done, you can just bake it out.

So what I want to chat about here is Linq, which is C#’s look up language for lists. I always stayed away from it, erring and my years for “Doing things the right way” but Linq used in the right way can save you a lot of time. I have started using it for my data structure look…