How do I make a customizible bookshelf?

Sorry if this is in the wrong section it seems like it would span a few.

I want to make a bookshelf that I can randomize the books on. I’ve modeled the bookshelf and books in blender. I even wrote a script in blender to do the randomization there, but I want the books to be mesh instances and the colors shader parameters.

Ideally I’d like to be able to drag the bookshelf into the world and to randomize the books either click a button floating near it in the editor that’s only visible at design time or a button in the settings panel.

What should this be or at least what does unreal engine call something like this?

I assume I can do it as a blueprint combining the bookshelf model and the template books, but how/where do I put put the button and the code to do the randomization?

I don’t think I need someone to hold my hand through this but I would really like a push in the right direction.


Making a floating button or a setting is the easy part. Just make a button that captures an On Clicked Event, hook it to the randomization routine for the books. Nifty idea, but I would make it a boolean variable that is exposed, that way it becomes a setting on the details panel. Plug it into a Branch node, run the randomization routine off of the True path.

Short Answer for Randomization part: check out the YouTube Tutorial for making an endless runner game. You could make spawn points for books in your bookcase and have it randomize to generate a book from a book object listing array or be blank.

Probably select the bookshelf in the world, create a blueprint out of it, create a public/visible variable that contains the book so you have a reference to them and can instance them.

Create a function that handles the randomizing. Inside the bookself’s construction script, do what Yggdrasil said about creating a boolean with a branch node that will run your randomizing function when its true.

That’s a quick way to say it, there’s a good example of the button functionality in the template projects with a skybox, I think all of them have it. You click on the skybox, and in the details panel you’ll see under the Default tab the first thing is “Refresh Material” and it’s a checkbox, this is the boolean that runs some logic. So just look inside the SkySphereBlueprint construction script and that’s a pretty good example of how to do it.