Nov23

C# Snippet: ColoredMaterialCache reduces memory load

This C# Snippet allows you to create, cache and retrieve instances of materials you need color-variations of. This is great if you want to have the same objects in different colors.

Normally, changing “renderer.material.color” will create an instance of the material for each object you create. If you use ColoredMaterialCache.GetVariationOnMaterial() all materials will be cached and you will end up with one material instance per color instead of one material instance per object. 

Get it here as a Gist:

https://gist.github.com/1389369

Nov16
My first submission to the Unity Asset Store went out today.
It’s an Editor Extension which allows to create scripts based on (multi-file) templates in a wizard-style window. The system uses the Visual Studio 2008/10 Template definition format – templates can easily be imported in Visual Studio.
Now Available for 20 USD on the Unity Asset Store:
http://u3d.as/content/andreas-zeitler/advanced-c-templates

My first submission to the Unity Asset Store went out today.

It’s an Editor Extension which allows to create scripts based on (multi-file) templates in a wizard-style window. The system uses the Visual Studio 2008/10 Template definition format – templates can easily be imported in Visual Studio.

Now Available for 20 USD on the Unity Asset Store:

http://u3d.as/content/andreas-zeitler/advanced-c-templates

Nov13

C# Snippet: Create Deep-Copy method for Class

This C# Snippets generates the code for a method which deep-copies any class  from a source to a target instance. This is useful to copy components field-wise (and, optionally, property-wise) in Unity 3D. A test for the Transform component is included.

Get it here as a Gist:

https://gist.github.com/1361488

Jul20

A Note on Partial Classes and Unity

Recently I have discovered partial classes in C# for the use in Unity. They are a good way to split classes into a Library-part, which never changes from project to project, and an custom part which can be custom for each project.

Unity does handle this effortlessly as long as you remember to keep code file names unique.

For my purposes I use a simple .-syntax like this:

LayerManager.cs // this is the base class included in my collection of extensions

LayerManager.Custom.cs // this is the custom extension which adds game-specific functionality to the LayerManager class

Jun15
Advanced Visual Studio Unity Templates
Collection of Visual Studio Templates to make development with Unity easier. Provides templates for all important Unity base classes: MonoBehavior, ScriptableObject, ScriptableWizard, Editor, EditorWindow. There are also a few more advanced templates to create a new MonoBehavior including a Custom Inspector and a class holding Editor functionality for it (kind of adhering to the MVC design pattern). The screen is taken from the German Visual Studio, the templates are in English, however, and can be used in any Visual Studio Edition (2008 and 2010).
Download (UnityAdvancedVSTemplates.zip ~100KB)
Check in on the Unity Board and give me feedback!

Advanced Visual Studio Unity Templates

Collection of Visual Studio Templates to make development with Unity easier. Provides templates for all important Unity base classes: MonoBehavior, ScriptableObject, ScriptableWizard, Editor, EditorWindow. There are also a few more advanced templates to create a new MonoBehavior including a Custom Inspector and a class holding Editor functionality for it (kind of adhering to the MVC design pattern). The screen is taken from the German Visual Studio, the templates are in English, however, and can be used in any Visual Studio Edition (2008 and 2010).

Download (UnityAdvancedVSTemplates.zip ~100KB)

Check in on the Unity Board and give me feedback!

Feb13
Sep28

Unity 3 Custom Icon

Unity 3 was released yesterday. I pre-purchased it weeks ago, including the iPhone Advanced license.

I need to keep Unity 2.6.1 in service for support purposes (old client work) - and from time to time I have to work with both versions parallel. That’s not a problem - the guys at Unity Technologies kept that possibility in mind. The only problem is that both versions use the same Icon, so it’s hard to tell both programs apart while running.

I put together this custom icon to get rid of this little inconvenience.

Here’s the Mac icon version of it: Icns-Container File

Here’s the PNG version of it: PNG File

Tagged: gamedev unity3d dev
Jul27

MacOS X 10.6.4 on Mac Pro kills OpenGL - stay away

After installing the MacOS X 10.6.4 Update Unity3D (which is OpenGL-driven) kept crashing (as soon as OpenGL is initialized, the whole screen starts flickering) and freezing the system in the process (I run it on a 2008 MacPro). After investigating a bit I found out that it is a problem caused by the latest MacOS X update (10.6.4) and Parallels Desktop (which I use to run Visual Studio).

As I need Unity and Parallels (i.e. Visual Studio) both at the same time, I had to downgrade by re-installing OSX from a Time Machine backup.

I spoke to the Apple Support Hotline and they confirmed this to be a bug in the 10.6.4 update. They recommended downgrading to the last version of the OS.

Just putting this out there for anybody who might have the same problem.

Apr21

Unity 3D: OBJ-Export and Cinema 4D troubles

And yet again I had to spend a whole day to work out a bug in my Unity3D-to-Cinema4D-Pipeline. Well, after all, I am constantly jumping a whole dimension here (yeah, I did a bad play on product names).

The situation: I use the OBJ Exporter found on the Unity Wiki (ObjExporter) to export each of my levels to OBJ. I then import those OBJ-files in Cinema and bake the shadows for it. The shadowmaps are then used for basic lighting of the levels. Well, this is pretty straightforward up to here.

After doing some asset optimizations last week, the exported OBJ file I wanted to use today for shadow baking was not displayed correctly any more in Cinema. Viewing the OBJ file in a text editor, however, I could not find anything wrong with it. In the past I had to deal with some formatting issues within the OBJ-Export-Script (decimals need to be seperated by ‘.’ and not ‘,’) so I suspected the problem to be that sort of thing again and usually a quick look at the ASCII source of the file made the problem obvious.

After playing around with number formatting for a while, I found out, that Unity creates an empty zero-length array of normals for a mesh if the import settings are set to not import normals and tangents. When exporting a mesh without normals the OBJ-Export-Script does not write any normals for the mesh - which is what causes the problem.

Solution: Basically you need to give the mesh an array of normals before you export it. A simple array of zero-vectors will do.

Apr13

Cinema4D won’t let monitor sleep

Cinema has an option in the program’s preferences that suppresses MacOS’ sleep functionality. This is useful when a rendering takes a long time.

But this function also prevents the monitor from sleeping, which is not very energy-efficient.

After weeks of trying to figure out what keeps my monitor from switching to standby after 20 minutes, I found the option in Cinema4D and turned it off. I use a little tool called Caffein to prevent the display form sleeping when I need it to stay on.

Mar5

Delegates and UI Programming

or: a perfect match.

I am using Delegates to define UI content in functions. Switching UI windows is as easy as changing the delegate assignments. My previous system used a MonoBehavior-Derived component for each UI Window, which gave me around 30 components to handle. Now I have one component and one static class, that holds all the window content code. Drawing is handled by a single GameObject with the main UI component attached.

This approach uses less GameObject and Component and therefore is faster than a GameObject-based handling of different UI windows.

Jan11

HowTo: Fix the Import-Integration of Cinema4D in Unity

The Upgrade to Cinema 11.5 was released a couple of month back and shortly there after the update to Unity 2.6 was out. And right after that there was a wave of complaints that the automatic Import of C4D files into Unity is not working any more.

I had this problem as well, but could figure out a solution rather quickly. I shared my solution on how to fix the problem and thought nothing more of it. Yesterday I stumbeled across several topics in the Unity Community in which people stated that the import is still broken for them and they are now doing manual conversion to FBX.

Here is how I fixed the Import:

  1. Make sure Unity and Cinema4D are not running
  2. Run Cinema4D in 32bit mode (goto ‘Applications’, Show Info of ‘Cinema 4D’ and check ‘Run in 32bit mode’)
  3. Set user rights on the ‘Maxon’ folder in ‘Applications’ to rwx for user, group and everybody
  4. Delete the folder ‘Unity-C4DToFBXConverter’ in plugins
  5. Open Unity and try to import a C4D file
  6. Unity will open Cinema4D and install the Converter and then trie to use it to convert the C4D automatically to an FBX file which it will store in the project library folder

If you install Cinema 11.5 newly, please make sure the FBX 6 exporter is configured correctly. These settings are working fine for me:

  • check Export Animations
  • Export Materials and Textures
  • check Export as FBX 5.0 compatible file
  • uncheck Export as Textfile
  • check Export Normals (please note that due to a bug in the converter, normals will not be imported correctly into Unity, you have to generate them with Unity using the ModellImportSettings)
  • uncheck both texture options

It looks like this for me (I am running a German version of the program)

Jan10