How to make a non-human character customization screen?

I am making a game where the players are all alien animals, and a human style character creator tutorial doesn’t really apply to what i want to create.

The process i imagine for my character creator goes like this in steps:

Player selects a species, then there are a set of selectable texture layers (markings) for that species. They are white textures where the player applies color to them through a color picker.
The player can choose up to four layers of markings to apply to their character, and color them individually, as well as coloring the base color, eyes, mouth, and claws of the creature, which would be a part of the character’s base texture.

I am wondering how i would set this up to work as a scene that is separate of the game itself, and how i could also make a “preset save” system so that players can save their favorite customizations per species. For example when the player selects species A, it will not show any saved presets for Species B.

This is all i want to know. I do have prior experience in modding unreal engine games, but not in creating my own games, yet.

My goal is pretty ambitious, to make a creature survival game with RPG elements, And getting the character customization scene down would be a huge step to jump-starting my project.

1 Like

The basics of a humanoid-based customization system would work just as well with creatures. The trick would be to figure out analogous features of each species and categorizing them together. Like, if they all have a head mesh and a body mesh of some sort, it shouldn’t be any different than setting up modular humanoids that have mesh components for head/helmet and body/armor slots.

For multiple texture layers used for markings, you could define them in a data table with a structure like: SpeciesName, BaseTexture, MarkingsTexture, EyeTexture. etc… and on construct/begin play, you’d get the data table row which matches the species name, and set texture object parameters on a dyamic material instance, plus any custom color parameters (likely stored as variables on the actor). The color part here should be no different really than how most human customization systems select hair and skin color. Though you’ll probably want to set the default color values for each species in the data table too. And depending on how different the creatures materials are, you may also need to define a different parent material in the table for the dynamic material instance to use.

1 Like

Here’s a tutorial on full body morphing that Warlord did. You might some ideas from it. Just because the morphs are applied in the expression

1 Like

Love this breakdown. Thanks for giving me some structure too, as I often find organization to be quite challenging!

I am still pretty stuck on this! I am trying to make a data table and a structure to hold my texture lists and whatnot… IDK if it is the correct way to go about it… What I am stuck trying to wrap my head around, is how am I going to make the character customization UI find my markings textures for the selected species, add them to a drop down list, select up to four layers individually from this dropdown menu, and all that? It seems like Making a Data Table takes a TON of work. If I had 5 species, each with 30 markings for their specific mesh UV maps, I would have a HUGE data table to make, wouldn’t i?

Most video tutorials are about making Mesh-Swap character customization systems. I do not want to swap meshes at all. I want to change textures and colors only!

I also need to figure out how to make my material instance dynamic. I set up all the parameters for the marking layers, base textures, and colors in the Base material, but I want the Material Instance from that Base Material to be customized In-Game somehow. It would be so easy for me to understand this if I could just implement the material editor in the game somehow… Trying to figure out Enums and Structures and Data Tables broke my brain!

I would appreciate more advice, and explain things to me in simple step-by-step instructions, or provide Example screenshots I can base my blueprint codes from?

I learn best through reverse engineering and “Monkey See, Monkey Do” Tactics.

I have provided a very crude mockup picture of my character Creator UI Idea.

The good news is: This is super easy!

You have to make friends with “Material Instance Dynamic” (MID for short)

First, make a Material. For each texture you want to be able to swap, make that a texture parameter. For each color you want to be able to adjust, make that a color (vector3 or vector4) parameter. Give the parameters easy-to-arrange names – like “Normal0,” “Normal1,” “Markings0,” “Markings1,” “Markings2,” “Color0,” …

Create an object or struct type that contains the appropriate asset kinds – texture references, and color values. The point of this is to store the values, and it should have a function to “apply yourself to a material” that sets each parameter by name as appropriate.

Finally, in your character setup, you get a copy of the material in question, you call “make dynamic instance” on that material, you take the parameters of one of those objects and apply to this material instance, and you configure the material instance as the material to use for the animated mesh.

You could even give your player character an instance of this object that stores the values. It could be an actor component maybe, to make it easy to manage.

In your GUI, make sliders and buttons to change each of the parameters in this kind of parameter-storage object. When the user changes some parameter, update the value in the object, and re-apply the values of the object to the parameters of the material that’s on the mesh.

1 Like

I do have “Step 1” Of your solution done already! Setting up the material and making the params was very easy for me!

About the “Object or Struct Type that contains the appropriate asset kinds”, Could you elaborate further? as this is the main issue that is hindering me from moving forward. I do not have any idea how to properly make Structures, as they confuse me!

A lot of your explanations are quite vague to me, or difficult for me to understand without an example image or two.

Thank you for your reply, by the way. I appreciate any help I can get!

To make a struct, just right click somewhere in content browser, and on the menu that pops up, pick Structure from the blueprint category. Structs are just empty lists of variables used by datatables and other blueprints to define a collection of variable types.

For the creatures, you’d basically just add a bunch of member variables to the struct that match the vars used by thedynamic material. Might also want to add other creature info here like species name or whatever and use the struct for the creature datatable too.

Example Struct:

Used by a data table:

Construction script does this noodley mess:

Editing row handle variable in the actor bp on map triggers color/texture change:

1 Like

I love these examples! This makes more sense to me now. I do have a question for you. Would this work in a multiplayer sense? I’m trying to code my game to be multiplayer compatible from the very beginning to avoid issues with implementing multiplayer later on.

I don’t want everyone’s character to look the same as mine because of how i customized it, for example.

The basic concept would work for multiplayer. Might need to move the material paramater setting bits into a function called on begin play, and add the struct as a var to the chars or some sort of ‘player info’ array in game instance class to store the customization. Pretty much every game with character customizing uses something like this to edit skin tones, tattoos, hair, and such. If you can find a tutorial or sample project for editing humanoids, follow it and swap out mesh/texture/color names for things that match creature definitions in your struct.

1 Like

Stick with an object, then. It’s easier to make it replicate for multiplayer, anyway!
It’s also convenient to put the “assign yourself to a material” function inside the object itself, whereas structs cannot have methods.

Make this an actor component, add it to your player character.
(Each of the properties are marked as replicates notify, and savegame, and each of the onrep callbacks calls the “apply material” function, which you should also call when the UI changes something. You may need to forward the message to the server as well if you’re multiplayer.)

I already finished a part of illspiritx’s Method as soon as you replied, But I think I can combine their method with your blueprint object thing somehow!

Here’s a couple images of what I have done.

I made 2 custom events in the event graph of my character Blueprint, one to set the base material, and one to set the eyes material!

I made the actual setting of the textures and colors part of the events into a function because it is quite huge indeed. I displayed it in the following gif


If I were to forego the structure and replace it with another blueprint, Would this be worth it in the long run? and if so, How quick do you think it would be for me to replace the structure, as honestly… I think it would be faster now than later!

The Object Method is bust. Kept getting these “Accessed none” errors all over the place. Structures worked better.

Sorry to revive this old thread… But i am still struggling at figuring out what i am doing wrong.

I will provide a list of every asset i have used to make the character customization system so far… My issue is i don’t know how to “connect” them together.

I have a master material with all the default settings for the customization system on it

I have a material instance for the selected species that will use the species specific texture options when using the character customization UI

I have a data asset containing all the texture options and other variables for the selected species

I have the customization object with the procedure to apply the settings called by the UI to change the character’s material settings, attached to the character’s blueprint.

I am rewriting the UI for this system, as it was essentially spaghetti that didn’t work.

My issue is making all these assets i have work together to make the customization system. They’re all separate right now.