# Custom Avatar Creation (Unity)

#### Putting Things Together

1. Create a new avatar project in the VCC.
2. Typically you will start with a base from one of the sites mentioned in the previous page (like booth.pm or [Boothplorer](https://boothplorer.com/)).
3. You can recolor an avatar by editing the textures in an image manipulation program like Photoshop, GIMP, Krita or online.
4. You may also get clothing and props. These can be added non-destructively with tools like VRCFury or Modular Avatar. Static meshes, like hand props, are typically easier to add than ones with armatures that need to be fitted to the base, like clothes.

#### Editing Textures

Find the image texture of what you would like to edit (e.g. the hair texture) and bring it into an image editor (like GIMP or Photoshop). If you want to edit the color, select what you want to edit and mess around with the color settings. If you completely want to change the color set it to grayscale first and then change the hue.

#### [Physbones](https://creators.vrchat.com/avatars/avatar-dynamics/physbones)

Physbone components are used to add reactive bone chains to avatars; they can be used to make many types of things move, such as hair and clothing. They can also be interacted with, both by the wearer and by other users (if those settings are enabled).

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/PTTnWUkswkU" width="560"></iframe>

#### [PhysBone colliders](https://creators.vrchat.com/avatars/avatar-dynamics/physbones#collision)

Allows for collision of PhysBones on your own avatar.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/pT6wO01dwTU" width="560"></iframe>

#### [Contacts](https://creators.vrchat.com/avatars/avatar-dynamics/contacts)

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/LOZu6e8ozns" width="560"></iframe>

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/Cp0ysawmizM" width="560"></iframe>

#### Toggles 

Toggles are objects that can be toggled on or off on your avatar in-game. Examples include articles of clothing or props.

The easy way to make toggles is to use either [VRCFury](https://vrcfury.com/components/toggle) or [Modular Avatar](https://modular-avatar.nadena.dev/docs/tutorials/object_toggle).

The hard, tedious, old-fashioned way to make toggles is covered in the video tutorial below:  
<iframe allowfullscreen="allowfullscreen" height="314" src="//www.youtube.com/embed/XqtSg6_W07Y" width="560"></iframe>

#### Puppet Menus

<iframe allowfullscreen="allowfullscreen" height="314" src="//www.youtube.com/embed/kNUNOrHmOrQ" width="560"></iframe>

#### Custom Gestures/Expressions

The easy way is to do this through tools like [VRCFury](https://vrcfury.com/components/gestures).

The hard way is as follows:

Locate the Examples3 folder in the SDK in Unity. Click on vrc\_AvatarV3HandsLayer.controller, duplicate it (Ctrl+D), then rename it descriptively. Create a new subfolder in your avatar’s folder for animations, and place the new controller there.   
  
In your avatar descriptor, under Playable Layers, click Customize then under FX Default Non-Transform. Drag the controller into the slot.  
  
Duplicate your avatar in the scene. Open the Animation window (Ctrl+6). Create a new animation (e.g. Smile). Click record. Then click on the body in the hierarchy, and in the Skinned Mesh Renderer open Blendshapes. Drag them to make the expression you want (in this case Blendshapes like Blink Happy, a slight smile, and slightly raised eyebrows.)  
  
When done, click the top diamond at frame 0 in the animator, Ctrl+C, then Ctrl+V at exactly frame 1.  
  
In the Animator window, navigate to the hand movement (in this case Open), and set the animation file in the Motion slot in the Inspector window.  
  
[AV3 Walkthrough - Part 3 - Weights, Blending, and Tracking - Avatars 3.0](https://web.archive.org/web/20220921104210/https://ask.vrchat.com/t/av3-walkthrough-part-3-weights-blending-and-tracking/2139)<span class="bb_link_host">\[ask.vrchat.com\] (Internet Archive)</span>

<div id="bkmrk--3"><iframe allowfullscreen="allowfullscreen" height="314" src="//www.youtube.com/embed/FtEpxOozwOI" width="560"></iframe>

</div><div id="bkmrk--4"><iframe allowfullscreen="allowfullscreen" height="314" src="//www.youtube.com/embed/PXyXF9nH--Q" width="560"></iframe>

  
</div><div id="bkmrk--5"></div><div id="bkmrk-for-controllers-that">For controllers that have individual finger tracking (like Valve Index controllers):</div><iframe allowfullscreen="allowfullscreen" height="314" src="//www.youtube.com/embed/2DFT0LsOaIw" width="560"></iframe>

#### Avatar Audio

Put multiple sound effects on avatars in an optimized way by using [Animator Play Audio](https://creators.vrchat.com/avatars/state-behaviors/#animator-play-audio).

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/BmXCXP6UsQ8" width="560"></iframe>

#### Audiolink on Avatars

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/Gp1woO9RzGY" width="560"></iframe>

#### Voice Activated Effects

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/kgs5gz8BPtY" width="560"></iframe>


#### Twist Bones

Twist bones come with some avatars; they are extra bones that help prevent certain bone rotations from looking weird or collapsing in on themselves. They have to be set up.

The tutorial is somewhat outdated; now instead of using Unity rotation constrains, use [VRChat rotation constraints](https://creators.vrchat.com/avatars/avatar-dynamics/constraints/vrc-rotation-constraint) instead.

<iframe allowfullscreen="allowfullscreen" height="314" src="//www.youtube.com/embed/_GmAupH5Co0" width="560"></iframe>

#### OSC

OSC stands for Open Sound Control, but that doesn't matter. What OSC does is allows parameters on your avatar to be connected to external applications or devices. OSC is used for impressive things like heart rate monitors and face tracking.

[OSC Official Overview](https://docs.vrchat.com/docs/osc-overview)

OSC Unofficial Overview video:  
<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/OHjN_q6RqGY" width="560"></iframe>

#### Upgrade Old Projects

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/M9l0SVF0fJY" width="560"></iframe>

Unity 2018 and SDK 2 projects (very old ones, pre-2021):  
<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/C06_sDZCVY8" width="560"></iframe>

#### <s>Dynamic bones</s> (no longer supported, replaced with PhysBones)

Dynamic bones are from a [paid Unity add-on](https://assetstore.unity.com/packages/tools/animation/dynamic-bone-16743) (superseded by PhysBones, which basically do the same thing and more) that allows for bones to delay their return to their neutral position using physics. It is used for things like hair or animal ears.

If your avatar package used dynamic bones, you do NOT need to buy and import the Dynamic Bones package. You just need to download the [Dynamic Bones stub](https://github.com/VRLabs/Dynamic-Bones-Stub?tab=readme-ov-file) so VRChat can automatically convert the dynamic bones components to PhysBone components, and you can modify those from there.

#### (DATED, Avatars 2.0) Custom Animations

<p class="callout danger">Avatars 2.0 is now deprecated. Do not use it for a new project.</p>

To add these, find the CutsomOverrideEmpty file in the VRCSDK. Make a duplicate of it (ctrl+D) and rename it (something like CustomOverride) (press F2).  
  
Click on it and the animation slots will appear in the inspector window with nothing in them. If empty, the animation will be the VRChat default; if filled with a .anim file, it will be overwritten and that animation will be used instead.  
  
To apply the animations to the avatar, click on the avatar and drag the CustomOverride onto the Custom Standing Anims and Custom Sitting Anims slots in the avatar animations component in the inspector window.