Base Layer
written by child of the beast
If you don’t already have the animator window open. You can open it by going to the top of Unity in the Menu Bar at “Window>Animation>Animator”
The Base layer holds the Animation Controller for all your default idle/walking animations. The default animation controller for this is held at
“Asstes/VRCSDK/Examples3/Animation/Controllers/vrc_AvatarV3LocomotionLayer.controller”
and looks like this
This can look a little overwhelming at first but let’s break it down into parts.
We’ll start by going over the basic animation controller stuff. This applies to every section, so if you’ve never worked with an animation controller before, don’t skip the first few sections!
But before we begin, remember to ALWAYS KEEP BACKUPS.
Click the controller in your “Project” tab and press Ctrl+D to make a copy of it. you can then rename it and move it to somewhere where you’ll remember where it is.
Animation states hold either a Blend Tree or an Animation in them. They transition between each other with translations that you can add conditions into.
This is what they look like
To create animation states, you right click and hit “Create State>Empty”
We won’t be creating any states in the guide.
You you click on an animation state. This is what shows up in your Inspector.
You’re going to use these 3 things in a state the most, Motion Speed and Mirror.
Motion is the animation that plays in that state.
Speed is the speed the animation plays at (1 being default).
This can be a negative number to play the animation backwards.
Mirror mirrors the animation example being:
If you have a “walk right” animation, and mirror it. You can then use it as a “walk left” animation.
Parameters hold all of the animators data. These would be Floats, Ints, Bools, and Triggers.
You can open the Parameters menu one of 2 ways.
You can open it in its own window by going to your menu bar under
“Window>Animation>Animator Parameter”
or in the animator itself by using the tab next to the Layers tab.
There are 4 different parameters. We’ll break each down into its own mini section and go over what they are. I’ll go over what they’re used for in later sections.
Floats hold numbers along with decimals
Examples of floats:
0
140
-36
1.56
-1.89
-450.9
Ints (short for Integers) are WHOLE numbers. It cannot hold decimals.
Examples of Ints:
0
140
-36
100
-100
-450
Bools (short for Boolean) is a fancy word for True or False.
These can only ever hold two things:
1 (true) or 0 (false).
Triggers aren’t really like the rest of the parameters. They’re sort of like a bool (true or false) but do not actually store data. You’d use them mostly in transitions to trigger an animation state that you only want to play when you tell it to, without having to manually reset a bool yourself.
Transitions are a big part of your animation controller. They hold all of the controller’s logic, or in other words: they control when to swap animation states.
Every line/arrow in between an animation state is a Transition.
Right click on any Animation State to create a new transition.
You can also click on any of the transitions to bring them up in the Inspector View.
Let’s break down the Inspector view.
There’s 2 options in the Transitions section. We’re going to be ignoring these since they’re mostly for previewing/debugging more complex state machines but i’ll go over them briefly.
Solo: plays only that transition
Mute: Disables the transition
Exit time specifies when the transition to the next animation state starts. Keep in mind, exit time is in percent and not seconds.
Some examples:
If exit time is 1, the transition will wait for the animation to fully play before the transition begins.
If exit time is .75, the transition will only start if 75% of the animation has played.
If exit time isn’t check, the transition will start instantly.
Fixed duration has 3 parts: Fixed, Duration, and Offset. These are represented by the blue section in the preview here:
Fixed Duration toggles between Percent and Seconds.
Duration is how long the blending between the states takes, either in Percent of the animation or seconds.
Offset controls when the blending between the states begins inside of the transition. This is a percent.
0 will start blending instantly.
.5 will start half way though the animation.
Duration and Offset can both be edited inside the preview to make things a little bit easier to visualize.
Conditions are where the logic is held. You pick a parameter and choose what happens based on the chosen parameter.
In the example transition these are:
if “Upright” is less than .41
AND
if “Supine” is false
If both of these conditions are met, the transition will start.
I’m going to continue using the Standing state as an example here.
Double click on the Standing State to open up it’s Blend Tree in the animator.
This is where the Standing idle animation is held as well as the walking animations, or in this case the Blend Tree that contains them. A blend tree is kind of like an animation.
This is the Blend Tree for Standing.
It holds all of the default Proxy animations for VRChat. Keep in mind, VRChat replaces these when you upload an avatar, they are not the real animations that get uploaded with your avatar. If you want to replace only a specific part of the walking animation, you would do it here.
I’m going to break the last parts of Blend Trees into 3 different sub sections. The first going over what blend trees do, another for replacing a part of the blend tree and one for replacing the entire blend tree with a new animation.
Here’s the Blend Tree in the Inspector View.
The parts i’m going to be covering are Parameters, Motion, PosX/PoxY, the clock, the little half guy and what that blue box is with the diamonds. I won’t be covering Blend Type.
Parameters are 2 drop down menus where you choose what parameters PosX and PosY are tied to.
Motion is where you put your animation.
These decide what your blend tree is currently doing. In VRChat’s case, these are your X and V velocity in most cases.
What you set these to determines what animation currently has the most weight.
This is what speed the animation plays at.
Remember, this can be set to a negative number.
The little half guy picture is for selecting whether or not the animation is mirrored.
This is a visualizer for the animations in your blend tree. You can use it to better visualize how your animations work with PosX and PosY.
The blue diamonds are your animations and are placed to where their X and Y positions are in the below table.
The red circle in the middle represents where the current X and Y positions are. You can move any of these by clicking and dragging them.
First thing’s first, ALWAYS KEEP BACKUPS
duplicate the blend tree that you want to edit. The default blend trees are held inside:
“Assets/VRCSDK/Examples3/Animation/BlendTrees”
And the one we’re looking for in this example is named “vrc_StandingLocomotion”
Duplicate it by clicking on the blend tree in your project tab and press Ctrl+D.
Now that we have our new blend tree, rename it to something like “[your avatar]_Standing” and move it into the folder that you want. We can now replace the animation you want to change inside that new blend tree in this menu:
This menu is inside the “Inspector” tab
You can now replace the old Blend Tree in controller with the new one we’ve edited and assign the controller to your Base Layer.
Replacing the Blend Tree is very easy. Just replace the Motion in the Base Animation Controller with the animation that you want to. Just note, this will replace not only your idle animation, but also your walking animation aswell. I recommend either making a new blend tree (which is outside the current scope of this tutorial) or go back to the above section and just replace the Idle animation of the existing Blend Tree.
This is where the controller starts. It points to the state that your avatar starts in, which would be Standing.
Standing holds the blend tree for your Idle animation, all your walking and running animations and your death animation.
Here are all the animations in the Blend Tree broken down:
Proxy_die | | | Death animation |
Proxy_run | | | Run animation |
Proxy_walk_forward | | | Walk animation |
Proxy_stand_still | | | Idle standing animation |
Proxy_walk_backward | | | Walk backwards |
Proxy_walk_backward | | | Run backwards |
Proxy_run_strafe_right | | | Run Left |
Proxy_strafe_right | | | Walk left |
Proxy_strafe_right | | | Walk right |
Proxy_run_strafe_right | | | Run right |
Proxy_strafe_right_135 | | | Walk backwards left at an angle |
Proxy_strafe_right_135 | | | Walk backwards right at an angle |
Proxy_strafe_right_45 | | | Walk left at an angle |
Proxy_strafe_right_45 | | | Walk right at an angle |
Proxy_run_strafe_right_45 | | | Run left at an angle |
Proxy_run_strafe_right_45 | | | Run right at an angle |
Proxy_run_strafe_right_135 | | | Run backwards left at an angle |
Proxy_run_strafe_right_135 | | | Run backwards right at an angle |
The crouching blend tree holds all of the animations for your crouching idle, crouch walking and running along with various angles.
Here are all the animations in the Blend Tree broken down:
proxy_Crouch_still | | | Idle animation |
proxy_crouch_walk_forward | | | Crouch walking forwards quickly |
proxy_crouch_walk_forward | | | Crouch walking forwards |
proxy_crouch_walk_forward | | | Crouch walking backwards |
proxy _crouch_walk_right | | | Crouch walking forwards to the right |
proxy _crouch_walk_right | | | Crouch walking forwards to the left |
proxy _crouch_walk_right_45 | | | Crouch walking to the right at an angle |
proxy _crouch_walk_right_45 | | | Crouch walking to the left at an angle |
proxy _crouch_walk_right_135 | | | Crouch walking backwards to the right at an angle |
proxy _crouch_walk_right_135 | | | Crouch walking backwards to the left at an angle |
Prone holds all of your crawling animations
Here’s what it looks line in the animator:
Here are all the animations in the Blend Tree broken down:
proxy_low_crawl_still | | | Idle Animation |
proxy_low_crawl_forward | | | Crawling forward |
proxy_low_crawl_forward | | | Crawling forward quickly |
proxy_low_crawl_forward | | | Crawling backwards |
proxy_low_crawl_forward | | | Crawling backwards quickly |
proxy_low_crawl_right | | | Crawling Right |
proxy_low_crawl_right | | | Crawling Right Quickly |
proxy_low_crawl_right | | | Crawling Left |
proxy_low_crawl_right | | | Crawling Left Quickly |
It doesn’t look like Supine is used for anything as of writing this.
The definition if Supine is “laying on your back” and as far as i know, VRchat doesn’t have support for this right now, and there’s no animation held in Supine’s state.
I’ll update the guide if they decide to do anything with this.
This page is unfinished.
I went over the main sections that most people are going to use. i’ll go the spider web that controls Jumping when i understand it better.
Join the Discord server if you want to be kept up to date with releases.