Adding a High Five to your VRChat avatar using the VRChat Contacts system.
This video will demonstrate the basics of VRChat's Contacts system by walking you through the process of adding a "high five" feature to your avatar.
We'll start by adding a Contact Receiver.
>Right click your avatar in the Hierarchy.
>Create Empty.
>Name this object "High Five".
>Click the High Five object to bring it up in the Inspector.
>Click "Add Component".
>Search for "Contact Receiver" and add it.
VRChat's Contacts system uses two components: the Sender and the Receiver.
The Receiver is the component that will interact with your code and animations, triggering changes to various Parameters when they're activated through contact with a Sender component that has at least one matching tag assigned to it.
The Sender is used only to activate the Receivers. They can be given custom tags, which are referenced when the Sender and Receiver touch in order to decide whether or not to trigger the Parameter attached to the Receiver.
Hopefully, that brief explanation wasn't too convoluted and confusing; seeing it in action should help to clear it up, so let's continue.
>Click "Add" under the "Collision Tags" section.
>Click the drop-down menu that says "Custom", and change it to "Hand".
This will make it activate any time a Sender with the Hand tag touches it. However, since it will be attached to our own hand, this current setup will make it trigger immediately and perpetually, so we need to prevent that.
>Uncheck the box that says "Allow Self".
Now, we make it trigger a Parameter.
>In the Parameters field, type in "High Five".
We want the high five to only activate when you really slap another person's hand, not just softly touch it.
>For Contact Type, click the drop-down and select "On Enter".
>In the Velocity field, change the number to 0.5.
I haven't done enough experimentation to tell you what *exactly* this number means in terms of calculation, but this value seems to work for me.
Lastly, we need to attach it to the avatar's hand.
>Click "Add Component".
>Search for "Parent Constraint" and add it.
>Click the + button underneath the "Sources" box.
>Expand your avatar's armature in the Hierarchy until you find whichever bone corresponds to your hand. In my case, it's actually the Wrist; generally speaking, it will be the Parent bone to your fingers.
>Click the High Five object.
>Click and drag the Hand bone into the "Source" field in the Parent Constraint.
>Click the "Zero" button.
>If necessary, adjust the Radius and Position until the sphere in the viewport comfortably fits in your avatar's hand.
As an extra note, you can actually place the bone in the Contact Receiver component's "Root Transform" field, and the receiver will follow that bone as though it were attached to the bone. However, we're using the Parent Constraint method so that we can attach the audio to this same object.
We need a slapping sound that will trigger when the high five occurs. I've linked one in the description that you can grab, but you can use whatever sound you like.
( https://freesound.org/people/oldhiccup/sounds/567605/ )
Once you've gotten a file ready, we can bring it into the project.
>At the top left of the Unity window, click "Assets".
>Select "Import New Asset".
>Locate the audio file you want to use and click "Import".
>Click High Five in the Hierarchy.
>Click "Add Component".
>Search for "Audio Source" and add it.
>Click the circle to the right of the "AudioClip" field.
>Search for the file you just imported, and add it.
The default Audio Source settings will emit this sound to the entire world. While that is indicative of a truly epic high five, it's likely to be disruptive, and the lack of a reverberating echo effect would fail to truly convey its world-quaking intensity. That was a joke. I apologize.
>Set the "Spatial Blend" slider all the way to 3D on the right side.
>Expand the 3D Sound Settings.
>Click the drop-down menu and change it from "Logarithmic Falloff" to "Linear Falloff". I don't know why, but Logarithmic Falloff makes the audio *extremely* quiet.
>Set the maximum distance to 2.
>Lastly, disable the Audio Source component so that it doesn't play as soon as the avatar loads. We'll turn it on via the animation that we're about to make.
That's all of the object work done. Now we can get started on the animation; we only need one, and there's very little involved with it.
>Right click in Unity's file explorer.
>Create, Animation.
>Name this animation "high five".
>Click and drag "high five" onto your avatar in the Hierarchy.
>Double click "high five" to bring up the Animation window.
>>If you haven't already, I recommend dragging the Animation tab into the spot beside the Project and Console tabs to make it easier to access.
>Click your avatar in the Hierarchy to make it the focus of the Animation window.
>Select "high five" from the drop-down menu at the top-left of the Animation window.
>Click the Record button.
>Click the "High Five" object in the Hierarchy.
>Scroll down in the Inspector, and activate the Audio Source component.
>In the Animation window, set the active Frame to 60 using the number field to the right of the Play and Record buttons.
>Click the checkbox here to have the animation turn off the Audio Source at frame 60. This is the one-second mark, which gives the sound effect enough time to play fully before being shut off.
>Click the Preview button to stop recording and stop previewing.
Final stretch, just need to set up the Animator and we'll be ready to go.
>Click your avatar in the Hierarchy.
>Scroll down in the Inspector until you find the "Playable Layers" section of your VRC Avatar Descriptor component.
>Double-click the field to the right of "FX" to bring up your avatar's Expressions Animator.
>Click the Parameters top near the top-left.
>Click the + button, and add a Bool parameter.
>Name this new parameter "High Five", or whatever name you set in the Parameter field of your Contact Receiver earlier.
>Also add "GestureRight" as an Int parameter if it's not already in the list. You can use GestureLeft instead if you'd prefer to high five with your left hand.
>Click the Layers tab.
>Click the + button to add a new layer.
>Name this layer "High Five".
>Click the gear icon on this layer, and set its Weight to 1.
>Right click in the grid to the right.
>Create State, Empty.
>Click this new State, and use the Inspector to name it "Off".
>Create another new State.
>Name this one "On".
>Right click the "Off" state, Make Transition, to On.
>Expand the Settings in the Inspector.
>Deselect "Has Exit Time".
>Set "Transition Duration" to 0.
>Click the + button under "Conditions" two times, as we'll want two different parameters to be true for the sound effect to activate.
>Set the first Condition's drop-down menu to "High Five", and set the drop-down beside it to "True".
>Set the second Condition to "GestureRight", "Equals", "2". The number 2 corresponds to the open hand gesture. By adding this, you ensure that the sound only activates if your hand is open for the high five.
>Create another Transition from On to Off.
>Set the Exit Time to 1, and the Transition Duration to 0. This allows the animation to play all the way through before it Transitions back to the Off state.
>Lastly, select the "On" state, click the dot to the right of the "Motion" field, search for the "high five" animation, and add it.
Unlike most features, parameters activated via Contacts don't need to be included in your avatar's synchronized parameter list. By that same token, you don't need to do anything with your Expression Menu, either. Which means, we're done! You can use Build & Test and get someone else's help to test if it's been set up properly, but bear in mind that the other person won't hear the high five until you've actually uploaded the avatar.
For a little bit of added fun, you could add "Head" to the Receiver's list of Collision Tags in order to deliver some face slaps, as well.
We didn't use any Contact Senders in this project, but I assure you that they're very easy to work with. They're laid out almost identically to the Contact Receiver, with the exception of the Receiver's Parameter control. You can add whatever Collision Tag you wish to the Contact Sender, and use it to activate any Contact Receiver with the same tag, even if that Contact Receiver is on someone else's avatar. Use this for custom interactions with a friend's avatar, like a pair of Contacts using the "Sword" tag to take off a limb! Or something less violent if you're so inclined.
Enjoy high-fiving your friends! If you want to make your high fives more interesting with explosions or other particle effects, or want some other feature added, I do both commissions and tutoring. You can reach me via my Discord channel, which I've linked in this video's description ( https://discord.gg/aFpkcXxra7 ), or contact me at ToolboxMotley#0372.
49
views
How to add invisibility to your VRChat avatar.
The mentioned Poiyomi Toon shader is located at https://github.com/poiyomi/PoiyomiToonShader/releases .
Two things I missed in the video: First is a fix for staying invisible to other players, and second is how to make the Poiyomi decloak look better.
If you're experiencing issues where you're still invisible to other people after you turn it off, then add a Cube to your avatar, remove its Box Collider component, and set its scale to 0 on all three axes. What I'm assuming happens is that, if there aren't any parts of the avatar being rendered at all, the game effectively deletes the avatar altogether, preventing the animation that disables invisibility.
As for making the Poiyomi method look better when decloaking... In the flowchart section, set the Off state to use the same animation for turning invisible, and set the Speed to -1. This will play the animation backwards, thus having you gradually decloak instead of just immediately reappearing. It will also make it so that you spawn into the world via decloaking instead of just popping into existence.
1
view
How to add a basic toggle to your VRChat avatar.
One of the most basic building blocks of avatar creation: the humble toggle!
Here is the Discord channel mentioned at the end of the video: https://discord.gg/G9JH27NsUv
Go here to contact me for commissions or tutoring, or to ask for help with simpler avatar problems and ventures!
5
views
How to add Flight to your VRChat avatar.
Toolbox's Workshop Discord channel: https://discord.gg/aFpkcXxra7
I take commissions and provide tutoring! Post what you're after in the relevant subchannels of the Discord channel linked above to get an estimate.
Script:
This video will demonstrate how to add flight to your VRChat avatar. Unfortunately, due to flight's dependence on the Box Collider component, this will not work for Quest avatars.
My own avatar uses multiple flight modes, but for this tutorial, I will be focusing on what I call "Look Mode", which allows you to fly in the direction you're looking.
We'll start by setting up the flight platform.
>Right-click your avatar in the Hierarchy.
>3D Object.
>Cube.
This essentially creates a floor for you to walk on, which will follow you wherever you go, allowing you to walk on air.
>Click the Cube.
>Rename it "Flight Platform", or whatever else you'd like to name it. This step is only for making it more organized.
>In the "Transform" component, set its Scale to 2 on the X axis, 0.1 on the Y axis, and 3 on the Z axis.
That takes care of the functional aspect of the flight platform. We also need to tackle the visuals.
>In the Inspector, locate the Mesh Renderer.
>Click the three dots at the top right of the component.
>Remove Component.
>Locate the Cube (Mesh Filter) component. Remove that as well.
By removing this component, you ensure that the Flight Platform is never drawn on screen, making it invisible.
>In the Inspector, click Add Component.
>Search for and click "Rotation Constraint".
>Under Sources, click the plus button to add a source.
>In the Hierarchy, expand your avatar's Armature until you reach the Head bone.
>>This will typically follow the order of Armature - Hips - Spine - Chest - Neck - Head, but your avatar may use different names or even use a different armature structure altogether.
>Once the Head is visible in the Hierarchy, click the Flight Platform again.
>Drag the Head from the Armature in the Hierarchy, into the Rotation Constraint's Source field in the Inspector.
>Click the "Activate" button.
This locks the Flight Platform into pointing the same direction as the head, allowing you to control its tilt based on where your head is pointing.
However, leaving the Rotation Constraint as-is will result in wild spinning when tilting your head side-to-side. Let's fix that.
>Expand the Constraint Settings.
>Next to "Freeze Rotation", deselect the Y and Z axes.
This ensures that tilting your head side to side will not affect your flight.
>Lastly, turn off the Flight Platform object, so that it isn't on by default.
That's all you need for object setup. Now, we have to put together the animation.
>Click the "Project" tab.
>Navigate to whatever folder houses your animations. This is purely for organization purposes; if you don't mind the clutter, this could be placed in the main Assets folder if you want.
>Right-click in Unity's file explorer.
>Create.
>Animation.
>Name this animation "Flight".
>Drag the Flight animation onto your avatar in the Hierarchy.
>Double-click the Flight animation to bring up the Animation window.
>>If you haven't already, I recommend dragging the Animation tab down next to the Project and Console tabs for ease of access.
>Click your avatar in the Hierarchy to make it the focus of your Animation window.
>Make sure the Flight animation is selected in the Animation drop-down list.
>Click the Record button at the top left of the Animation window.
>Click the Flight Platform in the Hierarchy.
>Activate the object.
>Click the Preview button to stop recording and stop previewing.
That's all for the animation file. Most of the functionality of flight is contained in the Flight Platform's Box Collider and Rotation Constraint, so all the animation has to do is activate the object.
Now for the coding. We need to locate the avatar's FX Animator. If you don't know where to find that, try this:
>Click your avatar in the Hierarchy.
>Scroll down in the Inspector until you find the Playable Layers section of your VRC Avatar Descriptor.
>Double-click the field next to "FX" to bring its Animator up in the Animator tab.
With the Animator open, we can get started on the coding.
>Click the Parameters tab at the top left.
>Click the plus button to add a new parameter.
>Click "Bool".
>Rename this new Bool Parameter to "Flight".
>Click the Layers tab.
>Click the plus button to add a new layer.
>Name this layer "Flight", or however you want to name it for organization.
>Click the gear icon for this new layer, and set its Weight to 1. Without this step, the game won't even try to use the code in this layer.
>In the grid to the right, right-click, select "Create State", "Empty".
>Click the New State, and use the Inspector on the right to rename it to "Off".
>Create another New State.
>Name this one "On".
>In the "Motion" field, click the circle icon to bring up a list of the animation files in the project.
>Search for "Flight" and add it. If you named your animation differently, search for whatever you named it.
>Right-click the "Off" state, Make Transition, to "On."
>Do the same for "On" to "Off".
>Click the white arrow leading from "Off" to "On".
>Expand the Settings.
>Deselect "Has Exit Time", and set "Transition Duration" to 0. These changes ensure that there is no delay when you activate Flight.
>Under the Conditions box, click the plus button.
>Select "Flight" in the left drop-down menu.
>Make sure that "True" is selected for the right drop-down menu.
>At the top of the Inspector, right-click the Transition that says "Off" to "On", and Copy Transition Parameters. We can paste these settings into the next Transition to save some time.
>Back in the grid, click the arrow leading from "On" to "Off".
>Right-click the Transition in the Inspector, and select "Paste Both".
>In the Conditions box, change "True" to "False".
That's all the Animator stuff done. Now we just need to set up the menu and parameters, and we'll be finished. We'll start with parameters.
>Click your avatar in the Hierarchy.
>Scroll down to the "Expressions" subsection in the Inspector.
>Double-click the field to the right of Parameters.
>Click the "Add" button.
>Change the new Parameter's name to "Flight".
>Set the Type to Bool.
>Click your avatar in the Hierarchy again.
>Scroll down to the "Expressions" subsection of the Inspector.
>Double-click the field to the right of Menu.
>Click "Add Control".
>Expand "New Control" if needed.
>Rename this control to "Flight".
>Set its type to "Toggle" using the drop-down menu.
>Set its Parameter to "Flight" using the drop-down menu.
With that, your flight should be fully functional. Go to the VRChat SDK Control Panel, and hit Build & Test to try it out in-game.
Once you turn on Flight, you'll need to jump to start flying, and move forward to fly where you're looking. Flight essentially involves walking on invisible terrain, so just move around the world as you usually would otherwise. Depending on the world's physics settings, you may be able to jump while looking downwards to catapult yourself forward at high speed, though since this is world-dependent, it's not a guarantee.
38
views
How to add portals to your VRChat avatar.
(Written version of the guide)
To begin, we need a world anchor.
>Right click your avatar.
>Create Empty.
>Rename this object to "World Anchor".
>Click the object to bring it up in the Inspector on the right.
>Click "Add Component".
>Add a Parent Constraint.
>Expand the Parent Constraint.
>Add a new Source.
>Find an object in the File Explorer at the bottom. Any object will work; I usually use the avatar model object.
>Click and drag your object into the Source field on the Parent Constraint.
>Click "Activate".
The World Anchor is used to keep attached objects from moving with your avatar. By setting the Source to an object that isn't actually on the avatar, it becomes anchored to the world origin instead. This will allow us to place our portals in positions relative to that world origin, rather than in relation to our avatar, and keep the portals in those locations indefinitely.
The next step is to create an object to contain the first portal.
>Right click the World Anchor.
>Create Empty.
>Name this "Portal One".
This object will contain both the VRC_Station component that allows teleportation, and whatever object you use to visually indicate the portal's location. But first, we need to set it up so that you can position it in the world.
>Click Portal One to bring it up in the Inspector.
>Add Component.
>Parent Constraint.
>Expand the Parent Constraint.
>Add a new Source.
>Expand your avatar's armature until you find the Left Wrist.
>Click Portal One again.
>Click and drag your avatar's Left Wrist into the Source field. You can use a different bone if you'd prefer.
>Click the "Zero" button.
That's all the preparation needed for moving the portals. Now, onto adding the actual teleporting functionality.
>Right click Portal One.
>Create Empty.
>Name this object "Station".
>Select the Station object.
>In the Inspector, click Add Component.
>Search for "VRC Station".
>Uncheck "Can Use Station from Station", as this can cause issues on VRC Station components as a whole.
>Click Add Component.
>Search for "Sphere Collider".
>Check the box for "Is Trigger".
>Set the Radius to 0.1.
We're not quite done with the Station setup yet, but we'll have to come back to it after we've set up the second portal. For now, let's give it some visuals. You can set it up however you like, but I'll show how I made mine.
>Right click Portal One.
>Create Empty.
>Name this object "Visual".
>Click Visual to bring it up in the Inspector.
>Click Add Component.
>Search for "Particle System".
>Expand the Particle System.
>Set the Start Lifetime to 0.5.
>Set the Start Speed to 0.75.
>Set the Start Size to 0.25.
>Set the Start Color to green, with an Alpha value of 50.
>Set the Max Particles to 10.
>Expand the Emission tab.
>Set the Rate over Time to 20.
>Expand the Shape tab.
>Set the shape to "Circle".
>Set the Radius to 0.
>Set the X Rotation to 90.
>Expand and turn on the Size over Lifetime tab.
>Click the box to the right of "Size".
>If necessary, click "Particle System Curves" at the bottom of the Inspector to expand it.
>Click the preset with the line going high to low.
>Expand the "Renderer" tab.
>Click the circle to the right of the Material field.
>Select "Default Line".
Now that the majority of the first portal is set up, we can create the second one.
>Right click "Portal One" in the Hierarchy.
>Select "Duplicate".
>Name the new object "Portal Two".
>Expand Portal Two.
>Select "Visual".
>Change the Start Color to purple.
And now, to add what makes these portals actually work as portals.
>Click Portal One's Station object.
>Drag Portal Two's Station object into both the Player Enter Location field, and the Player Exit Location field.
>Click Portal Two's Station object.
>Drag Portal One's Station object into both the Player Enter Location field, and the Player Exit Location field.
We have a little more to do in the Hierarchy to prepare for the programming phase. For both portals, deactivate the Visual object, and the Sphere Colliders on both Stations.
Now for the animations. We'll need two to start.
>Click the Project tab to access Unity's file explorer.
>>If you have a specific folder for Animations, open it. Ultimately, though, Animations can be stored anywhere in the project. I just like to keep it organized.
>Right-click in the file explorer.
>Click "Create".
>Click "Animation".
>We'll name this "Portal One".
>Create another new Animation.
>We'll name this "Portal Two".
>Click and drag both Animations onto your avatar in the Hierarchy.
>Click your avatar.
>Click the Animation tab.
>>If you don't have this tab, go to the top bar.
>>Window.
>>Animation.
>>Animation.
>>You can drag the tab in this new window to the area above the file explorer. I highly recommend this for ease of access.
>With the Animation tab opened, click the lock icon at the top right.
>>If you don't see the lock icon, right-click in the top right corner and select Lock.
>>This keeps the Animation tab focused on your avatar in case you click another object with an Animator attached.
>Select "Portal One" from the drop-down menu.
>Click the Record button.
>Click Portal One in the hierarchy.
>Deactivate the Parent Constraint. This makes the portal stop following your hand, and instead stay in its position relative to the World Anchor you made earlier.
>Click Portal One's Station.
>Activate the Sphere Collider. Because the Collider is attached to the same object, the VRC Station won't be clickable unless the Collider is active. This means that, with the Collider's default state of being turned off, the portals can't be clicked until you've intentionally activated them for others to use.
>Click Portal One's Visual.
>Activate the object. This simply allows the particle system to start working, letting people know where the portal is.
>Click the Preview button to stop recording and stop previewing the animation.
The way this is set up, you can place just one portal, and it will bring people straight to you. Now, we need a mirrored version of this Animation for Portal Two.
The way this is set up, you can place just one portal, and it will bring people straight to you. Now, we need a mirrored version of this Animation for Portal Two.
>Go back to the Animation tab.
>Select "Portal Two" from the drop-down menu.
>Click the Record button.
>Click Portal Two in the hierarchy.
>Deactivate the Parent Constraint.
>Click Portal Two's Station.
>Activate the Sphere Collider.
>Click Portal Two's Visual.
>Activate the object.
>Click the Preview button to stop recording and stop previewing the animation.
Technically, these are the only two animations you need. However, I like to make a third animation that kicks people off of the portal once every second so that they don't hog it, whether they're doing so intentionally or not. If you'd like this functionality, follow these next steps. Otherwise, skip ahead.
>Click the Project tab to access Unity's file explorer.
>Go to whatever folder has your animations.
>Right-click in the file exporer.
>Click "Create".
>Click "Animation".
>We'll name this Animation "Portal Antihog".
>Click this new animation to bring it up in the Inspector.
>Click "Loop Time" so that the animation repeats itself when it ends.
>Click and drag this Animation onto your avatar in the Hierarchy.
>Click your avatar in the Hierarchy.
>Click the Animation tab.
>Select "Portal Antihog" from the drop-down menu.
>Click Record.
>Deactivate the Station object on both Portal One and Portal Two.
>Change the Animation's Frame to 1. You can do this by changing the number here and pressing Enter, or by clicking underneath "0:01" in the graph to the right.
>Activate the Station object on both Portal One and Portal Two.
>Change the Animation's Frame to 60.
>Deactivate the Station objects on both Portal One and Portal Two.
>Click the Preview button to stop recording and stop previewing the animation.
This animation keeps the Stations on each portal active for most of its duration, but deactivates the Station every second so that people sitting in it are automatically booted off, allowing another person to come through.
Now, we come to the programming part.
>Click your avatar in the Hierarchy.
>Expand the VRC Avatar Descriptor component in the Inspector, if necessary.
>Scroll down to the Playable Layers section.
>Double-click the box to the right of "FX" to open it in the Animator window.
>Click the Parameters tab at the top left of this window.
>Click the plus button, and add a "Bool". This is a simple on-or-off parameter type.
>Name this new Bool parameter "Portal One".
>Click the plus button again, and add another Bool.
>Name this parameter "Portal Two".
These two bool parameters are used to set the two portals on or off. If you set up the anti-hogging animation earlier, don't worry; you still only need these two parameters. Let's continue.
>Click the Layers tab at the top left.
>Click the plus button to create a new animation layer.
>Name this layer "Portal One".
>Click the gear to the right of the layer's name.
>Set the Weight to 1. Without this step, the game won't even try to read the animations inside. This is a common oversight when building avatar functionality, so if you have problems, double-check the Weight.
>Click the Portal One animation layer.
>In the grid to the right, right-click, Create State, Empty.
>Name this new state "Off".
>Create another empty state, and name it "On".
>In the "On" state, click the circle to the right of the box that says "None (Motion)".
>Find your "Portal One" animation from earlier, and double-click it to assign it to this animator state.
>Right-click the "On" state, click "Make Transition", and left-click the "Off" state.
>Do the same in reverse, creating a Transition from "Off" to "On".
>Left-click the Transition that points towards "On".
>In the Inspector, click the plus button underneath the Conditions box.
>Set the Condition to "Portal One" is "True".
>In the grid, left-click the Transition that points towards "Off".
>Add a new Condition.
>"Portal One" equals "False".
That's the first portal done. The second one is set up almost identically.
>Add a new layer.
>Name it "Portal Two".
>Set its Weight to 1.
>Create new empty state.
>Name it "Off".
>Create another state.
>Name it "On".
>Add the "Portal Two" animation to the "On" state.
>Make a Transition from On to Off.
>Make a Transition from Off to On.
>Set the Off-to-On Transition to have the Condition "Portal Two" equals "True".
>Set the On-to-Off Transition to have the Condition "Portal Two" equals "False".
One more layer to make, and that's only if you set up the anti-hogging animation earlier. If you skipped that step, skip this one as well.
>Add a new layer.
>Name it "Portal Antihog".
>Set its Weight to 1.
>Create new empty state.
>Name it "On". We only need the one state for this layer, as there's no real harm in having the animation play at all times.
>Add the "Portal Antihog" animation to the "On" state.
That's all you need for the Antihog to function.
Last part, now: setting up the menus.
>Click your avatar in the Hierarchy.
>Expand the VRC Avatar Descriptor if necessary.
>Scroll down to the Expressions section.
>Double-click the field to the right of the word "Parameters" to bring up your avatar's Parameters list in the Inspector.
>At the top of the Inspector, click "Add" two times.
>Change the last two entries in the Parameters list to "Portal One" and "Portal Two". These need to have the exact same name as the Parameters you made in the avatar's FX Animator earlier, or else they won't pair up with each other properly, and your menu won't have any effect on the portals.
>If the drop-down menus on these last two Parameters do not say "Bool", change them to Bool.
>Click your avatar in the Hierarchy again.
>Scroll down to the Expressions section.
>Double-click the field to the right of the word "Menu" to bring up your avatar's main menu in the Inspector.
>Click "Add Control" at the bottom of the Inspector. Expand the new Control if necessary.
>Rename this New Control to "Portal One".
>To the right of the word "Type", click the drop-down menu and select "Toggle".
>To the right of the word "Parameter", click the drop-down menu and select "Portal One".
>Click "Add Control" again.
>Rename this New Control to "Portal Two".
>Set the Type to "Toggle".
>Set the Parameter to "Portal Two".
That's the final step. Bring up the VRChat SDK, and click the "Build & Publish for Windows" button. Unfortunately, you can't really test the full functionality with just the Build & Test button, as other players need to be able to see the portals in order to use them. If everything's set up correctly, you should have working portals for transporting other players around the map.
Be aware that people who join the map after you've placed your portals will be unable to teleport to the areas you've set. This is because an avatar's animations are handled by each computer individually, so when someone new joins in, it immediately places the portals at the World Anchor instead of wherever you tried to put them, as their computer has no way of knowing where your hands were before their arrival.
I hope you benefitted from this tutorial! I've recently set up a Discord channel for help and suggestions, as well as updates on new features and tutorials I'm working on, which I will link to in the description. ( https://discord.gg/aFpkcXxra7 ) If you'd like to learn how to build some more obscure or personalized features, I offer tutoring, and if you don't have the time or inclination to learn all this stuff, I take commissions to add features onto your avatar myself. Joining my Discord is the simplest way to make these requests, or you can add me directly at Toolbox Motley#0372.
448
views