Now that you are able to successfully stream the 3D model into Unity, it's time to make some custom adjustments.
Each hologram will be instantiated with a script named CustomBehaviour.cs
attached. You can edit this script to create any behavior you would like while referencing additional data streamed from the cloud.
Open the Assets/echoAR/CustomBehaviour.cs
script:
CustomBehaviour.csusing System.Collections;using System.Collections.Generic;using UnityEngine;public class CustomBehaviour : MonoBehaviour{[HideInInspector]public Entry entry;/// <summary>/// EXAMPLE BEHAVIOUR/// Queries the database and names the object based on the result./// </summary>// Use this for initializationvoid Start(){// Add RemoteTransformations script to object and set its entrythis.gameObject.AddComponent<RemoteTransformations>().entry = entry;// ADD YOUR CODE HERE //// Qurey additional data to get the namestring value = "";if (entry.getAdditionalData() != null &&entry.getAdditionalData().TryGetValue("name", out value)){// Set namethis.gameObject.name = value;}}// Update is called once per framevoid Update(){}}
Note that this is an regular Unity MonoBehaviour with additions to the Start() function.
Lines 18-19 attaches a RemoteTransformations
component to the game object and sets its content entry. This component is in charge of enabling real-time updates and animations.
// Add RemoteTransformations script to object and set its entrythis.gameObject.AddComponent<RemoteTransformations>().entry = entry;
You can add any custom code after line 21. An example follows.
Lines 22-28 are an example that queries the entry's metadata for a key called name
, and if such key exists, set the game object's name to the corresponding value:
string value = "";if (entry.getAdditionalData() != null &&entry.getAdditionalData().TryGetValue("name", out value)){// Set namethis.gameObject.name = value;}
Without the name
key being set, the default game object's name is the asset filename.
Use the console to set a metadata entry with the following data:
key | value |
name | empire_state |
Built-in keywords will be suggested through a drop-down list but you can add any key and any value by typing it in the text input field.
Run Unity again and notice that the game object name automatically changes.
Great work! 🎉
You can add metadata to the cloud or update existing metadata stored remotely by calling the UpdateEntryData
function located in the echoAR.cs
script. This function implements the Post Metadata to an Entry API query.
In order to call this function from any other script you can find the echoAR
game object and use the echoAR.cs
script instance to call the UpdateEntryData
function with this single line of code:
StartCoroutine(GameObject.Find("echoAR").GetComponent<echoAR>().UpdateEntryData("<ENTRY_ID>", "<DATA>", "<VALUE>"));
Where <ENTRY_ID>
is the a specific entry ID you are trying to post metadata too, <DATA>
is the data key (e.g. scale
), and <VALUE>
is the data value (e.g. 2
).
Add the following code to your Start
function to register an action that will be executed when metadata is received from the cloud.
// Define data actionWClient.On(WClient.EventType.DATA_POST_ENTRY.ToString(), (string message) => {// Parse datastring[] messageArray = message.Split('|');string dataKey = messageArray[2];string dataValue = messageArray[3];// Add you code here// myFunction(dataKey, dataValue);});