Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/poi-vrc/avatarlib
Contains a bunch of quick-to-use APIs for plugins and applications to add, modify a VRChat avatar.
https://github.com/poi-vrc/avatarlib
api avatar dev vrchat vrcsdk
Last synced: 2 days ago
JSON representation
Contains a bunch of quick-to-use APIs for plugins and applications to add, modify a VRChat avatar.
- Host: GitHub
- URL: https://github.com/poi-vrc/avatarlib
- Owner: poi-vrc
- License: mit
- Created: 2022-04-30T11:00:54.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-12-14T07:53:28.000Z (11 months ago)
- Last Synced: 2024-10-11T10:31:37.910Z (25 days ago)
- Topics: api, avatar, dev, vrchat, vrcsdk
- Language: C#
- Homepage:
- Size: 735 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# AvatarLib
Contains a bunch of quick-to-use APIs for plugins and applications to add, modify a VRChat avatar. This is created because one or more tools of mine share the same code.
## API Documentation
Documentation is available at https://poi-vrc.github.io/AvatarLib
## How to install
AvatarLib uses the Unity Package Manager (UPM) for version control. You can install the library by:
1. Start the Package Manager from `Window -> Package Manager`
2. Press the `+` icon and `Add package from git URL...`
3. Enter the URL: `https://github.com/poi-vrc/AvatarLib.git?path=Packages/com.chocopoi.vrc.avatarlib`
- This URL tracks the latest `master` branch version
- To change to a specific version, you can append `#1.x.x` at the end
- e.g. `https://github.com/poi-vrc/AvatarLib.git?path=Packages/com.chocopoi.vrc.avatarlib#1.0.0`
- For details, check https://docs.unity3d.com/Manual/upm-git.html## How to update
1. Start the Package Manager from `Window -> Package Manager`
2. Next to the `+` icon, change to `In Project`
3. Find `AvatarLib` and press the `Update to x.x.x` button if available.
## Why this library?
It is created to simply allow me to re-use some codes in multiple tools. But it is a really good library with handy library functions:
1. Easier `VRCExpressionsMenu` generation
With plain VRCSDK code, you will need to:
```csharp
...
VRCExpressionsMenu menu = new VRCExpressionsMenu();
menu.controls.Add(new VRCExpressionsMenu.Control()
{
name = "MyButton",
type = VRCExpressionsMenu.Control.ControlType.Button,
parameter = "this_is_a_parameter_1",
value = 1.0f
});
menu.controls.Add(new VRCExpressionsMenu.Control()
{
name = "MyToggle",
type = VRCExpressionsMenu.Control.ControlType.Toggle,
parameter = "this_is_a_parameter_2",
value = 1.0f
});
VRCExpressionsMenu subMenuHere = new VRCExpressionsMenu();
menu.controls.Add(new VRCExpressionsMenu.Control()
{
name = "MyAnotherSubMenu",
type = VRCExpressionsMenu.Control.ControlType.SubMenu,
subMenu = subMenuHere
});
AssetDatabase.CreateAsset(menu, "Assets/Menu1.asset");
AssetDatabase.CreateAsset(subMenuHere, "Assets/Menu2.asset");
...
```...which is very long. But you can do this easier with AvatarLib:
```csharp
// you can create a ExpressionMenuBuilder or directly create a sub-menu the avatar root menu
VRCExpressionsMenu myMenu = new ExpressionMenuBuilder()
.AddButton("MyButton", "this_is_a_parameter_1", 1.0f)
.CreateAsset("Assets/Menu1.asset")
.GetMenu();// or..
ExpressionMenuUtils.CreateSubMenu(avatar.rootMenu, "MySubMenu")
.AddButton("MyButton", "this_is_a_parameter_1", 1.0f)
.AddToggle("MyToggle", "this_is_a_parameter_2", 1.0f)
.BeginNewSubMenu("MyAnotherSubMenu")
.AddButton("SubMenuButtonHere", "this_is_a_parameter_3", 1.0f)
.CreateAsset("Assets/Menu2.asset")
.EndNewSubMenu()
.CreateAsset("Assets/Menu1.asset");
```2. Clean up your existing expression menus and animator stuff easier using Regex
```csharp
// removes controls with name starting with "MyMenu "
ExpressionMenuUtils.RemoveExpressionMenuControls(menu, "^MyMenu ");// removes parameters with name starting with "MyParameter_"
ExpressionMenuUtils.RemoveExpressionParameters(parameters, "^MyParameter_");// removes layers with name starting with "MyLayer_"
AnimationUtils.RemoveAnimatorLayers(controller, "^MyLayer_");// removes parameters with name starting with "MyParameter_"
AnimationUtils.RemoveAnimatorParameters(controller, "^MyParameter_");
```3. Quick create animator layers with one-line of code
```csharp
// Creates a AnyState--{condition}-->State layer!
//
// [Entry] --------------------|
// v
// [AnyState] --{if 0}-> [ myDefaultMotion ]
// |
// -------{if 1}-> [ motion1 ]
// |
// -------{if 2}-> [ motion2 ]
// |
// -------{if 3}-> [ motion3 ]Dictionary pairs = new Dictionary();
pairs.Add(0, myDefaultMotion);
pairs.Add(1, motion1);
pairs.Add(2, motion2);
pairs.Add(3, motion3);AnimationUtils.GenerateAnyStateLayer(controller, "MyLayer", "MyParameter_Integer", pairs, true);
```4. Create World Constraint with code
```csharp
Transform root = avatar.transform;WorldConstraint wc = WorldConstraintUtils.CreateWorldConstraint(myGameObjectToBeInWorldSpace, root);
// animation clips generation
AnimationClip lockClip = WorldConstraintUtils.GenerateLockAnimation(wc);
AnimationClip unlockClip = WorldConstraintUtils.GenerateUnlockAnimation(wc);
AnimationClip showClip = WorldConstraintUtils.GenerateShowAnimation(wc);
AnimationClip hideClip = WorldConstraintUtils.GenerateHideAnimation(wc);
```## Contributing
Please use `dotnet-format` to format your code before committing. The `master` branch is the branch holding the latest stable version. Only submit code to `develop` branch. And it will be merged to `master` soon if it is time.
To install `dotnet-format`, you can use: `dotnet tool install -g dotnet-format`
To format code, do `dotnet-format ".\" --folder` in the repository root.
## License
This project is licensed under the MIT License. [tl;dr](https://www.tldrlegal.com/license/mit-license)