The best way to go for prefabed assets/objects using nodes only

Hi,
I am now looking again a more thoroughly into Armory3D and I am wondering what the right way to go is to achive the above mentioned. I tested some ways but struggled to get a decent result.

What I am trying is to have a fully defined asset in a seperate .blend file with collison boxes, volumen trigger,etc. which I than can link to my actual game file as often as I like. Linking in general works, I am linking it as a collection. So everything sticks together. This seems logic to me and also looks a bit like the way “Godot” is handling it´s vast of nodes.

I made a seperate .blend file with an object which also has a mesh as a child which I want to use as volumen trigger. There is a node tree attached to object with a logic that should just print it´s name when the player enters the volume. Getting the name or the children objects works also.
The name ist only printed once when the game is started. Or when I attach an “OnUpdate” node to the “Print” node, but than of course all the time.
But the volume trigger isn´t working at all. Could it be that the trait is paused after initilizing?
But it´s also not working in the “on update” attempt where the trait is´t paused.

I´ve read something about the problem here but I don´t see a good conclusion in this thread: Linked Collection not recognize by logic nodes

Is this still a missing function in armory or is my attempt on prefabs totally wrong?
Maybe HAXE can do this, but I want to built the whole game with nodes.

Maybe someone can give some good advice what the right way to go is.

BR JA

It’s just a guess, but I think this is due to the fact that objects from external libraries are renamed during export to prevent naming conflicts: https://github.com/armory3d/armory/blob/862e2fa9bfdc09f32176b128c1acdd06ff482604/blender/arm/exporter.py#L1802.

Blender allows duplicate names for objects from different libraries, but Armory only differentiates/accesses objects via name in a lot of places (even though objects have UID attributes which should work). In some cases (e.g. logic nodes) you want to let the user input a name instead of an UID, so I don’t know what should be done in those situations… But if the logic node you’re using let’s you select an object from a dropdown menu, then maybe we just forgot to rename the reference in those cases when the object is from a library, so this should be fixable. Do you have a small example project?

You could check if this is the issue by having a look at the outliner in the debug console, there you should be able to see the names of the library objects.

Hi, I am not pretty sure about your answer. But please find my example maybe this explains my problem and what I want to achive better.

In the node tree of the “ration” you can see what I want to do.
My main goal is the volume trigger to start working. The other prints are just a proof of concept. The trait can access the data from the test file as you can see when you press enter, than the material of the player (from the test file) and also the collision box (of the ration file) are found and printed. But when you move the player into the collision box the other print node is not executed. You can see that it is printed once but only at the beginning of the scene and also the objects are not colliding at that point.

Ration.blend (948.1 KB) Test.blend (869.0 KB)

Sorry for my late answer, now I finally had time to look at your files.

The problem is that both the “Ration” root object and the collision child have unapplied scales which result in a dimension of 40x40x19. So the player already starts inside of the volume.

So no naming issue here :slight_smile:

1 Like

Thank you a lot for checking this and giving your response. Seems that I got several problems with my files where the scale isn´t applied. I thought I went trough them already but I will do now once again and than hopefully it will all work as expected. Armory3D is really awesome already.

BR JA

Hello, I am coming back to this topic as I have worked on some additional prefabs. I got it working so that I can access the child objects, even though Blender is always renaming everything in the background :woozy_face:
My way to go is to link a collection with all the objects. Right now I am working on a door and so all parts like the frame, the door itself as well as colliders to interact with the door are already include. And also cannot be messed up by dragging the object through the scenes.
But what I am actually missing is to have properties on these linked collections. I can already set new ones in the new scene and also access them by the script of the linked object. But I would like to have them coming from the linked object and be shown in the properties manager automatically. Like from linked objects. But they should be changeable, which is not the case at the moment on the objects. I also looked a bit into “make proxy” but this breaks my attempt as also does “library override”. I have seen that the first one will be removed in future Blender versions.

Are there any plans inplementing such a things when moving to Blender 3.3LTS?

Another thing that I have noticed when linking is that tilesheets do not come over properly.
And Sounds are not working. The show up as linked but are seemingly not included in the build and thereby freeze the game when it tries to access them. Is anyone aware of this already, otherwise I maybe raise a feature request on github.

BR J