diff --git a/.idea/.idea.Speckle Unity/.idea/contentModel.xml b/.idea/.idea.Speckle Unity/.idea/contentModel.xml index 21fbee8..a08bfa7 100644 --- a/.idea/.idea.Speckle Unity/.idea/contentModel.xml +++ b/.idea/.idea.Speckle Unity/.idea/contentModel.xml @@ -11,6 +11,7 @@ + diff --git a/Assets/DataReceiver.asset b/Assets/DataReceiver.asset new file mode 100644 index 0000000..bc60e8d --- /dev/null +++ b/Assets/DataReceiver.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5578b344ae57415c912729d411df2a5c, type: 3} + m_Name: DataReceiver + m_EditorClassIdentifier: + StreamId: 50e2e61394 diff --git a/Assets/DataReceiver.asset.meta b/Assets/DataReceiver.asset.meta new file mode 100644 index 0000000..8241c95 --- /dev/null +++ b/Assets/DataReceiver.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd0ca65e78b26414a8b4196e921fdcb9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Main.unity b/Assets/Main.unity index a4ba16e..087bd8c 100644 --- a/Assets/Main.unity +++ b/Assets/Main.unity @@ -1696,6 +1696,50 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1560746816} m_CullTransparentMesh: 1 +--- !u!1 &1677020035 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1677020036} + - component: {fileID: 1677020037} + m_Layer: 0 + m_Name: ScriptableObjectExample + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1677020036 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677020035} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 25.700481, y: -28.98249, z: 44.967052} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1677020037 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677020035} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96d566d63ea69b48805295c46718ab0, type: 3} + m_Name: + m_EditorClassIdentifier: + receiver: {fileID: 11400000, guid: dd0ca65e78b26414a8b4196e921fdcb9, type: 2} --- !u!1 &1707872729 GameObject: m_ObjectHideFlags: 0 @@ -1839,7 +1883,7 @@ GameObject: m_Component: - component: {fileID: 1729237656} m_Layer: 0 - m_Name: SampleGeometry + m_Name: Cubes m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1928,7 +1972,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1939550651 GameObject: @@ -2449,7 +2493,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2098155187 GameObject: diff --git a/Assets/ScriptableObjectExample.cs b/Assets/ScriptableObjectExample.cs new file mode 100644 index 0000000..d925535 --- /dev/null +++ b/Assets/ScriptableObjectExample.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using Speckle.ConnectorUnity; +using UnityEngine; + +//This class shows how to use the ScriptableObject Receiver to receive data in game time +//From the editor navigate to Assets > Create > ScriptableObjects > Receiver +//Set the StreamId on the new DataReceiver created +//Attach it to this script's 'receiver' +//To be honest, creating the Receiver form code is just simpler...! +public class ScriptableObjectExample : MonoBehaviour +{ + public Receiver receiver; + + void Start() + { + receiver.Init(); + receiver.Receive().ConfigureAwait(false); + + //... do more stuff eg set materials, subscribe to changes etc + } + + + void Update() + { + + } +} diff --git a/Assets/ScriptableObjectExample.cs.meta b/Assets/ScriptableObjectExample.cs.meta new file mode 100644 index 0000000..cd3c700 --- /dev/null +++ b/Assets/ScriptableObjectExample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e96d566d63ea69b48805295c46718ab0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Speckle Connector/Receiver.cs b/Assets/Speckle Connector/Receiver.cs index 58845cb..3bd2d3c 100644 --- a/Assets/Speckle Connector/Receiver.cs +++ b/Assets/Speckle Connector/Receiver.cs @@ -18,9 +18,10 @@ namespace Speckle.ConnectorUnity /// A Speckle Receiver, it's a wrapper around a basic Speckle Client /// that handles conversions and subscriptions for you /// + [CreateAssetMenu(fileName = "DataReceiver", menuName = "ScriptableObjects/Receiver", order = 1)] public class Receiver : ScriptableObject { - public string StreamId { get; private set; } + public string StreamId; public delegate void DataReceivedHandler(GameObject data); @@ -33,7 +34,12 @@ namespace Speckle.ConnectorUnity public Receiver() { } - + + /// + /// Initializes the Receiver manually, with StreamId and Account + /// + /// + /// public void Init(string streamId, Account account = null) { StreamId = streamId; @@ -43,6 +49,17 @@ namespace Speckle.ConnectorUnity Client.OnCommitCreated += Client_OnCommitCreated; } + /// + /// Initializes the Receiver automatically, with t + /// To be used when the StreamId property is set on the Unity ScriptableObject + /// + public void Init() + { + Client = new Client(AccountManager.GetDefaultAccount()); + Client.SubscribeCommitCreated(StreamId); + Client.OnCommitCreated += Client_OnCommitCreated; + } + /// /// Gets and converts the data of the last commit on the Stream /// @@ -66,7 +83,6 @@ namespace Speckle.ConnectorUnity #region private methods - /// /// Fired when a new commit is created on this stream /// It receives and converts the objects and then executes the user defined _onCommitCreated action. @@ -79,7 +95,7 @@ namespace Speckle.ConnectorUnity if (OnNewData == null) return; - + //Run on a dispatcher as GOs can only be created on the main thread Dispatcher.Instance().EnqueueAsync(async () => { @@ -88,7 +104,6 @@ namespace Speckle.ConnectorUnity }); } - private async Task GetAndConvertObject(string objectId, string commitId) { diff --git a/Assets/SpeckleExamples.cs b/Assets/SpeckleExamples.cs index 03b1b50..5e978d7 100644 --- a/Assets/SpeckleExamples.cs +++ b/Assets/SpeckleExamples.cs @@ -47,6 +47,7 @@ namespace Speckle.ConnectorUnity btn2.onClick.AddListener(SendData); } + // Shows how to create a new Receiver from code private async void CreateReceiver() { var receiver = ScriptableObject.CreateInstance();