I've done enough stuff with Godot at this point that writing everything from scratch doesn't necessarily teach me anything new. Sometimes I just need a character controller so I can get to the part I want to experiment with. As someone who helps maintain the popular Dialogic plugin, I have a great respect for anyone who puts things out there. So I take my usual first step, and take a stop in to the AssetLib to see what's available!

The goal of this new experiment was a semi recreation of my favorite card game Android: Netrunner. Specifically I wanted to to see how fun the Run mechanic would be without the card randomness and with more visual flair. You know the deal, trying to recreate the images in your head when you play the card game, but in 3D.


The Use Case
The first step in any game should probably be defining how the player interacts with it. In this case I needed to be able to do 'picking' of 3D objects, the Interaction Kit 3D by ninetailsrabbit seemed like a good place to start. Ninetailsrabbit seems to have a large number of small, modular, addons available for Godot, that are kept up to date, given that the last update was, at the time of this writing, just a day ago. That's definitely a good sign!

All of Ninetailsrabbits github documents are pretty similar, which is good. The consistency and readability is important to a new comer. I specifically appreciated the focus on signals and a clear 'How To Use' section, which gave a clear impression on the intended use of the nodes. I generally prefer 'opinionated' plugins over more general purpose ones, I want something that's proven to work in a given use case, and if I don't fit that use case, I prefer to know that and get on with writing my own solution.

This doesn't exist!


Unfortunately we also have problems. Some things mentioned on the front page of the github no longer exist in the code. This is tough, and probably a byproduct of how many plugins this user is juggling. Documentation is never easy to keep up with, but between the 'missing' global script and outdated screen shot, I'm left to wonder what else is wrong with the documentation?

The next big gap is a lack of an example demo or video how-to guide. Again its documentation, but an example of how you use something is invaluable. An issue is already open about this omission, but my experience with the plugin would have been much more positive if I had something to refer too.

Using the plugin

GreyNoise tree

I set up my project in a way that aligns with what the documentation says. One of the keys to using the Interactable3D node it provides, is that its MOSTLY just an empty container for data. It doesn't do a ton on its own, though it does set up its collisions based on your project settings, so make sure those are set up! In this my need calls for using the MouseRayCastInteractor. The set up is easy. I tie the Interactor to my camera, make sure I set up the cancel_interaction input in the project settings, and add a bit of meta data and give it a try.

Our first issue is the focus outline, a great feature provided by the plugin, but as seen below, the focus isn't performing as expected. Is it due to a shared shader resource? Is it meant to 'hint' at all interactable when anything is clicked? I don't know the intention, so I can't say. I make all the shaders unique but no go. The interactables on applying outline, appear to be doing some duplicating and copying of the shader materials and applying it to the next pass... this is alot and I'm a bit frustrated.

Focus Fail?


When you click on a focused item, it becomes the current interactable. This sends out a signal you connect to, and do something with. Easy enough to get that going. Except after I interact with something, I can't seem to 'uninteract' with it. The cancel Interact is called, but the 'current interaction' is never blanked out. That only appears to happen when you unfocus, but the unfocus never occurs.

After some digging it would appear the issue is a missing 'is_instance_valid' check in the mouse_raycast_interaction script. With that in place, it doesn't alwayshit the focus function. Now that is can unfocus it... still doesn't. Great.

It was at this point I had to put the plugin away. The plugin was no longer saving me time, I was instead forced to bug shoot it... and possibly wrongly because I don't necessarily understand the intentions behind some of the decisions. The code is clean and readable, but I don't know if things are broken, or if I'm using it improperly, and the effort to find out is probably more than just writing something from scratch.

So I have to give this a 'not recommended' with the caveat that it would probably only take a demo project showing intended usage to go up to a highly recommended. It really feels like with more work I'd figure it out, but thats just not what I'm usually looking for in an addon.