Thursday, September 06, 2018

.Net reflection is expensive in more ways than I thought...

Enter statements below.
csharp> var t = typeof(int);
csharp> Object.ReferenceEquals(t.AssemblyQualifiedName, t.AssemblyQualifiedName);
false
Every access to the AssemblyQualifiedName property does some lookup work… and returns a NEW copy of the string.

It’s _almost_ as if one might recommend caching every property, because you never know what it might be doing, and avoid creating auto properties (in place of public fields), so that you know when there is no need to cache the value.

Wednesday, July 18, 2018

Faster Update calls for Unity!

These MonoBehaviour classes allow for batch updating of all components in a single call. KinematicMotor example provided. It's a gentle solution to the 1k update calls problem.

AssetForge Model Optimizer for Unity

A Unity post processor to optimize meshes created with AssetForge. Reduces draw calls, combines meshes and allows batching.

Loose Coupling for your Unity Game Systems

Thursday, March 01, 2018

Thursday, February 22, 2018

A unique ID for your Serialized classes in Unity.



Note, the GetHashCode() method will probably return a unique ID. There is a very remote chance you will get a clashing ID.


Update:After further experiments, I believe this does not work well enough to be generally useful. Unity, we need a new serialization system!

Wednesday, February 21, 2018

Synthesizing Sound Effects in Unity3D.

I have built a Synthesizer for creating sound effects in Unity. It fills a similar niche to SFXR/BFXR, but aims to have more quality and versatility. It's fully modular, with all parameters able to be modulated via the Unity AnimationCurve.

I have called it 'Fizzle'.

Source coming soon.

Wednesday, February 14, 2018

Supercharged Gizmos for your SceneView

This code shows how I use the [DrawGizmo] attribute to create special gizmos for my components, which only appear when you're actually near the component.


Wednesday, January 03, 2018

Allocations in the Unity Editor when using GetComponent.

If you call gameObject.GetComponent, and there is no Collider on that gameObject, null is returned, but you will also see a memory allocation in the Unity profiler.

Why?

The call is actually returning a "fake null" object, so that when you try and use it a custom error message is displayed. This custom error message causes the allocation.

This behaviour is disabled in a build, so you will only ever see it in the editor.

Popular Posts