This document contains information currently under development;
therefore, names of GameObjects and other details may differ from the final version.
This draw system enables drawing and sheathing via contact detection + hand signals (gestures),
as well as drawing and sheathing via the Expression menu.
Drawing and sheathing via the Expression menu uses the included motion.
Drawing and sheathing via contact detection is intended for users employing tracking.
With contact detection + hand signals, the scabbard can be equipped at any preferred position,
such as the waist or back, and can also be grasped in the left hand.
This draw system requires Modular Avatar to be installed.
As Modular Avatar itself is not included in this package, please install it beforehand from the URL below.
Place the BladeSystemRoot prefab directly under the AvatarRoot. Apart from aligning the blade and sheath, that completes the setup.
For some avatars, pre-positioned prefabs are included, like BladeSystemRoot_Shinano, so please use these as well.
Upon entering play mode and clicking Draw Sword/Sheathe Sword from the Expression menu using GestureManager or similar,
the draw motion will play, placing the weapon in the drawn state.
Clicking again will play the sheathe motion, returning the weapon to the sheathed state.
In GestureManager, the buttons may be unresponsive unless pressed for a slightly longer duration.
In the actual VRChat environment, such issues do not occur.
Do not change the name of the BladeSystemRoot prefab.
If you must change it, also edit the MA BoneProxy for the blade and sheath to match the prefix of the SubPath with the prefab root name.
抜刀/納刀 (Draw/Sheath)
Performs drawing and sheathing using the animation included with the product.
エフェクトON (Effects ON)
Toggles the presence of effects.
自動で鞘を隠す (Automatically Hide Sheath)
Automatically hides the sheath after drawing.
Only functions when drawing from the menu.
鞘の非表示 (Hide Sheath)
Hides the sheath.
Only functions when the sword is drawn.
When the sheath is hidden, sheathing via contact is not possible.
Sheathing via the menu will force the sheath to reappear.
表示/非表示 (Show/Hide)
Toggles the display of the sword and sheath.
The grip position of the sword when drawn is set via the GameObject BladeSystemRoot > Locators > BladeHandR.
Moving BladeHandR in Edit Mode will cause the sword model to follow its movement.
Adjust its position to align with the avatar's right hand.
Adjust the position of the scabbard to match the draw/sheath motions from the Expression menu.
This position adjustment is unnecessary if you do not use the draw/sheath function from the menu.
Enter Play mode and use GestureManager or similar to set the zkBladeUnsheath integer parameter to 1.
The sword should move to your right hand.
Next, select Sheath_AnimHome located under the left hand bone (Hand.L) of your avatar
and enable the VRC Parent Constraint component within it. This should cause the scabbard to move towards the sword.
Return to GestureManager and change the parameter named zkBladeAction to 99.
This causes the avatar to pause at the point where it grasps the hilt of the sword during the draw motion.
If the scabbard appears to have shifted from your left hand,
please return to adjusting the grip position of the sword and reposition the sword itself so that the scabbard fits correctly in your left hand.
If you are willing to allow the blade to shift slightly from the scabbard the instant it is drawn,
precise alignment between the scabbard and the left hand at this stage is not essential.
Please adjust Sheath_AnimHome to fit the left hand after setting the restraint position in the subsequent procedure.
Once the scabbard fits comfortably in your left hand, follow the steps below to set the scabbard's retention position.
Remaining in Play mode
Move BladeSystemRoot > Proxies > BladeProxyRoot > BladeProxy > SheathPositionGuide
to the hierarchy directly beneath the left hand bone of the avatar.(fig.1)
Copy the Transform component of the SheathPositionGuide that has been moved.
Exit Play mode. All subsequent operations will be performed in edit mode.
Create an empty GameObject directly beneath the left-hand bone of the avatar,
and paste the Transform values copied in step 2.(fig.2)
Move the empty GameObject added in step 4 to the scene root hierarchy (fig. 3),
then copy the Transform values.
Paste the value copied in step 5 into
BladeSystemRoot > Locators > Sheath_AnimHome's Transform.
Delete the added empty GameObject.
This completes the adjustment of the scabbard position for the draw/sheath motions.
Enter play mode and perform the draw/sheath actions via the Expression menu
to verify that the animation and position align correctly.
The Sheath_AnimHome set in this procedure should align precisely with the animation.
You can further adjust the position of Sheath_AnimHome to fine-tune the grip position of the sheath,
but doing so will cause the blade to shift slightly from the sheath at the moment of draw.
fig.1
fig.2
fig.3
If contact detection and hand signals for drawing/sheathing the sword are not used, this adjustment is unnecessary.
When drawing or sheathing the sword by moving the right arm during tracking, the sheath can be equipped at any position. To adjust this position, first change the Weight of Element0 to 1 and the Weight of all other elements to 0 in the VRC ParentConstraint of SheathProxyRoot.
Next, change the target of the MA Bone Proxy in Sheath_UserHome to the appropriate bone corresponding to the sheath's equipment position. For sheathing at the waist, Hips would be appropriate; for carrying on the back, Spine would be suitable.
After that, move the Sheath_UserHome in the SceneView and position the sheath where you wish.
If you do not use the contact detection + hand sign function to grasp the scabbard, this adjustment is unnecessary.
You can grasp the scabbard at its home position with your left hand to hold it in your hand.
This describes how to adjust the grip position of the scabbard at this point.
This is set independently of the sheath's grip position during animation-based sheathing/unsheathing.
Prior to making adjustments, first change the Weight of Element1 to 1
and the weight of all other elements to 0 in the VRC ParentConstraint of SheasProxyRoot.
Next, move Sheath_HandL in the SceneView to position the sheath where you wish.
Touching the sword hilt with your right hand and changing the hand sign
from anything other than Fist to Fist will place the sword in the drawn state.
Even if you make it a fist first before making contact, it will not count as drawing your sword.
Please switch from anything other than Fist to Fist while maintaining contact.
The contact detection for sword drawing is performed via
BladeProxyRoot > ContactGrabR and Blade_HandR > Sender.
To adjust the detection size, please edit these components.
When the base of the blade and the entrance of the scabbard are in contact,
changing the hand sign from anything other than Neutral or Open to Neutral or Open will cause the blade to be sheathed.
The contact detection for sheathing is handled via
BladeProxyRoot > ContactBladeToSheath and
SheathProxyRoot > ContactSheathFromBlade.
To adjust the detection size, please edit these.
By touching your left hand to the scabbard and changing the hand sign
from anything other than Fist to Fist, you can hold the scabbard in your left hand.
This contact detection is performed at SheathProxyRoot > ContactSheathGrabL
and Sheath_HandL > Sender. To adjust the size of the detection, please edit these.
Bring the sheath held in your left hand near the user-set sheath equipment position,
then change your gesture from anything other than Neutral or Open to Neutral or Open.
This will return the sheath from your left hand to the equipment position.
This contact detection is performed via SheathProxyRoot > SenderToHome and
Sheath_UserHome > ContactSheathToHome.
To adjust the detection threshold, edit these values.
The default initial state is as follows:
Sword Display
Sheathed State
The sheath is positioned for draw/sheath animations.
To change this setting, for example, to have the sword drawn by default, configure it in the MA Parameters under BladeSystemRoot.
zkBladeEnable
Show/Hide Sword.
ON : Show (default)
OFF : Hide
zkSheathLocator
Sheath position.
0: User-defined equipment slot
1: Left-hand grip state
2: Position for draw/sheath animations (default)
For some products, 0 may be the default value.
zkBladeUnsheath
Unsheathed/Sheathed state.
0 : Sheathed (Default)
1 : Unsheathed
In this draw system, the MA MergeAnimator in BladeSystemRoot integrates
the BladeSystemAnimatorAction.controller into the avatar's PlayableLayer Action.
Controls are included to prevent transitions to draw/sheath during AFK or sit states,
but if more complete exclusive control is required,
the user must modify the system themselves by incorporating the draw system's Action layer into the avatar's main Action layer.