Custom characters guide

This is a tutorial for you to deal with scripting your custom character in roblox!


How is your character made?

Roblox characters can have different types of structures and can be build in many different ways. Probably if you got to this article you already have your character made, but here are some tips over creating it:

Roblox’s default are made with the R15 and R6 structures, so you will save some time if you could rig your char in a way that can copy the R15 or R6 structure.
But there is also the R1 option: characters that are a single mesh rigged by bones. Lets say, if you want to create non-humanoid modelas like a dragon or a snake.
If your are using an R1 character, take special care over the decision about using a Humanoid object inside your character. Maybe removing the humanoid and creating your own character script would be the best choice. Humanoids are made to work specifically with R6 or R15 models.

image

For animating a model without a Humanoid you can use the AnimationController instead.

For rigging models on Roblox Studio, try this plugin Rig Editor by @goro7.

For some reference of ways on how you can create your character:

Bone | Documentation - Roblox Creator Hub
Rigging and Skinning | Documentation - Roblox Creator Hub
Rigging a Simple Mesh | Documentation - Roblox Creator Hub
Skinning a Humanoid Model | Documentation - Roblox Creator Hub
3D Layered Clothing is Now Available!
Layered Clothing Example | Documentation - Roblox Creator Hub

Talking about R15 and 16, A common problem with custom created rigs is when the modeler forgets to create meshs facing the right direction. Make sure all your character’s parts face front and your animations will stay consisent over different character types, avoiding this kind of problem (custom rigged character with wrong-faced meshes reproducing the default Rthro walk animation):

Recapping what is inportant:

If you are using an R6 or R15 based rig, you will be able to use a Humanoid object without problems and will have no hard time using the default Player’s methods related to the Player’s Character.

If you are using an R1 model, you can still rig it with bones to match it with an R15 or R16 model and get the default Roblox’s APIs for characters.

If none of the above is possible for you, then you have choosen the “create from scratch” path, where you will get no benefit over Roblox scripts that regards to Sounds, Animations, HumanoidStates, Loading, Respawning, Camera setting and etc. I will talk less about scripting this type of model because scripting it adds a big layer of complexity, but its never impossible. If you want to make it right you will need to fork the default player and character scripts, analyse it and edit for your needs.


CharacterAutoLoads

CharacterAutoLoads is a Property of the “Player” service, changes if the game will automatically spawn your character when the game begins or when you die.

image

You most likely will prefer that option disabled, specially if you are using an R1 character.


LoadCharacterAppearance

Turning “LoadCharacterAppearance” makes the game not to download the player’s character appearance with the API, that makes the game quickier on iniciation in case your are not going to use player’s characters default appearence. If you use the Player:LoadCharacter() (needed if “CharacterAutoLoads” is disabled) method with this disabled, the character spawned will be a grey blocky character.

Players also have individualy the property CanLoadCharacterAppearance to define whenever its appearance will be loaded or not.

image


StarterCharacter, StarterCharacterScripts & StarterHumanoid

StarterCharacter [Class Model]
Placed over the StarterPlayerFolder.
All objects placed inside this model will be copied to the Character model of each Player as they join the game or respawn after death. These objects will be loaded in place of the default character that is sent from the website.

StarterCharacterScripts [Class StarterCharacterScripts]
Folder already inside StarterPlayer service.
All Script or LocalScript objects placed inside this object will be copied into the Character model of each Player as they join the game or respawn after death. If any scripts named ‘Sound’, ‘Health’, or ‘Animate’ are found inside this object, they will replace the default scripts inside the character with the ones included in this object.

StarterHumanoid [Class Humanoid]
Placed over the StarterPlayerFolder.
A copy of this Humanoid object will be copied to the Character model of each Player as they join the game or respawn after death. This can be used to initialize any settings on the Humanoid object such as JumpPower or MaxHealth.

Many people try to keep changing StarterCharacters in “StarterPlayer” during the game to change characters in the middle of the game, I was doing it until I find out that it leads to lots of weird bugs all over the char, with plenty of APIs not working as it should. Instead I started to create my own script to load the characters.


HumanoidDescriptions

HumanoidDescription is an object that stores a description for a Humanoid for R6 and R15 rigs. It can be applied in order to set a rig’s scaling, clothing (Shirt, Pants, ShirtGraphic), Accessories, Animations and BodyColors.

HumanoidDescription | Documentation - Roblox Creator Hub

There are also some useful methods that interact with humanoid description on the Players service, like:

Players:GetHumanoidDescriptionFromOutfitId()
Players:CreateHumanoidModelFromDescription()
Player:LoadCharacterWithHumanoidDescription()


Loading function for R15/R6 Humanoids

Your custom loading function can have the role of spawning and customizing your character on spawn.

Roblox have some default functions on Player instance for loading characters and some on Humanoids together with HumanoidDescriptions to customize it. If you are using Humanoids with R15 or R6 rigs, search these links:

Player:LoadCharacter()
Player:LoadCharacterWithHumanoidDescription()

I also like sometimes to create a function to spawn a “Blank Blocky” R15 humanoid and customize it after spawn using one of the functions above and adding Accessories, BodyColors and AutomaticScales.

For weird R1 characters you will need to create a function that clones a characters, puts it in workspace, set the Player.Character to that model, create custom RemoteEvents and Events for Player.CharacterAdded because the default ones wont work, and add your own customization to it.


RbxCharacterSounds

If you have done it all until here and you are working with an R6 or R15 model with a Humanoid in it, it is very possible that you would want to disable the custom walking sound that haunts your rig if it is something like a dragon or an alien - Why would it have that spongebob’s boots sound while walking or climbing?

To change or mute default character sounds you will have to fork RbxCharacterSounds and edit it:

  1. Hit Play button.
  2. Go to Players > Your Player > PlayerScripts
  3. Copy “RbxCharacterSounds”
  4. Hit Stop button.
  5. Paste it in StarterPlayer > StarterPlayerScripts
  6. Open it and find the SOUND_DATA table, it contains sound ID’s and Volume.
  7. You can take your look on this script to mess with sound related character’s default behaviour, or clear it if its your will. It must stay inside “StarterPlayerScripts” to be used by the game instead of creating a new default RbxCharacterSounds script on spawn. If you want to delete the sound, you can go for deleting the whole walking and climbing sound object from the table (and you will have to find delete all of its calls in the whole script) OR you can just mute it by setting Volume to 0, and muted the SOUND_DATA table should look like this:
local SOUND_DATA = {
	Climbing = {
		SoundId = "rbxasset://sounds/action_footsteps_plastic.mp3",
		Looped = true,
		Volume = 0,
	},
	Died = {
		SoundId = "rbxasset://sounds/uuhhh.mp3",
	},
	FreeFalling = {
		SoundId = "rbxasset://sounds/action_falling.mp3",
		Looped = true,
	},
	GettingUp = {
		SoundId = "rbxasset://sounds/action_get_up.mp3",
	},
	Jumping = {
		SoundId = "rbxasset://sounds/action_jump.mp3",
	},
	Landing = {
		SoundId = "rbxasset://sounds/action_jump_land.mp3",
	},
	Running = {
		SoundId = "rbxasset://sounds/action_footsteps_plastic.mp3",
		Looped = true,
		Pitch = 1.85,
		Volume = 0,
	},
	Splash = {
		SoundId = "rbxasset://sounds/impact_water.mp3",
	},
	Swimming = {
		SoundId = "rbxasset://sounds/action_swim.mp3",
		Looped = true,
		Pitch = 1.6,
	},
}

You can also try to change the default sound URL for another URL


Animations

For R15/R6 Humanoids, Roblox automatically spawns a local script called “Animate” inside the characters. You can fork it to edit and place it in StarterCharacterScripts. It will allow you to change the animations or animation behaviour of your character.

  1. Hit Play button.
  2. Open your Character in Explorer
  3. Copy the local script called “Animate”
  4. Hit Stop button.
  5. Paste it in StarterPlayer > StarterCharacterScripts
  6. Inside the script (instance, not its text) there are values with the action name, go inside the value with name of the animation you want to put yours, click on the Animation object inside it and change it’s ID in properties to your animation’s ID. Attention here: Although there is a “walk” and a “run” animation, the actual normal walking sistem is only using the walk anim, changing “run” seems to rave no effect. And more important: Never use the same animation ID for walk and run animations because it will stop the animations from replicating to server.
17 Likes

I would like to state for the record that from my experience, humanoids with non-humanoid models actually work fine, as long as a head and either a torso (r6) or uppertorso (r15) are present and connected either directly or indirectly (such as by a neck) in the rig. For most conventional creatures, this won’t be a problem, and if you’re making something like a spider which has a cephalothorax and an opisthosoma, you can probably just make the cephalothorax the head and the opisthosoma the torso and call it done. This completely removes all the headaches of trying to work with animationcontrollers and custom character scripts, especially in a morph game.

2 Likes

For some reason, whenever I try to change the walkspeed and jump height of my StarterCharacter (R15), it doesn’t do anything. It keeps it at the normal 16. I am trying to make custom characters for my fighting game so I can have custom armor, and I don’t know how to change the walkspeed and jumpheight values. (The health values work though.) Can someone tell me what I’m doing wrong?

Probably something with your code, you should be able to. Check this:

If you are doing it though a script then check if you are not loading the character more then once, if ure calling :LoadCharacter() while Players.CharacterAutoLoads is enabled.

I am not using a script, I am using a character in a folder in my game, since I am making a UI to pick what armor you want, I am not using a script. I will look into it though to see if I am missing something.