# VRC Fury - All in one VRChat Prop / Inventory / Gesture Manager

Set up your avatar's props, gestures, and other animations without ever touching a layer or menu!

## Beta Notice

VRC Fury is new. Things may be broken. Beware. If you find any issues, please report them in our issue tracker, or to @SenkyDragon on twitter.

## Benefits
* **Easy to use**
  * Define props, puppets, item modes and more using a simple GUI in Unity
* **No more layers, no more menu editing**
  * The animation controller, VRC Menu, and synced parameters are all generated automatically by VRC Fury.
* **Great for asset artists**
  * Prefabs can contain their own VRC Fury definitions
  * Distribute your avatar addons with everything needed for the user to add your animations / props to their menu.
  * No more complicated "copy my layers into your fx"! If their project has VRC Fury, they can just drop your prefab into their project, and upload!
* **No more absolute paths for animations**
  * VRC Fury props defined in prefabs will automatically have their clips rewritten to work properly, no matter where in the hierarchy they are ultimately placed.
  * Write your animation clips from the root of the prefab, and VRCFury will handle rewriting it when it winds up on an avatar.
* **No clips? No problem!**
  * Just want to toggle a game object or a blend shape? No worries!
  * VRC Fury can create these toggles for you, without you needing to touch animation clips whatsoever.
* **Gestures, Idle Animation Support, and more!**
  * Fury isn't just about props. It also has logic to build every single animation layer that I personally use myself for my avatars. If it can't build a layer the way you want, let us know and maybe we can support it!
* **Already got your avatar perfect?**
  * VRC Fury still works perfectly with avatars that already have animations.
  * Your existing layers, parameters, and menus will be untouched, and VRC Fury will keep its work totally separate from yours.
  * This also means VRC Fury will not clobber the work of TPS, VRCLens, etc.
  * Note: VRC Fury should work with existing controllers using *either* Write Defaults ON or OFF, but is only fully tested with OFF (the vrchat recommendation).
* **No more write defaults pain**
  * Every layer generated by VRC Fury will automatically have its default states calculated and maintained, based on the resting state of your avatar in the editor. This includes animation clips you give VRC Fury, so now you only have to make "on" animations, no more "off"!

## How to install and use

* Delete the VRCFury directory from your project (if upgrading).
* Download the latest Unity Package from the [Releases Page](https://gitlab.com/VRCFury/VRCFury/-/releases)
* Drag the package into your project's Project tab (where the folders are) and click OK to import
* If you are using just VRCFury because an artist said you needed if for their prefab:
  * You can stop here! You're done! Just follow their directions to add their prefab to your avatar, and VRC Fury will handle the rest.
  * Otherwise, read on to add your own behaviors and props.
* On your main avatar object, click `Add Component` -> `VRC Fury`.
* Add props and other features using the `+` button on the component. See the `Feature Modules` section below for information about each type of feature.
* You're done! There's no "building" to do. VRC Fury will update your FX layer, VRC menus and params automatically before each upload.

## Upgrading

* In unity, choose `Tools` -> `Update VRCFury`.
* If there is an error, delete the VRCFury folder from your project, then follow the instructions above to reinstall.

## Feature Modules

Once you add a VRCFury component to your avatar (or prop), you can add any combination of these modules:

### Toggleable Prop

Use this for a normal "on / off" prop. For simple object props, click the plus, choose Object toggle, and then drag the object into the field. If you choose blendshape, the blendshape will be set to 100 when "on" (only works on root skinned meshes). For more advanced "on" states, you can provide an animation clip instead.

**Menu Entry**

The name you put in the prop's text field will be used as the name of the toggle in your VRChat menu. If you wish to put the prop in a sub-menu, use slashes. Ex: `Props/My Cool Piano`

**Default On**

Want to add an idle animation or "default prop" to your avatar? Create a new prop, click the `*` and select `Default On`. Your idle animation or prop will now be on all the time (but you can also trigger it back off in game!)

**Slider**

Select `Slider` from the `*` menu, and VRC Fury will make the prop into a slider rather than a toggle. 0 will be the avatar default state, and 100% will be your "enabled" state.

**Saved**

Not everything in VRC Fury has to be a temporary prop. Want to save your clothes (or anything else?) across worlds? Select `Saved between worlds` in the `*` menu.

**Physbone Reset**

Got an animation that changes parameters on a physbone?

Click the advanced `*` button on the VRC Fury prop for the animation, then click `Add PhysBone to Reset`. Drag the object for the physbone into the box (it should be on an empty by itself). VRC Fury will automatically flip the bone off and on any time your animation is run or reset, causing the physbone to reload your changed settings.

### Prop with Modes

Similar to a Toggleable Prop, but can have multiple separate "on" states instead of just one.

### Blink Controller

Include a single-frame animation of your avatar with its eyes closed (or click the plus and give it the blend shape name), and VRC Fury will drive your avatar's blink cycle. If you do this, be sure to disable blinking AND look up / look down support in your VRC Avatar Descriptor.

Benefits:
* Blinking will stop automatically when your avatar performs vrcfury gestures affecting its eyes. This means no more 'double-blinking'.
* Unlike vrc's built-in eye tracking disable feature, your eyes will not freeze closed, partially closed, unfreeze unexpectedly due to combo-gestures.
* Your eye blink will be synchronized with all other clients (I'm unsure if the default vrc eye blink is synced or not).

### Breathing Controller

Automatically creates an animation for your avatar's breathing cycle. Provide either a gameobject (which will be scaled between the provided "min" and "max" scale), or a blendshape, which will be animated between 0 and 1.

### Advanced Visemes

This feature allows you to use VRCFury actions as visemes. If you use this, be sure your avatar descriptor is set to LipSync Mode "Viseme Parameter Only."

Benefits:

* Use animation clips, material flipbooks, or any other VRCFury action as a speech viseme.
* You can use bone transforms in your visemes, meaning you can open your jaw rather than using an "open mouth" blend shape.
* This can enhance some features, such as tongue movement, while your mouth is open during speech.

### Armature Link

Is your prop a skinned mesh that "attaches" to the bones of the root avatar? Armature Link is what you need! Give it the root bone (hips) within your prop and the path to that same root bone in the avatar, and VRCFury will automatically parent constraint the entire hierarchy together. Just make sure the bones you want to link are all in the same order and have the same names!

### Full Controller

This is usually only useful for prefab artists. Provide a controller, menu, and params, and it will be merged into your client's avatar automatically. If you're working on your own avatar, you should usually just add these things to your avatar's own controller, menu, and params instead.

### TPS Integration

When enabled, VRCFury will instruct Poiyomi TPS to re-apply itself on the avatar as part of each VRCFury build. This is mostly useful when taking advantage of `Controller-Less Setup` (see below), as VRCFury will wipe the controller between each build, which would otherwise lose your existing TPS animator controller setup.

## Info for Prefab Artists

Distributing your own prefab with animations? 
* Add the VRC Fury component to the root object of your prefab, and add the props like normal. 
* Instruct your clients to install VRCFury in their own project.
* Ship the prefab to them, and instruct them to drag the prefab onto whatever bone on their avatar.
* When they upload their avatar, your prefab's props will be imported to their menu automatically! Any animation clip paths will be adjusted automatically to work properly, no matter where they've placed it in their avatar.

Note: If a client wishes to use your VRCFury-enabled prefab in a project WITHOUT VRCFury, they will need to remove the VRCFury component from the prefab instance after they drag it in. The VRCSDK will not allow an avatar to be uploaded containing a VRCFury component when VRCFury is not installed in the project.

## Controller-Less Setup

Your avatar doesn't even need to have a FX layer, menu, or params! If these are unset, VRCFury will create them automatically, and manage them fully (meaning it will be deleted and recreated from scratch before each upload). Beware of this! If you want to make your own changes to your controller, menu, or params, then you should create one yourself outside of the vrcf temp directory.
