Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Game Engine

Unity

Tutorial Level

Easy

Properties

Sync Material
Sync Color
Sync String
Sync Boolean

Project Files

https://github.com/Cavrnus-Inc/car-configurator-csc-unity

In this tutorial, we will take a closer look at the No-Code Collaboration Sync Material /wiki/spaces/CSM/pages/881426433 component.image-20240405-041104.pngImage Removed

Starting Project

This scene presents a car model with several interactive features. In this tutorial we will be focusing on swapping the base color texture to change the car’s paint body color.

  • A sports car with 5 available color schemes.

  • A HUD with 5 buttons corresponding to the 5 color schemes.

  • No special game logic other than modifying the paint material based on which button is selected.

...

primaryTabtrue
colorPalettesDefault
an.spaceKeyCSM
tabsPageTitleUnity
color#00875A
fixedfalse
idg6wcjgbgpu6
backgroundColorPaletteDefault
headerStyleFilled

...

tabsPageTitleUnreal
colorPalettesDefault
an.spaceKeyCSM
color#0052CC
idikr0f7bi4g
backgroundColorPaletteDefault

Installing the Cavrnus Plugin (Unreal Engine)

The Cavrnus Spatial Connector plugin for Unreal has already been installed in this project. For guidance on how to add the CSC-Unreal plugin for your new projects, or to upgrade your plugin to a newer version, see the documentation under “Cavrnus for Administrators”.

Tip

This project comes pre-installed with the Cavrnus Spatial Connector plugin enabled. The next steps will connect a specific map in the project to a Cavrnus server.

Testing the Demo

To get an idea of what this demonstration will do, load the preconfigured map called “Cavrnized_CarConfigurator”.

  1. In the Content Browser, under Content/Maps, double-click the “Cavrnized_CarConfigurator” level.

  2. In the outliner, scroll down to the “Cavrnus” folder and click the CavrnusSpatialConnector actor.

  3. In the Details panel, configure the settings for the CavrnusSpatialConnector on the Details panel:

    1. Domain Name: cav.dev.cavrn.us

    2. Auth Method: Guest Join Auto

    3. Guest Join Username: <Enter any name here>

    4. Space Join Method: Automatic

    5. Automatic Space Join ID: Reference a valid 24-character Space ID from the Web Console. (NOTE: Refer to the documentation on how to create a new Space and retrieve the Space ID).

...

Click the Play-In-Editor (PIE) button to run the level. (or press Alt-P)

...

Once the Space is connected, you can click any color button to change the color of the car.

...

Click the “Stop Simulation” button to stop PIE. (or press the Escape key).

Click the PIE button again to start the simulation.

...

Note that when the Space loads, the car will return to the last color you selected the last time you were loaded into the Space.

Tip

The Cavrnus Spatial Connector not only allows you to collaboratively edit scene with remote coworkers, but your changes will persist even after all users have left the Space.

In the next steps, we will connect a new map to a Cavrnus server.

Initial Cavrnus Setup

  1. In the Content Browser, under the “Maps” folder, open the CarConfigurateScene level.

  2. Add the CavrnusSpatialConnector instance to the level from the Cavrnus menu on the Unreal Editor Menu bar.

    1. Note that you only need one instance of CavrnusSpatialConnector for a given level.

image-20240405-040948.pngImage Removed

Setting up Cavrnus in Unity

As described in the Setup Your Scene guide,

...

  1. Domain Name: cav.dev.cavrn.us

  2. Auth Method: Guest Join Auto

  3. Guest Join Username: <Enter any name here>

  4. Space Join Method: Automatic

  5. Automatic Space Join ID: Reference a valid 24-character Space ID from the Web Console. (NOTE: Refer to the documentation on how to create a new Space and retrieve the Space ID).

...

Tip

At this point, the level is now connected to a server and will directly enter a Space with copresence. The next step adds synchronization of level assets.

Verify Heads Up Display (HUD) Class

  1. This project uses a custom game mode BP_CarConfigGM.

    1. From the World Settings panel, expand the Game Mode rollout.

    2. In the “GameMode Override” field, note the entry says “BP_CarConfigGM”.

  2. This project also uses a custom HUD Class “BP_HUD_CarConfig” that references a custom Widget Blueprint : WB_CarConfig.

Setup the Synchronization workflow

The synchronization of the car color takes place in 3 steps.

Step 1: Update the Journal with a string value that describes the car color selected.

Step 2: Use the Cavrnus SyncMaterial component to update the car material with a texture corresponding to the color in the Journal.

Step 3: Create a texture map that will serve as a reference between the name (string) value of the color in Step 1 with the texture reference in Step 2.

  1. In the Content Browser, under Content/Widgets, open the Widget Blueprint “WB_CarConfig”.

  2. Click the “Graph” button on the top right of the Widget Blueprint Editor.

    1. Note that Event stubs have already been placed for this Blueprint.

Info

Before we can post string properties to a space, we first have to confirm that the space has been connected.

  1. From the Execution Pin of the Event Construct node, attach the function Await Any Space Connection.

    1. This dispatcher is part of the Cavrnus Function Library

  2. Bind a custom Event to the “On Connected” pin of the Await Any Space Connection node.

    1. Give this a logical name, such as “SetCurrentSpaceConnection”.

  3. Right-click the “Space Connection” pin in SetCurrentSpaceConnection and select “Promote to Variable”.

    1. Give the variable a logical name, such as “SpaceConnection”.

  4. From the list of Variables under “My Blueprint”, drag the “Connected?” boolean variable and drop it on the execution pin of the Set Space Connection node.

    1. This will add a Set node for that variable.

    2. Check the box in the Set Connected? node to set it to true.

Tip

Now that the connection to a Space is confirmed, let’s set the behavior for the HUD buttons.

  1. For each On Clicked event for the 5 button colors, connect a Post String Property Update node to the “True” pin of the branch node.

    1. Space Connection: Drag the “SpaceConnection” variable onto this pin to connect it as a get node.

    2. Container Name: Car

    3. Property Name: CarColor

    4. Property Value: Reference the “Property Value” in the table below

...

Button Color

...

Property Value

...

Texture File Name

...

White

...

car-color-white

...

car-color-white.png

...

Black

...

car-color-black

...

car-color-black.png

...

Red

...

car-color-red

...

car-color-red.png

...

Blue

...

car-color-blue

...

car-color-blue.png

...

Yellow

...

car-color-yellow

...

car-color-yellow.png

  1. Sync Transform

    1. Set the Property field to “Transform”. Note that this property is case-sensitive.

  2. CavrnusPropertiesContainer

    1. Set the Container Name field to “Pieces/Dark_Pieces/<asset_name>”, where “asset_name” refers to the name of the object as it appears in the Outliner.

...

image-20240301-235809.pngImage Removed

Tip

And that’s it! The project is now fully connected to the Cavrnus server, with copresence and shared properties that will be synchronized with other users accessing the same Space.

Info

It’s worth noting that if you have matching projects in Unity and Unreal where the objects/assets in the corresponding Heirarchy/Outliner match each other in name (case-sensitive), then running the applications in the same Space will synchronize with copresense!

OK, Let’s Add a Custom Avatar for Fun

Alright, the Cavrnus Spatial Connector comes with a default Avatar, but if you wanna be a bit fun you can Add a Custom Avatar. In this case we’ve already found a fun 3rd party Floating Orb Avatar. Like in the Developer Guide, we’ll start by just giving it a Sync Transform component, like we did the Chess Pieces.

...

Then, in the Cavrnus Spatial Connector, we will set the Remote User Avatar to be this.

...

And now we’re actually done!

Final Product

With the Sync Transform components added, the Avatars and Chess Pieces will move in a synchronized way for both users. This, combined with Voice and Video, will let you play a chess game with whomever else launches this scene!

...

we will setup our Scene for Cavrnus using the dropdown button.

...

Then, as described in that same page, we will set the Cavrnus Spatial Connector to use our server, Login to our account automatically, and Automatically Join a “Chess” space we created in the web.

...