-
I was complaining a bit about @unity3d earlier, but I wanted to call out some of the cool aspects I really liked about the engine while working on this project. @develwoutacause/1397049439655645184?s=20
-
1. Being able to add
[SerializeField]
on almost any field and manipulate it in the editor is really simple and powerful. It's easy to understand and goes a long way. I especially like that I can make those fields (and lifecycle methods) private and they still work just fine! -
2. I expected to not like
MonoBehaviour
and that one would slowly grow to encompass most of my game logic, but that didn't happen. Thinking of them as a mixin, sometimes providing an API to be consumed by another behavior, I was able to make decent abstractions. -
None of my behaviors got super large or poorly abstracted without a whole lot of effort on my part. In the end, I think they worked out pretty well.
-
3.
ScriptableObject
is really useful for abstracting raw data shared between objects. A lot of the design abstracted quite nicely and easily intoScriptableObjects
. -
4. I really like #Unity's use of coroutines to pass time. Being able to
yield return new WaitForSeconds(5);
is a nice way of waiting without losing context. All local variables are still in scope. -
Without this, you'd have to manually track time passing and save relevant data to privates fields, the load them later to understand what you need to do. It gets out of hand really fast. Using coroutines here is a really clever and intuitive way of passing time.
-
5. The component system is a pretty simple way of decentralizing game object state. You can easily add and get a particular component without adding a bunch of nonsense to *every* game object. This makes components much more specialized and easier to work with.
-
6. I expected building a 2d game in a 3d tool to run into a bunch of weird edge cases such as 0-depth sprites having collision issues or being at the wrong z-value. But this didn't really happen. It mostly "just worked" and I often forgot that my game was running in a 3d space.
-
7. #csharp's type reflection is really powerful to enable APIs like
GetComponent<Type>()
. This makes the type system much more intuitive and easy to work with. I didn't feel like I needed many awkward casts or that I was fighting the compiler at all. -
Just want to make sure we celebrate and learn from the positive aspects of #Unity and the hard work that went into it!