Known Issues & FAQ

We've worked hard to deliver a great LearnBrite Scenario experience, but we're still tracking some known issues. If you find others, please Give us feedback.

Versions

Which version of Scenario should I use?

Creating spaces & using templates

How do I copy a space?

Blank Template has Invisible Floor

Building from a Blank Template

Editing

Advanced Transform Controls

Navigation

Spawn (starting) hotspot

Bringing Multiple Spaces together in a World

Switching Spaces in a Campus (World)

Optimization

My space loads slowly!

Space Settings

How do I change the settings of a space?

Virtual Meeting checkbox – collaborate in a space together

UI

What is the “goggles” icon supposed to do (on different devices)

Text-to-speech

The Chinese Female voice stops before finishing the sentence

Gamification

How can I track a score in ChatMapper?

How can I track a score within a space?

How can I add achievements?

Actions

Make 3D items clickable and trigger actions (2.6+)

Make parts of a scene clickable (2.6+)

Stop Camera Position Changes after onclick action (2.9+)

How can I hide/show items?

Mediaboards

Which YouTube URL should I use?

Notes

How to change the visual look of Notes

How to use UI icons in Notes and Dialogue

Adding Images to Notes

Multiuser / Conferencing

Maximum number of users in a meeting space

What is the Maximum number of users in a space?

iOS 12 Chrome does not support Audio and Video conferencing

ChatMapper

Treating Variables in ChatMapper as Text or Number

Troubleshooting ChatMapper Template Exports

Why do some actions (e.g. displayImage) skip the node afterwards?

Known Issues

Versions

Which version of Scenario should I use?

Any space you create will use the version currently set as default (2.10 at the time of writing, Oct. 2019). We try to make it as straightforward as possible to upgrade to the latest version, so if one of your spaces/worlds falls behind, you can upgrade it by doing the following:

  1. Go to the edit page of the property you want to upgrade
  2. Click on “Show advanced” on the bottom right corner


  1. Scroll down to the “Version” header. Click on it, and you will see the current status (whether the property needs updating, or not)
  2. If an update is available, click on “Update to latest version”

Later versions will give you extra features (if you encounter any bugs let us know!).

Creating spaces & using templates

How do I copy a space?

This can be achieved through the “Clone” function, which allows duplicating a space with a variety of options. To do so, open the options menu of a space (the three vertical dots on the right), then click on “Clone”.

Note: cloning will always copy the configuration of a space,

which are set in the “Edit space” advanced options.

In the popup, you can simply click on the green “Clone” button, or you can show additional options by clicking the “Show advanced” button.

Blank Template has Invisible Floor

The blank template has an invisible floor which allows you to drag bots and items around. Just be aware this plane exists if you are trying to place items lower than the floor you won’t be able to unless you manually adjust the position “y” value to be a negative number in the edit items list.

Building from a Blank Template

Learn more about building a scene with 3rd party 3d models for rooms/scenes here

https://academy.learnbrite.com/building-from-a-blank-template/ 

Editing

Advanced Transform Controls

To use advanced transform controls:

  1. In your space click the Pencil+ menu icon
  2. Choose Start editing
  3. Again, in your space click the Pencil+ menu icon
  4. Choose Show items list
  5. Find the item you wish to adjust placement for, click Edit
  6. Click the button Show advanced transform controls

Now in the scene you will see a widget with axis and some extra buttons below the top toolbar.

Using Transform you can click the transform widget and drag the item in that axis to place it where you would like.

Using Rotate you can click the rotate widget and rotate the item in that axis.

Using Scale you can click the scale widget and drag to adjust the item’s scale on any axis.

Navigation

Spawn (starting) hotspot

Where the user enters a scene is a special type of hotspot. With most templates when you arrive there is only the bots and you. Going into edit mode you can not move the spawn hotspot (you can’t move the hotspot you are currently occupying) so create a new hotspot in edit mode, stop editing, move to the new hotspot… now you can select and move the spawn hotspot in edit mode.

Be aware the spawn hotspot does not bring people exactly to that spot, but in a small radius around it randomly, this helps avoid when many users enter a space that their bodies are not inside each others.

Bringing Multiple Spaces together in a World

Create a World in the Dashboard

Add your Spaces

Then use switchScene Script command

Switching Spaces in a Campus (World)

LB.experienceController.switchScene(spaceId);

spaceId is shown in the URL when visiting the space.

Note: if you want to provide a link back to the World starting space, you need to use the word “default” rather than the spaceId.

{"action":"callFunction", "name":"LB.experienceController.switchScene", "parameter":"default"}

Example: call LB.experienceController.switchScene

Dialogue

[action:"callFunction", name:"LB.experienceController.switchScene", parameter:"spaceId"]

onclick

{"action":"callFunction", "name":"LB.experienceController.switchScene", "parameter":"spaceId"}

Script

LB.Actions.callFunction({name:"LB.experienceController.switchScene", parameter:"spaceId"});

Or

LB.experienceController.switchScene("spaceId");

Optimization

My space loads slowly!

There are a couple of performance considerations to make when setting up a space. All the suggestions that follow should be weighed against the specific requirements of your experience. As an additional rule of thumb, if you are designing an experience targeting more powerful devices or areas with high connection speed, you can afford to have “heavier” scenes (i.e. scenes that include more objects, or more detail). LearnBrite items are optimized to be as light as possible.

More items = more things to load

The more items are added to the scene, the heavier the scene will be to load. If multiple instances of a model are needed, it’s better to repeat the same model as opposed to having different ones.

For example, to fence off an area we might need 4 different fence models (one per side). By cloning the same model (i.e. a model with the same URL) multiple times, as opposed to using four different types of fence, fewer resources will be consumed. In the image below, the setup on the left will be more performant than the one on the right.

Realistic objects = heavier objects

While it depends on the optimization made by the original author, a good rule of thumb for models is that the more detailed they are, the heavier they will be to load. Conversely, “blockier” or more “angular” models are much lighter, as  they include less polygons. It is often good to search for the “low poly” version of an object (e.g. by searching for “hand low poly”, or “office low poly”), and consider whether the detail on that object is acceptable.

In the example below, the hand on the left will load much quicker than the hand on the right.

 

Object scale ≠ object weight

An object might appear very small in the scene, but that does not guarantee that the object itself is lighter, as scale and detail are completely independent of one another.

Using cached resources

If you are using LearnBrite’s Storage solution, you should make sure that the assets loaded in the scene are loaded from it – or another CDN, in programmer-speak. You can confirm this by looking at the URL of the item (in the field lbAssetFile) in the object’s properties, it should start with https://cache.learnbrite.com. This will not help when a user first loads the space, but it will make any future visit load much faster.

Space Settings

How do I change the settings of a space?

To change the settings of a space (or world), click on the options menu of a space (three vertical dots, on the right of the card) and choose “Edit space”.

Within this page, click on the “Show advanced” button. You can then expand each section by clicking on its header.

Note: when you’re done, be sure to click on “Save” at the bottom, otherwise your changes will not be saved!

Virtual Meeting checkbox – collaborate in a space together

There are two ways to make a space or world multiuser: the first is by turning on the “Virtual meeting room” option when creating it:

And the second is to turn it on by checking the “Virtual meeting room” checkbox in the edit page.

UI

What is the “goggles” icon supposed to do (on different devices)

  • Toggle between 1st person and third person views on typical flat screen devices
  • On mobile it may enter “magic window” mode
  • On DayDream phones it will ask you to put the device in the headset
  • In WebVR enabled browsers (with headsets connected) it will switch to immersive VR mode

Text-to-speech

The Chinese Female voice stops before finishing the sentence

Logographic writing (such as Chinese hanji or Japanese kanji, e.g. 中文) “tricks” the algorithm that calculates the length of text-to-speech.

If you are experiencing this issue, you can fix it by changing the “Enable time estimation for TTS” setting in the “Experimental settings” section of your space to “Disabled”. For a guide on how to do so, see the “How do I change the settings of a space?” section in this same guide.

Gamification

How can I track a score in ChatMapper?

Tracking a score for the user is done routinely with ChatMapper e-learning projects through variables.

1. Creating and updating the variable in ChatMapper

In ChatMapper, create a new user variable (CTRL+SHIFT+U) with a name of your choosing and an initial value of 0.

CM_new-user-var.jpg

The same variable can also be created directly in code, by writing the following line in the Script Editor of the conversation’s first node.

Variable["CMScore"] = 0

The variable is thus declared and initialized (i.e. given an initial value), and can be then used during the scenario to record the learner’s progress, for instance by increasing it every time a correct answer is given.

CM_update-user-var.jpg

In this case, we’re increasing the CMScore variable by 1 for each correct answer, which can be done like so:

Variable["CMScore"] = Variable["CMScore"] + 1

2. Submitting the score

There is one last step in ChatMapper, which is to communicate the scenario’s outcome to the LMS. This can be done by calling “LB.Lms.submitScore”, like so:

LB.Lms.submitScore(Variable["CMScore"]);

Where Variable["CMScore"] will of course be the name of your variable, if it is different.

3. Publishing as a scenario

A series of video guides that go through the process step-by-step can be found here: https://learnbrite.com/vr-scenario-academy-scenario-authoring/. On a high level, this process consists of :

  1. Publish the scenario (will create a .json file)
  2. Create a new Scenario (https://app.learnbrite.com/dashboard/scenarios/create) and Upload the .json file
  3. Create a new space (and select the Scenario created in the previous step during creation).

How can I track a score within a space?

The easiest and quickest way to test that a score can be submitted by the platform to the chosen LMS is to create an object in the space, and call submitScore from it.

  1. In the edit menu, select “Add content”, then add any model (for instance you can search for “cube”)
  2. After the model loaded, enter edit mode, and click on the gear icon


  1. In the onclick field, click on “Edit Action”

  1. Click on “More” (the rightmost of the blue buttons at the bottom)
  2. Select “Custom action” from the dropdown
  3. Fill it with the following parameters:
  • Action Name: callFunction
  • name: LB.Lms.submitScore
  • parameter: 100

  1. Then click or tap on “Save action”,  then Save” at the bottom of the previous popup.
  2. Exit edit mode.

By clicking on the item now, a score of 100 will be submitted, and you can check that it’s reported correctly in your LMS of choice.

How can I add achievements?

See the Trophio guide

Actions

Make 3D items clickable and trigger actions (2.6+)

Version 2.6+ of scenario added onclick to supported fields for 3D items. (see Scenario Actions document for more details on available actions)

Edit mode -> Items List

In the example below we’ve added {"action":"playGesture", "name":"yes"} as an onclick event so now you can click on the Plant in the scene and your avatar will play the head-nodding gesture.

Make parts of a scene clickable (2.6+)

With Scenario version 2.6+ a new feature allows you to place transparent cubes in a scene and add an onclick trigger to them. This can be useful when you want to make static 3d models of interactive. Often 3d models and scenes come as one combined model, using the transparent box trigger you can make parts of a scene responsive without needing to break the 3d model into separate components.

Edit mode -> Items List -> Add New Item

Name: BoxTrigger

Click [Save name]

Choose `Custom item` and click [Add item]

Copy the following URL

https://app.learnbrite.com/assetdb/transparentcube.js

Paste into the field, click [Add item]

A transparent box appears in the scene.

Click the Edit list icon

Find the BoxTrigger, click [Edit]

Now you can enter any scenario action you would like in the onclick field. (see Scenario Actions document for more details on available actions)

For example try:

{"action":"playGesture", "name":"yes"}

Click [Save item]

The box will be invisible in the scene, the mouse cursor will change when over the box. Clicking the box will trigger the action.

Stop Camera Position Changes after onclick action (2.9+)

Eg. I clicked an item and it did an action (play ambient) but it also changed my camera position in third person view.

To stop the camera position from being updated,  set enterCMmode to false

Eg. for your own onclick field change enterCMMode

{"action":"playConversationId","cnvid":9218,"sourceExternalId":"577f76676764b","delayMs":0,"executedFromEA":true,"getIntoCMMode":true}

To

{"action":"playConversationId","cnvid":9218,"sourceExternalId":"577f76676764b","delayMs":0,"executedFromEA":true,"getIntoCMMode":false}

And click the Save item button

How can I hide/show items?

Hide an item

LB.Utils.findItem("breathalizer").visible=false

Show an item

LB.Utils.findItem("breathalizer").visible=true

Fade out an avatar

LB.Utils.fadeObject(player().meshes,false);

Fade out an item

LB.Utils.fadeObject(LB.Utils.findItem("breathalizer"),false);

Fade in an item

LB.Utils.fadeObject(LB.Utils.findItem("breathalizer"),true);

You can also set the duration of the fade and hook things for when it ends.

This is very advanced stuff but you are welcome to use it.

Note: We will be making Actions for these type of things in the future

Mediaboards

Which YouTube URL should I use?

There are three types of YouTube URLs:

Watch URLs play the video directly on the mediaboard since version 2.9, as if it were a screen. This also happens in VR.

Youtu.be and embed URLs before 2.11 created a popup that could not be customized, and didn’t show anything in VR. Since 2.11, those URLs create a popup that uses the displayVideo action, and can therefore be customized with the same parameters, and they work in VR as if they were watch URLs.

Please note that playing the video directly in the scene (i.e. by using watch URLs or in VR) is considered experimental: it effectively requires streaming a web page (the <iframe> tag in the embed code) as if it were a video, which YouTube doesn’t expect and is therefore prone to throttling. We are currently evaluating ways to improve the reliability of this, but as there is no native mechanism in browsers to display HTML elements in 3D, we generally suggest to use youtu.be and embed URLs where possible.

Notes

How to change the visual look of Notes

Click the settings icon for a note

Change innerHTML is the text that appears on the note and can include html tags eg. <img>

Change style using CSS rules, see below for some useful examples including changing the size

Example: notes with no background

Transparent background (great for notes with images)

backgroundcolor:transparent

Example: notes with black background

Black background with white text

background-color:#000000;color:white

Example: notes with semi-transparent grey with white text label size

background:rgba(1,1,1,0.5);height:70px;min-height:70px;color:white

Example: change size of a note

background-color:#ffff6d; font-size:20px; width:800px; height:50px;min-height:50px

How to use UI icons in Notes and Dialogue

Example: Laser Pointer

<i class="fa fa-bullseye fa-stack-1.5x fa-lg" aria-hidden="true"></i>

Example: Hotspot Marker

<i class="fa fa-map-marker fa-1_5x fa-lg fa-fw fa-stack-1.5x" style="color:007bff;"></i>

A full list of available icons can be found here https://fontawesome.com/v4.7.0/icons/ 

You can also get creative with rotating and stacking icons, here are some examples https://fontawesome.com/v4.7.0/examples/ 

Adding Images to Notes

The HTML <img> tag is supported. There are two things you need to add to image tags so they appear in the 3d scene and the popup correctly.

Eg. Change your original image tag

<img height="40" width="139" src="https://platform.slack-edge.com/img/add_to_slack.png">

To include the following two changes, add crossorigin="anonymous" and prepend you url with https://hurl.learnbrite.com/pr/ which will help avoid CORS loading errors.

<img crossorigin="anonymous" height="40" width="139" src="https://hurl.learnbrite.com/pr/https://platform.slack-edge.com/img/add_to_slack.png">

Multiuser / Conferencing

Maximum number of users in a meeting space

There are two variables you can change for a Space

maxUsers – the maximum number of users allowed in a space after which new visitors will be notified the space is full

LB.scenarioConfig.currentScene.maxUsers = 50;

instanceMaxUsers – the maximum number of users in a space before a new instance is created

LB.scenarioConfig.currentScene.instanceMaxUsers = 50;

What is the Maximum number of users in a space?

We limit the number of users in a space so that anyone can join no matter what device they are using. For example people running older low spec laptops using Internet Explorer 11 browser.

However we also support a feature called "Instancing" in which the platform automatically creates a new instance of the space like the gallery for the next lot of people to go into once the first instance is full.

This way you can scale to an unlimited audience size in any space.

There is an added feature that means the chat, host avatars, audio and video is shared across all instances so you can present to hundreds of people for example.

The concurrent limit set on the templates is 15 people before instancing occurs (this can be altered per Location). If you suspect any users might be joining using Internet Explorer 11 or older smartphones then that is probably a safe number.

We have experimentally had over 200 avatars running in a single Chrome tab on today's laptops.

iOS 12 Chrome does not support Audio and Video conferencing

expect iOS13 release in 2019 to allow for browsers other than Safari. https://learnbrite.atlassian.net/browse/SCEN-938

  • Solution: Use Safari or dial-in until iOS13 ships.

ChatMapper

Treating Variables in ChatMapper as Text or Number

I'm watching a ChatMapper variable in the dialogue system and it’s increasing like a string rather than a number

enemy: "10"
enemy: "102"
enemy: "1020"
enemy: "1020021"

in the ChatMapper file an example script node shows

Variable["param4"] = Variable["param4"] + 100
Variable["enemy"] = Variable["enemy"] + 2
Variable["rubNum"] = 1341
Variable["dec3"] = 3
Variable["node3"]="DP 1.3.4.1"

So why would `enemy` be treated like a Text string rather than a Number?

Answer: Initial value for variables in ChatMapper

If you don’t supply an initial value the Variable will be treated as a Text variable

by setting initial value to 0 it now shows as

Scenario will now treat the Variable as a number

enemy: 4

Troubleshooting ChatMapper Template Exports

  • Ensure you have only one conversation set to Autoplay (since version 2.7.5 in case an author mistakenly adds more than one conversation as Autoplay a popup list will appear allowing the user to choose one of the conversations marked as Autoplay)
  • If you create a new conversation (rather than using the Explore, Actor2, Actor3, Actor4, Actor5) be sure to click the first node of the tree and select the location `Sample location`
  • Leave the Player actor’s avatar_externalId blank so the user gets their own avatar look (you can use this however if you want to override the players actor for a roleplay scenario, eg. forcing them to appear as a male nurse)

Why do some actions (e.g. displayImage) skip the node afterwards?

Some actions will progress the conversation to the next node before effectively “pausing” it, so when the conversation resumes it will seem like a node was skipped. We suggest adding an empty node after such actions to prevent this behaviour, if needed.

Known Issues

  • Some furniture is baked into the templates, we should really make them 3d items you can move/remove.
  • The .cmpkg name must be the same as the project file (.cmp)
  • Solution: Rename your .cmpkg to match your .cmp
  • When you upload a cmpkg as a scenario it unzips all the assets on the server then looks for a .json scenario of the same name as the cmpkg that was uploaded
  • Proposed solution: create an informative error message to the user that the [NAME].json can not be found, check that the name of the cmpkg matches the cmp project filename. https://learnbrite.atlassian.net/browse/ES-190 
  • Is it possible to change “textures” based on user interaction – ask about named textures
  • LearnBrite’s Website demos are hard to find and should perhaps be referenced in the documentation
  • Firefox on Android – avatars won’t display.
  • This is a known issue and currently has no fix.
  • How does Scenario choose male/female voice for a player?
  • How do I round a score from say 46.6666666667% to 47%?
  • How do I disable the suggested videos that show when pausing or at the end of a video on Vimeo?
  • `pitch` is not supported in some fallback voices, but `rate` is, which voices?
  • Where should I place my pip avatar in a scene?
  • Can I hide the pip actor?

Trying to play a gesture in a dialogue node isn’t working.

[action:"playGesture", name:"yes"]

Not working in dialogue nodes or the script editor

Dialogue

[action:"playGesture", name:"yes", delay:"2000"]

onclick

{"action":"playGesture", "name":"yes", "delay":"2000"}

Script

LB.Actions.playGesture({name:"yes", delay:"2000"});

VR

  • Cardboard mode on Chrome with Scenario 2.7 spinning uncontrollably due to Chrome API change.
  • Solution: Fixed in Scenario 2.6.

© 2019 LearnBrite

Trademarks & Copyrights are property of their respective owners. Pictures are indicative only & may not reflect final production.

How useful was this article?

Click on a star to rate it!

We are sorry that this article was not useful for you!

Let us improve this article!

Tell us how we can improve this article?