Finally done transitioning the project to Unity 2018.3′s new Prefab format so I can focus on progress again, here’s fire effects on the 2nd armor.
I made a free PropertyDrawer prevent labels in the Unity Inspector from getting cut off, and make better use of that available space.
https://github.com/AnomalousUnderdog/UnityCompactFieldAttribute
I tried my hand again at creating description PropertyDrawers.
At first I just made them simple labels that show below the property. I realized it made the Inspector GUI too “noisy” since there’s so many words on-screen now. I figured I could do better.

My problem with Unity’s default tooltip behaviour is that it doesn’t always show up. Notice how the 2nd time I bring my mouse to the “Bounce Threshold” property here, the tooltip refuses to show up. I had to shake the mouse before it recognized:

I wanted an icon to clearly indicate that a property had a tooltip. This was also something that annoyed me a bit with Unity in that you’re not sure if a property actually had a tooltip that isn’t showing up because you moved your mouse too much, or maybe it doesn’t really have a tooltip in the first place. So sometimes I end up leaving my mouse on the property label, waiting for a tooltip that I’m not sure will come out or not.

I would have preferred to move the icon to the right of the label (in between the label and the field) but I doubt there’s an easy way to do that.
Making PropertyDrawers draw on top of the other GUI proved to be difficult. I have no control over the rendering order of the properties so this would happen:

So instead I created an EditorWindow and used the internal method ShowTooltip() to make it look borderless and not steal window focus when it shows up. I had to use reflection to make it work.
I also had to get the Inspector’s current scrollbar value via reflection since I position the tooltip manually, and it doesn’t automatically take that into account.

I’m still converting my characters to use the new nested prefabs format. It’s taking a while, as I essentially have to recreate them, ensure that the properties on each component is set properly.
I took the time to also switch from UnityEvent to just plain C# event/delegates. I found UnityEvent to be problematic for a time now and have always wanted to stop using it. It is very convenient, but the convenience is also what makes it easy for me to mess it up.
For example, if I accidentally deleted the object assigned to the UnityEvent, or if I renamed the method it was supposed to call (which means it can’t find the method to call anymore), it doesn’t count as a compile error (compared to if I subscribed to an event in C# code), so I won’t notice it easily. I’ve experienced a couple of bugs because of this, and took me a while to pinpoint the cause.
So when I get something like this:

I end up wondering why I have an empty listener there in the Death Event. I’d rack my brain figuring out what the value there used to be. Then I end up cloning my project’s git repository, checkout an old commit to see what it was. It’s quite a hassle, considering the git repo has grown to about 9+ GB in size.
kzantezuken said:
So you suggest to use Variants only? Will it still function if you delete original base prefab afterwards?
I suppose it’s still up to you, if you have a different method that works better for your project, then go ahead.
If you delete the base prefab that a variant uses, you probably could still salvage the data somehow, but naturally, the connection will be lost.
Back then, before the new Prefab workflow was around, the common way I deal with Prefabs is to have the 3d model parented under an empty Game Object first. This empty would contain all the script components and whatever I need to make it work in the game. The 3d model is under that as a child Game Object, so I could easily replace it, if need be.

I made it a habit not to put script components on the 3d model’s Game Objects (i.e. the bones), since, as I explained in my previous post, the moment the rig is edited from Blender, the Skinned Mesh Renderers in a regular Prefab stop working.
If I added colliders onto the 3d model’s bones in Unity (for ragdoll functionality, for example), then once I edit the rig from Blender (say for example, I decided to add wings to the character), I had to recreate those colliders from a new copy of the 3d model instance.
Editing the rig of a Blender file breaks regular prefabs that use it (this was a long-standing issue that was never fixed). As far as I know, this problem only happens in Blender since its FBX exporter is limited compared to Autodesk products like Maya and 3dsmax.
The new Prefab Variant feature in Unity 2018.3 effectively solves this issue because variants keep the “connection” to the blend/fbx file intact. This works because Unity treats blend/fbx files as prefabs themselves.
Converting my prefabs to take advantage of Unity 2018.3’s nested prefab and prefab variants, one-by-one, it’s taking time but it’s getting there.
Nested prefabs are so useful especially for GUI. Frequently reused widgets like dropdown boxes and checkboxes are much more manageable.

I’m just a little bumbed out that I can’t reorder components around in a prefab variant. And these are components defined in the variant (not the base prefab). There’s probably a technical hurdle behind this decision, but it’s a little annoying cause I like to move up components that I consider to be high-level, and move down components that I consider low-level.

Here’s how the whole thing looks like in Unity. I will still be adding fire particle effects on the eyes and the chest.
