deps: 2.15.0-alpha2

This commit is contained in:
Jedd Morgan
2023-06-29 00:13:36 +01:00
parent 57154a6fb8
commit a3fb10570e
54 changed files with 495 additions and 331 deletions
-153
View File
@@ -1,153 +0,0 @@
using System;
using System.Collections;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Speckle.ConnectorUnity.Components;
using Speckle.ConnectorUnity.Utils;
using Speckle.Core.Api;
using Speckle.Core.Credentials;
using Speckle.Core.Logging;
using Speckle.Core.Models;
using UnityEngine;
[AddComponentMenu("Speckle/Extras/Receive From Url")]
[RequireComponent(typeof(RecursiveConverter)), ExecuteAlways]
public class ReceiveFromURL : MonoBehaviour
{
[Tooltip("Url of your speckle object/commit/branch/stream")]
public string url;
private RecursiveConverter _converter;
#nullable enable
private CancellationTokenSource? _tokenSource;
void Awake()
{
_converter = GetComponent<RecursiveConverter>();
}
[ContextMenu(nameof(Receive))]
public void Receive()
{
StartCoroutine(Receive_Routine());
}
public IEnumerator Receive_Routine()
{
if (IsBusy()) throw new InvalidOperationException("A receive operation has already started");
_tokenSource = new CancellationTokenSource();
try
{
StreamWrapper sw = new(url);
if (!sw.IsValid)
throw new InvalidOperationException("Speckle url input is not a valid speckle stream/branch/commit");
var accountTask = new Utils.WaitForTask<Account>(async () => await GetAccount(sw));
yield return accountTask;
_tokenSource.Token.ThrowIfCancellationRequested();
using Client c = new(accountTask.Result);
var objectIdTask = new Utils.WaitForTask<(string, Commit?)>(async () => await GetObjectID(sw, c));
yield return objectIdTask;
(string objectId, Commit? commit) = objectIdTask.Result;
Debug.Log($"Receiving from {sw.ServerUrl}...");
var receiveTask = new Utils.WaitForTask<Base>(async () => await SpeckleReceiver.ReceiveAsync(
c,
sw.StreamId,
objectId,
commit,
cancellationToken: _tokenSource.Token));
yield return receiveTask;
Debug.Log("Converting to native...");
_converter.RecursivelyConvertToNative_Sync(receiveTask.Result, transform);
}
finally
{
_tokenSource.Dispose();
_tokenSource = null;
}
}
private async Task<(string objectId, Commit? commit)> GetObjectID(StreamWrapper sw, Client client)
{
string objectId;
Commit? commit = null;
//OBJECT URL
if (!string.IsNullOrEmpty(sw.ObjectId))
{
objectId = sw.ObjectId;
}
//COMMIT URL
else if (!string.IsNullOrEmpty(sw.CommitId))
{
commit = await client.CommitGet(sw.StreamId, sw.CommitId).ConfigureAwait(false);
objectId = commit.referencedObject;
}
//BRANCH URL OR STREAM URL
else
{
var branchName = string.IsNullOrEmpty(sw.BranchName) ? "main" : sw.BranchName;
var branch = await client.BranchGet(sw.StreamId, branchName, 1).ConfigureAwait(false);
if (!branch.commits.items.Any())
throw new SpeckleException("The selected branch has no commits.");
commit = branch.commits.items[0];
objectId = branch.commits.items[0].referencedObject;
}
return (objectId, commit);
}
[ContextMenu(nameof(Cancel))]
public void Cancel()
{
if (IsNotBusy()) throw new InvalidOperationException("There are no pending receive operations to cancel");
_tokenSource!.Cancel();
}
[ContextMenu(nameof(Cancel), true)]
public bool IsBusy()
{
return _tokenSource is not null;
}
[ContextMenu(nameof(Receive), true)]
internal bool IsNotBusy() => !IsBusy();
private void OnDisable()
{
_tokenSource?.Cancel();
}
private async Task<Account> GetAccount(StreamWrapper sw)
{
Account account;
try
{
account = await sw.GetAccount().ConfigureAwait(false);
}
catch (SpeckleException e)
{
if (string.IsNullOrEmpty(sw.StreamId))
throw e;
//Fallback to a non authed account
account = new Account
{
token = "",
serverInfo = new ServerInfo { url = sw.ServerUrl },
userInfo = new UserInfo()
};
}
return account;
}
}
+5 -5
View File
@@ -1,13 +1,13 @@
{
"dependencies": {
"com.unity.2d.sprite": "1.0.0",
"com.unity.collab-proxy": "2.0.1",
"com.unity.ide.rider": "3.0.18",
"com.unity.ide.visualstudio": "2.0.17",
"com.unity.collab-proxy": "2.0.5",
"com.unity.ide.rider": "3.0.24",
"com.unity.ide.visualstudio": "2.0.18",
"com.unity.ide.vscode": "1.2.5",
"com.unity.test-framework": "1.1.31",
"com.unity.test-framework": "1.1.33",
"com.unity.textmeshpro": "3.0.6",
"com.unity.timeline": "1.6.4",
"com.unity.timeline": "1.6.5",
"com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.2",
"com.unity.ugui": "1.0.0",
"com.unity.modules.ai": "1.0.0",
+5 -5
View File
@@ -7,7 +7,7 @@
"dependencies": {}
},
"com.unity.collab-proxy": {
"version": "2.0.1",
"version": "2.0.5",
"depth": 0,
"source": "registry",
"dependencies": {},
@@ -21,7 +21,7 @@
"url": "https://packages.unity.com"
},
"com.unity.ide.rider": {
"version": "3.0.18",
"version": "3.0.24",
"depth": 0,
"source": "registry",
"dependencies": {
@@ -30,7 +30,7 @@
"url": "https://packages.unity.com"
},
"com.unity.ide.visualstudio": {
"version": "2.0.17",
"version": "2.0.18",
"depth": 0,
"source": "registry",
"dependencies": {
@@ -62,7 +62,7 @@
"url": "https://packages.unity.com"
},
"com.unity.test-framework": {
"version": "1.1.31",
"version": "1.1.33",
"depth": 0,
"source": "registry",
"dependencies": {
@@ -82,7 +82,7 @@
"url": "https://packages.unity.com"
},
"com.unity.timeline": {
"version": "1.6.4",
"version": "1.6.5",
"depth": 0,
"source": "registry",
"dependencies": {
@@ -0,0 +1,34 @@
#nullable enable
using UnityEditor;
using UnityEngine;
namespace Speckle.ConnectorUnity.Components.Editor
{
[CanEditMultipleObjects]
[CustomEditor(typeof(ReceiveFromURL))]
public class ReceiveFromURLEditor: UnityEditor.Editor
{
public override void OnInspectorGUI()
{
var speckleReceiver = (ReceiveFromURL)target;
DrawDefaultInspector();
bool isBusy = speckleReceiver.IsBusy();
GUI.enabled = !isBusy;
if (GUILayout.Button("Receive!"))
{
speckleReceiver.Receive();
}
GUI.enabled = isBusy;
if (GUILayout.Button("Cancel!"))
{
speckleReceiver.Cancel();
}
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1f1a8151dcdc40ac8662b102c2f25277
timeCreated: 1687985346
@@ -1,3 +1,4 @@
#nullable enable
using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;
@@ -6,7 +7,6 @@ using Speckle.Core.Models.GraphTraversal;
using UnityEditor;
using UnityEngine;
#nullable enable
namespace Speckle.ConnectorUnity.Components.Editor
{
[CanEditMultipleObjects]
@@ -54,7 +54,6 @@ namespace Speckle.ConnectorUnity.Components.Editor
{
var value = Progress.globalProgress; //NOTE: this may include non-speckle items...
var percent = Math.Max(0, Mathf.Ceil(value * 100));
Debug.Log(value);
var rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight);
EditorGUI.ProgressBar(rect, value, $"{percent}%");
}
@@ -277,7 +276,7 @@ namespace Speckle.ConnectorUnity.Components.Editor
static void CreateCustomGameObject(MenuCommand menuCommand)
{
// Create a custom game object
GameObject go = new GameObject("Speckle Connector");
GameObject go = new("Speckle Connector");
// Ensure it gets reparented if this was a context click (otherwise does nothing)
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
// Register the creation in the undo system
@@ -286,6 +285,7 @@ namespace Speckle.ConnectorUnity.Components.Editor
go.AddComponent<RecursiveConverter>();
go.AddComponent<SpeckleReceiver>();
go.AddComponent<ReceiveFromURL>();
go.AddComponent<SpeckleSender>();
#if UNITY_2021_2_OR_NEWER
@@ -0,0 +1,154 @@
using System;
using System.Collections;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Speckle.Core.Api;
using Speckle.Core.Credentials;
using Speckle.Core.Logging;
using Speckle.Core.Models;
using UnityEngine;
namespace Speckle.ConnectorUnity.Components
{
[AddComponentMenu("Speckle/Extras/Receive from URL")]
[RequireComponent(typeof(RecursiveConverter)), ExecuteAlways]
public class ReceiveFromURL : MonoBehaviour
{
[Tooltip("Url of your speckle object/commit/branch/stream")]
public string url;
private RecursiveConverter _converter;
#nullable enable
private CancellationTokenSource? _tokenSource;
void Awake()
{
_converter = GetComponent<RecursiveConverter>();
}
[ContextMenu(nameof(Receive))]
public void Receive()
{
StartCoroutine(Receive_Routine());
}
public IEnumerator Receive_Routine()
{
if (IsBusy()) throw new InvalidOperationException("A receive operation has already started");
_tokenSource = new CancellationTokenSource();
try
{
StreamWrapper sw = new(url);
if (!sw.IsValid)
throw new InvalidOperationException("Speckle url input is not a valid speckle stream/branch/commit");
var accountTask = new Utils.Utils.WaitForTask<Account>(async () => await GetAccount(sw));
yield return accountTask;
_tokenSource.Token.ThrowIfCancellationRequested();
using Client c = new(accountTask.Result);
var objectIdTask = new Utils.Utils.WaitForTask<(string, Commit?)>(async () => await GetObjectID(sw, c));
yield return objectIdTask;
(string objectId, Commit? commit) = objectIdTask.Result;
Debug.Log($"Receiving from {sw.ServerUrl}...");
var receiveTask = new Utils.Utils.WaitForTask<Base>(async () => await SpeckleReceiver.ReceiveAsync(
c,
sw.StreamId,
objectId,
commit,
cancellationToken: _tokenSource.Token));
yield return receiveTask;
Debug.Log("Converting to native...");
_converter.RecursivelyConvertToNative_Sync(receiveTask.Result, transform);
}
finally
{
_tokenSource.Dispose();
_tokenSource = null;
}
}
private async Task<(string objectId, Commit? commit)> GetObjectID(StreamWrapper sw, Client client)
{
string objectId;
Commit? commit = null;
//OBJECT URL
if (!string.IsNullOrEmpty(sw.ObjectId))
{
objectId = sw.ObjectId;
}
//COMMIT URL
else if (!string.IsNullOrEmpty(sw.CommitId))
{
commit = await client.CommitGet(sw.StreamId, sw.CommitId).ConfigureAwait(false);
objectId = commit.referencedObject;
}
//BRANCH URL OR STREAM URL
else
{
var branchName = string.IsNullOrEmpty(sw.BranchName) ? "main" : sw.BranchName;
var branch = await client.BranchGet(sw.StreamId, branchName, 1).ConfigureAwait(false);
if (!branch.commits.items.Any())
throw new SpeckleException("The selected branch has no commits.");
commit = branch.commits.items[0];
objectId = branch.commits.items[0].referencedObject;
}
return (objectId, commit);
}
[ContextMenu(nameof(Cancel))]
public void Cancel()
{
if (IsNotBusy()) throw new InvalidOperationException("There are no pending receive operations to cancel");
_tokenSource!.Cancel();
}
[ContextMenu(nameof(Cancel), true)]
public bool IsBusy()
{
return _tokenSource is not null;
}
[ContextMenu(nameof(Receive), true)]
internal bool IsNotBusy() => !IsBusy();
private void OnDisable()
{
_tokenSource?.Cancel();
}
private async Task<Account> GetAccount(StreamWrapper sw)
{
Account account;
try
{
account = await sw.GetAccount().ConfigureAwait(false);
}
catch (SpeckleException e)
{
if (string.IsNullOrEmpty(sw.StreamId))
throw e;
//Fallback to a non authed account
account = new Account
{
token = "",
serverInfo = new ServerInfo { url = sw.ServerUrl },
userInfo = new UserInfo()
};
}
return account;
}
}
}
@@ -23,6 +23,9 @@ PluginImporter:
Exclude WebGL: 0
Exclude Win: 0
Exclude Win64: 0
Exclude WindowsStoreApps: 0
Exclude iOS: 0
Exclude tvOS: 0
- first:
Android: Android
second:
@@ -74,9 +77,30 @@ PluginImporter:
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
enabled: 1
settings:
CPU: AnyCPU
DontProcess: false
PlaceholderPath:
SDK: AnySDK
ScriptingBackend: DotNet
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: false
CPU: AnyCPU
CompileFlags:
FrameworkDependencies:
- first:
tvOS: tvOS
second:
enabled: 1
settings:
CPU: AnyCPU
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 6faf057a8f503f44287177f8e2094e3e
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 1
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:
@@ -9,67 +9,68 @@
".NETStandard,Version=v2.0/": {
"SpeckleCore2/2.0.999-local": {
"dependencies": {
"GraphQL.Client": "5.1.1",
"GraphQL.Client": "6.0.0",
"Microsoft.CSharp": "4.7.0",
"Microsoft.Data.Sqlite": "7.0.3",
"Microsoft.Data.Sqlite": "7.0.5",
"NETStandard.Library": "2.0.3",
"Polly": "7.2.3",
"Polly.Contrib.WaitAndRetry": "1.1.1",
"Polly.Extensions.Http": "3.0.0",
"Sentry": "3.29.0",
"Sentry.Serilog": "3.29.0",
"Sentry": "3.33.0",
"Sentry.Serilog": "3.33.0",
"Serilog": "2.12.0",
"Serilog.Enrichers.ClientInfo": "1.2.0",
"Serilog.Enrichers.ClientInfo": "1.3.0",
"Serilog.Enrichers.GlobalLogContext": "3.0.0",
"Serilog.Exceptions": "8.4.0",
"Serilog.Sinks.Console": "4.1.0",
"Serilog.Sinks.Seq": "5.2.2",
"SerilogTimings": "3.0.1",
"Speckle.Newtonsoft.Json": "13.0.2"
},
"runtime": {
"SpeckleCore2.dll": {}
}
},
"GraphQL.Client/5.1.1": {
"GraphQL.Client/6.0.0": {
"dependencies": {
"GraphQL.Client.Abstractions": "5.1.1",
"GraphQL.Client.Abstractions.Websocket": "5.1.1",
"GraphQL.Client.Abstractions": "6.0.0",
"GraphQL.Client.Abstractions.Websocket": "6.0.0",
"System.Reactive": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/GraphQL.Client.dll": {
"assemblyVersion": "5.1.1.0",
"fileVersion": "5.1.1.0"
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.0.0"
}
}
},
"GraphQL.Client.Abstractions/5.1.1": {
"GraphQL.Client.Abstractions/6.0.0": {
"dependencies": {
"GraphQL.Primitives": "5.1.1"
"GraphQL.Primitives": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/GraphQL.Client.Abstractions.dll": {
"assemblyVersion": "5.1.1.0",
"fileVersion": "5.1.1.0"
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.0.0"
}
}
},
"GraphQL.Client.Abstractions.Websocket/5.1.1": {
"GraphQL.Client.Abstractions.Websocket/6.0.0": {
"dependencies": {
"GraphQL.Client.Abstractions": "5.1.1"
"GraphQL.Client.Abstractions": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/GraphQL.Client.Abstractions.Websocket.dll": {
"assemblyVersion": "5.1.1.0",
"fileVersion": "5.1.1.0"
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.0.0"
}
}
},
"GraphQL.Primitives/5.1.1": {
"GraphQL.Primitives/6.0.0": {
"runtime": {
"lib/netstandard2.0/GraphQL.Primitives.dll": {
"assemblyVersion": "5.1.1.0",
"fileVersion": "5.1.1.0"
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.0.0"
}
}
},
@@ -142,20 +143,20 @@
}
}
},
"Microsoft.Data.Sqlite/7.0.3": {
"Microsoft.Data.Sqlite/7.0.5": {
"dependencies": {
"Microsoft.Data.Sqlite.Core": "7.0.3",
"Microsoft.Data.Sqlite.Core": "7.0.5",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
"Microsoft.Data.Sqlite.Core/7.0.3": {
"Microsoft.Data.Sqlite.Core/7.0.5": {
"dependencies": {
"SQLitePCLRaw.core": "2.1.4"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Data.Sqlite.dll": {
"assemblyVersion": "7.0.3.0",
"fileVersion": "7.0.323.6302"
"assemblyVersion": "7.0.5.0",
"fileVersion": "7.0.523.16503"
}
}
},
@@ -245,30 +246,27 @@
}
}
},
"Sentry/3.29.0": {
"Sentry/3.33.0": {
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "5.0.0",
"System.Buffers": "4.5.1",
"System.Reflection.Metadata": "5.0.0",
"System.Text.Json": "5.0.2",
"System.Threading.Tasks.Extensions": "4.5.4"
"System.Text.Json": "5.0.2"
},
"runtime": {
"lib/netstandard2.0/Sentry.dll": {
"assemblyVersion": "3.29.0.0",
"fileVersion": "3.29.0.0"
"assemblyVersion": "3.33.0.0",
"fileVersion": "3.33.0.0"
}
}
},
"Sentry.Serilog/3.29.0": {
"Sentry.Serilog/3.33.0": {
"dependencies": {
"Sentry": "3.29.0",
"Sentry": "3.33.0",
"Serilog": "2.12.0"
},
"runtime": {
"lib/netstandard2.0/Sentry.Serilog.dll": {
"assemblyVersion": "3.29.0.0",
"fileVersion": "3.29.0.0"
"assemblyVersion": "3.33.0.0",
"fileVersion": "3.33.0.0"
}
}
},
@@ -280,7 +278,7 @@
}
}
},
"Serilog.Enrichers.ClientInfo/1.2.0": {
"Serilog.Enrichers.ClientInfo/1.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Http": "2.1.1",
"Serilog": "2.12.0"
@@ -373,6 +371,17 @@
}
}
},
"SerilogTimings/3.0.1": {
"dependencies": {
"Serilog": "2.12.0"
},
"runtime": {
"lib/netstandard2.0/SerilogTimings.dll": {
"assemblyVersion": "3.0.1.0",
"fileVersion": "3.0.1.0"
}
}
},
"Speckle.Newtonsoft.Json/13.0.2": {
"runtime": {
"lib/netstandard2.0/Speckle.Newtonsoft.Json.dll": {
@@ -560,33 +569,33 @@
"serviceable": false,
"sha512": ""
},
"GraphQL.Client/5.1.1": {
"GraphQL.Client/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6bfM9qU4AMcFWm4BHd2M6LE5+rLtK47/+VRtypggwb9appC8sbF58ytVBVOKpqKhKpmZERfPLGJap8O/FH3w5w==",
"path": "graphql.client/5.1.1",
"hashPath": "graphql.client.5.1.1.nupkg.sha512"
"sha512": "sha512-8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"path": "graphql.client/6.0.0",
"hashPath": "graphql.client.6.0.0.nupkg.sha512"
},
"GraphQL.Client.Abstractions/5.1.1": {
"GraphQL.Client.Abstractions/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/znG7Lcz3rzG9VSCq+V2ARb63c/uIs8idGOvXyltZ32Wy570GX/I8HNUIZ1yDThmQRJ5KOGSd9Mzk37lFg49rg==",
"path": "graphql.client.abstractions/5.1.1",
"hashPath": "graphql.client.abstractions.5.1.1.nupkg.sha512"
"sha512": "sha512-h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
"path": "graphql.client.abstractions/6.0.0",
"hashPath": "graphql.client.abstractions.6.0.0.nupkg.sha512"
},
"GraphQL.Client.Abstractions.Websocket/5.1.1": {
"GraphQL.Client.Abstractions.Websocket/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-n1gU3GlqJ0jQceb/VEEr4c0D2vpQc5AtDwthK89+yX7VpzlhJKqE5B4RJwx//Jb33mKybfJioWwDgVfSOPAwdw==",
"path": "graphql.client.abstractions.websocket/5.1.1",
"hashPath": "graphql.client.abstractions.websocket.5.1.1.nupkg.sha512"
"sha512": "sha512-Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
"path": "graphql.client.abstractions.websocket/6.0.0",
"hashPath": "graphql.client.abstractions.websocket.6.0.0.nupkg.sha512"
},
"GraphQL.Primitives/5.1.1": {
"GraphQL.Primitives/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-RlGNsv19gbz6sQwkzif9J6Jd148nuIg1kRQf2AFOLp5K00IA+pKMdJvHF5t5llDR52Rok46ynhJv/wg+ps9ZhQ==",
"path": "graphql.primitives/5.1.1",
"hashPath": "graphql.primitives.5.1.1.nupkg.sha512"
"sha512": "sha512-yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==",
"path": "graphql.primitives/6.0.0",
"hashPath": "graphql.primitives.6.0.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Http/2.1.1": {
"type": "package",
@@ -630,19 +639,19 @@
"path": "microsoft.csharp/4.7.0",
"hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
},
"Microsoft.Data.Sqlite/7.0.3": {
"Microsoft.Data.Sqlite/7.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-uumx0bb4FsN7ApP0ZoQDfSJi9c2Xen0PlXCT2BF27cM+yUMFzDEhqxR7/1/DV8ck4mYtL9yShBoOa7jeJ3736w==",
"path": "microsoft.data.sqlite/7.0.3",
"hashPath": "microsoft.data.sqlite.7.0.3.nupkg.sha512"
"sha512": "sha512-KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
"path": "microsoft.data.sqlite/7.0.5",
"hashPath": "microsoft.data.sqlite.7.0.5.nupkg.sha512"
},
"Microsoft.Data.Sqlite.Core/7.0.3": {
"Microsoft.Data.Sqlite.Core/7.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pCmzLLWTIrIv94o7JtQ1qcPD0oc1YNY9XvlO6/tOF9YCcUfDZ3Tx9Z//CM7hFnprduHFPekif7jteBc/sXQ31Q==",
"path": "microsoft.data.sqlite.core/7.0.3",
"hashPath": "microsoft.data.sqlite.core.7.0.3.nupkg.sha512"
"sha512": "sha512-FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
"path": "microsoft.data.sqlite.core/7.0.5",
"hashPath": "microsoft.data.sqlite.core.7.0.5.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": {
"type": "package",
@@ -721,19 +730,19 @@
"path": "polly.extensions.http/3.0.0",
"hashPath": "polly.extensions.http.3.0.0.nupkg.sha512"
},
"Sentry/3.29.0": {
"Sentry/3.33.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-0AQbZte9ETORcrLj+gmzZcjbB3UwLl6KmdRVC9mcFfWTPftnSqVrgWDQHR70t2EYK5w6Y1pM8FAFyLDSJWvyRA==",
"path": "sentry/3.29.0",
"hashPath": "sentry.3.29.0.nupkg.sha512"
"sha512": "sha512-8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A==",
"path": "sentry/3.33.0",
"hashPath": "sentry.3.33.0.nupkg.sha512"
},
"Sentry.Serilog/3.29.0": {
"Sentry.Serilog/3.33.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-1g+x8fkoYe3/X6qH2F5hJ6eGkfhGqkMcib0P+dGH6lndnVseP+Lgx8HeO8zk3x3bkS2/GUEV7fn/QnFdh32R4A==",
"path": "sentry.serilog/3.29.0",
"hashPath": "sentry.serilog.3.29.0.nupkg.sha512"
"sha512": "sha512-V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==",
"path": "sentry.serilog/3.33.0",
"hashPath": "sentry.serilog.3.33.0.nupkg.sha512"
},
"Serilog/2.12.0": {
"type": "package",
@@ -742,12 +751,12 @@
"path": "serilog/2.12.0",
"hashPath": "serilog.2.12.0.nupkg.sha512"
},
"Serilog.Enrichers.ClientInfo/1.2.0": {
"Serilog.Enrichers.ClientInfo/1.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZJx2eJQKX6+GxjZM9Y++7DPunR7Nizk9Vdq+BqMs/YPfW3Sv+qDm3PVC88srywJMDKfRaecHFWktBjw5F2pmoQ==",
"path": "serilog.enrichers.clientinfo/1.2.0",
"hashPath": "serilog.enrichers.clientinfo.1.2.0.nupkg.sha512"
"sha512": "sha512-mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==",
"path": "serilog.enrichers.clientinfo/1.3.0",
"hashPath": "serilog.enrichers.clientinfo.1.3.0.nupkg.sha512"
},
"Serilog.Enrichers.GlobalLogContext/3.0.0": {
"type": "package",
@@ -798,6 +807,13 @@
"path": "serilog.sinks.seq/5.2.2",
"hashPath": "serilog.sinks.seq.5.2.2.nupkg.sha512"
},
"SerilogTimings/3.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==",
"path": "serilogtimings/3.0.1",
"hashPath": "serilogtimings.3.0.1.nupkg.sha512"
},
"Speckle.Newtonsoft.Json/13.0.2": {
"type": "package",
"serviceable": true,
@@ -2027,14 +2027,14 @@
<param name="converter"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Models.GraphTraversal.GraphTraversal.Traverse(Speckle.Core.Models.Base)">
<member name="M:Speckle.Core.Models.GraphTraversal.GraphTraversal`1.Traverse(Speckle.Core.Models.Base)">
<summary>
Given <paramref name="root"/> object, will recursively traverse members according to the provided traversal rules.
</summary>
<param name="root">The object to traverse members</param>
<returns>Lazily returns <see cref="T:Speckle.Core.Models.Base"/> objects found during traversal (including <paramref name="root"/>), wrapped within a <see cref="T:Speckle.Core.Models.GraphTraversal.TraversalContext"/></returns>
</member>
<member name="M:Speckle.Core.Models.GraphTraversal.GraphTraversal.TraverseMember(System.Object)">
<member name="M:Speckle.Core.Models.GraphTraversal.GraphTraversal`1.TraverseMember(System.Object)">
<summary>
Traverses supported Collections yielding <see cref="T:Speckle.Core.Models.Base"/> objects.
Does not traverse <see cref="T:Speckle.Core.Models.Base"/>, only (potentially nested) collections.
@@ -23,6 +23,9 @@ PluginImporter:
Exclude WebGL: 0
Exclude Win: 0
Exclude Win64: 0
Exclude WindowsStoreApps: 0
Exclude iOS: 0
Exclude tvOS: 0
- first:
Android: Android
second:
@@ -47,7 +50,7 @@ PluginImporter:
second:
enabled: 1
settings:
CPU: None
CPU: x86_64
- first:
Standalone: OSXUniversal
second:
@@ -74,9 +77,30 @@ PluginImporter:
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
enabled: 1
settings:
CPU: AnyCPU
DontProcess: false
PlaceholderPath:
SDK: AnySDK
ScriptingBackend: AnyScriptingBackend
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: false
CPU: AnyCPU
CompileFlags:
FrameworkDependencies:
- first:
tvOS: tvOS
second:
enabled: 1
settings:
CPU: AnyCPU
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:
@@ -16,46 +16,46 @@
"Objects.dll": {}
}
},
"GraphQL.Client/5.1.1": {
"GraphQL.Client/6.0.0": {
"dependencies": {
"GraphQL.Client.Abstractions": "5.1.1",
"GraphQL.Client.Abstractions.Websocket": "5.1.1",
"GraphQL.Client.Abstractions": "6.0.0",
"GraphQL.Client.Abstractions.Websocket": "6.0.0",
"System.Reactive": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/GraphQL.Client.dll": {
"assemblyVersion": "5.1.1.0",
"fileVersion": "5.1.1.0"
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.0.0"
}
}
},
"GraphQL.Client.Abstractions/5.1.1": {
"GraphQL.Client.Abstractions/6.0.0": {
"dependencies": {
"GraphQL.Primitives": "5.1.1"
"GraphQL.Primitives": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/GraphQL.Client.Abstractions.dll": {
"assemblyVersion": "5.1.1.0",
"fileVersion": "5.1.1.0"
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.0.0"
}
}
},
"GraphQL.Client.Abstractions.Websocket/5.1.1": {
"GraphQL.Client.Abstractions.Websocket/6.0.0": {
"dependencies": {
"GraphQL.Client.Abstractions": "5.1.1"
"GraphQL.Client.Abstractions": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/GraphQL.Client.Abstractions.Websocket.dll": {
"assemblyVersion": "5.1.1.0",
"fileVersion": "5.1.1.0"
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.0.0"
}
}
},
"GraphQL.Primitives/5.1.1": {
"GraphQL.Primitives/6.0.0": {
"runtime": {
"lib/netstandard2.0/GraphQL.Primitives.dll": {
"assemblyVersion": "5.1.1.0",
"fileVersion": "5.1.1.0"
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.0.0"
}
}
},
@@ -128,20 +128,20 @@
}
}
},
"Microsoft.Data.Sqlite/7.0.3": {
"Microsoft.Data.Sqlite/7.0.5": {
"dependencies": {
"Microsoft.Data.Sqlite.Core": "7.0.3",
"Microsoft.Data.Sqlite.Core": "7.0.5",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
"Microsoft.Data.Sqlite.Core/7.0.3": {
"Microsoft.Data.Sqlite.Core/7.0.5": {
"dependencies": {
"SQLitePCLRaw.core": "2.1.4"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Data.Sqlite.dll": {
"assemblyVersion": "7.0.3.0",
"fileVersion": "7.0.323.6302"
"assemblyVersion": "7.0.5.0",
"fileVersion": "7.0.523.16503"
}
}
},
@@ -231,30 +231,27 @@
}
}
},
"Sentry/3.29.0": {
"Sentry/3.33.0": {
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "5.0.0",
"System.Buffers": "4.5.1",
"System.Reflection.Metadata": "5.0.0",
"System.Text.Json": "5.0.2",
"System.Threading.Tasks.Extensions": "4.5.4"
"System.Text.Json": "5.0.2"
},
"runtime": {
"lib/netstandard2.0/Sentry.dll": {
"assemblyVersion": "3.29.0.0",
"fileVersion": "3.29.0.0"
"assemblyVersion": "3.33.0.0",
"fileVersion": "3.33.0.0"
}
}
},
"Sentry.Serilog/3.29.0": {
"Sentry.Serilog/3.33.0": {
"dependencies": {
"Sentry": "3.29.0",
"Sentry": "3.33.0",
"Serilog": "2.12.0"
},
"runtime": {
"lib/netstandard2.0/Sentry.Serilog.dll": {
"assemblyVersion": "3.29.0.0",
"fileVersion": "3.29.0.0"
"assemblyVersion": "3.33.0.0",
"fileVersion": "3.33.0.0"
}
}
},
@@ -266,7 +263,7 @@
}
}
},
"Serilog.Enrichers.ClientInfo/1.2.0": {
"Serilog.Enrichers.ClientInfo/1.3.0": {
"dependencies": {
"Microsoft.AspNetCore.Http": "2.1.1",
"Serilog": "2.12.0"
@@ -359,6 +356,17 @@
}
}
},
"SerilogTimings/3.0.1": {
"dependencies": {
"Serilog": "2.12.0"
},
"runtime": {
"lib/netstandard2.0/SerilogTimings.dll": {
"assemblyVersion": "3.0.1.0",
"fileVersion": "3.0.1.0"
}
}
},
"Speckle.Newtonsoft.Json/13.0.2": {
"runtime": {
"lib/netstandard2.0/Speckle.Newtonsoft.Json.dll": {
@@ -546,33 +554,33 @@
"serviceable": false,
"sha512": ""
},
"GraphQL.Client/5.1.1": {
"GraphQL.Client/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6bfM9qU4AMcFWm4BHd2M6LE5+rLtK47/+VRtypggwb9appC8sbF58ytVBVOKpqKhKpmZERfPLGJap8O/FH3w5w==",
"path": "graphql.client/5.1.1",
"hashPath": "graphql.client.5.1.1.nupkg.sha512"
"sha512": "sha512-8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"path": "graphql.client/6.0.0",
"hashPath": "graphql.client.6.0.0.nupkg.sha512"
},
"GraphQL.Client.Abstractions/5.1.1": {
"GraphQL.Client.Abstractions/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/znG7Lcz3rzG9VSCq+V2ARb63c/uIs8idGOvXyltZ32Wy570GX/I8HNUIZ1yDThmQRJ5KOGSd9Mzk37lFg49rg==",
"path": "graphql.client.abstractions/5.1.1",
"hashPath": "graphql.client.abstractions.5.1.1.nupkg.sha512"
"sha512": "sha512-h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
"path": "graphql.client.abstractions/6.0.0",
"hashPath": "graphql.client.abstractions.6.0.0.nupkg.sha512"
},
"GraphQL.Client.Abstractions.Websocket/5.1.1": {
"GraphQL.Client.Abstractions.Websocket/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-n1gU3GlqJ0jQceb/VEEr4c0D2vpQc5AtDwthK89+yX7VpzlhJKqE5B4RJwx//Jb33mKybfJioWwDgVfSOPAwdw==",
"path": "graphql.client.abstractions.websocket/5.1.1",
"hashPath": "graphql.client.abstractions.websocket.5.1.1.nupkg.sha512"
"sha512": "sha512-Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
"path": "graphql.client.abstractions.websocket/6.0.0",
"hashPath": "graphql.client.abstractions.websocket.6.0.0.nupkg.sha512"
},
"GraphQL.Primitives/5.1.1": {
"GraphQL.Primitives/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-RlGNsv19gbz6sQwkzif9J6Jd148nuIg1kRQf2AFOLp5K00IA+pKMdJvHF5t5llDR52Rok46ynhJv/wg+ps9ZhQ==",
"path": "graphql.primitives/5.1.1",
"hashPath": "graphql.primitives.5.1.1.nupkg.sha512"
"sha512": "sha512-yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==",
"path": "graphql.primitives/6.0.0",
"hashPath": "graphql.primitives.6.0.0.nupkg.sha512"
},
"Microsoft.AspNetCore.Http/2.1.1": {
"type": "package",
@@ -616,19 +624,19 @@
"path": "microsoft.csharp/4.7.0",
"hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
},
"Microsoft.Data.Sqlite/7.0.3": {
"Microsoft.Data.Sqlite/7.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-uumx0bb4FsN7ApP0ZoQDfSJi9c2Xen0PlXCT2BF27cM+yUMFzDEhqxR7/1/DV8ck4mYtL9yShBoOa7jeJ3736w==",
"path": "microsoft.data.sqlite/7.0.3",
"hashPath": "microsoft.data.sqlite.7.0.3.nupkg.sha512"
"sha512": "sha512-KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
"path": "microsoft.data.sqlite/7.0.5",
"hashPath": "microsoft.data.sqlite.7.0.5.nupkg.sha512"
},
"Microsoft.Data.Sqlite.Core/7.0.3": {
"Microsoft.Data.Sqlite.Core/7.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pCmzLLWTIrIv94o7JtQ1qcPD0oc1YNY9XvlO6/tOF9YCcUfDZ3Tx9Z//CM7hFnprduHFPekif7jteBc/sXQ31Q==",
"path": "microsoft.data.sqlite.core/7.0.3",
"hashPath": "microsoft.data.sqlite.core.7.0.3.nupkg.sha512"
"sha512": "sha512-FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
"path": "microsoft.data.sqlite.core/7.0.5",
"hashPath": "microsoft.data.sqlite.core.7.0.5.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": {
"type": "package",
@@ -707,19 +715,19 @@
"path": "polly.extensions.http/3.0.0",
"hashPath": "polly.extensions.http.3.0.0.nupkg.sha512"
},
"Sentry/3.29.0": {
"Sentry/3.33.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-0AQbZte9ETORcrLj+gmzZcjbB3UwLl6KmdRVC9mcFfWTPftnSqVrgWDQHR70t2EYK5w6Y1pM8FAFyLDSJWvyRA==",
"path": "sentry/3.29.0",
"hashPath": "sentry.3.29.0.nupkg.sha512"
"sha512": "sha512-8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A==",
"path": "sentry/3.33.0",
"hashPath": "sentry.3.33.0.nupkg.sha512"
},
"Sentry.Serilog/3.29.0": {
"Sentry.Serilog/3.33.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-1g+x8fkoYe3/X6qH2F5hJ6eGkfhGqkMcib0P+dGH6lndnVseP+Lgx8HeO8zk3x3bkS2/GUEV7fn/QnFdh32R4A==",
"path": "sentry.serilog/3.29.0",
"hashPath": "sentry.serilog.3.29.0.nupkg.sha512"
"sha512": "sha512-V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==",
"path": "sentry.serilog/3.33.0",
"hashPath": "sentry.serilog.3.33.0.nupkg.sha512"
},
"Serilog/2.12.0": {
"type": "package",
@@ -728,12 +736,12 @@
"path": "serilog/2.12.0",
"hashPath": "serilog.2.12.0.nupkg.sha512"
},
"Serilog.Enrichers.ClientInfo/1.2.0": {
"Serilog.Enrichers.ClientInfo/1.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZJx2eJQKX6+GxjZM9Y++7DPunR7Nizk9Vdq+BqMs/YPfW3Sv+qDm3PVC88srywJMDKfRaecHFWktBjw5F2pmoQ==",
"path": "serilog.enrichers.clientinfo/1.2.0",
"hashPath": "serilog.enrichers.clientinfo.1.2.0.nupkg.sha512"
"sha512": "sha512-mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==",
"path": "serilog.enrichers.clientinfo/1.3.0",
"hashPath": "serilog.enrichers.clientinfo.1.3.0.nupkg.sha512"
},
"Serilog.Enrichers.GlobalLogContext/3.0.0": {
"type": "package",
@@ -784,6 +792,13 @@
"path": "serilog.sinks.seq/5.2.2",
"hashPath": "serilog.sinks.seq.5.2.2.nupkg.sha512"
},
"SerilogTimings/3.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==",
"path": "serilogtimings/3.0.1",
"hashPath": "serilogtimings.3.0.1.nupkg.sha512"
},
"Speckle.Newtonsoft.Json/13.0.2": {
"type": "package",
"serviceable": true,
@@ -19,6 +19,16 @@
Name of parent alignment if this is an offset alignment
</summary>
</member>
<member name="P:Objects.BuiltElements.Civil.CivilProfile.pvis">
<summary>
Points of vertical intersection
</summary>
</member>
<member name="P:Objects.BuiltElements.Civil.CivilProfile.parent">
<summary>
Name of parent profile if this is an offset profile
</summary>
</member>
<member name="M:Objects.BuiltElements.Area.#ctor(System.String,System.String,Objects.BuiltElements.Level,Objects.Geometry.Point)">
<summary>
SchemaBuilder constructor for a Room
@@ -1,9 +1,9 @@
{
"name": "systems.speckle.speckle-unity",
"version": "2.14.2",
"version": "2.15.0",
"displayName": "Speckle Unity Connector",
"description": "AEC Interoperability for Unity through Speckle",
"unity": "2018.4",
"unity": "2020.1",
"documentationUrl": "https://speckle.guide/user/unity.html",
"changelogUrl": "https://speckle.systems/blog/",
"license": "Apache-2.0",
+19 -15
View File
@@ -5,12 +5,14 @@
[![Twitter Follow](https://img.shields.io/twitter/follow/SpeckleSystems?style=social)](https://twitter.com/SpeckleSystems) [![Community forum users](https://img.shields.io/discourse/users?server=https%3A%2F%2Fdiscourse.speckle.works&style=flat-square&logo=discourse&logoColor=white)](https://discourse.speckle.works) [![website](https://img.shields.io/badge/https://-speckle.systems-royalblue?style=flat-square)](https://speckle.systems) [![docs](https://img.shields.io/badge/docs-speckle.guide-orange?style=flat-square&logo=read-the-docs&logoColor=white)](https://speckle.guide/user/unity.html)
## Introduction
This repo holds Speckle's Unity Connector + a sample project (Speckle playground). This connector is currently in an Alpha stage.
This connector is meant to be used by developers, it doesn't have an elaborated UI but it offers convenience methods to send and receive data. The connector uses our [Speckle .NET SDK](https://github.com/specklesystems/speckle-sharp).
This repo holds Speckle's Unity Connector package + a sample project (Speckle playground).
The package offers several Unity Components to send and receive data from Speckle, and allows developers to easily develop their own components and features.
It has a simple UI, and is missing some of the comforts present in other connectors.
The connector uses our [Speckle .NET SDK](https://github.com/specklesystems/speckle-sharp).
![unity](https://user-images.githubusercontent.com/2679513/108543628-3a83ff00-72dd-11eb-8792-3d43ce54e6af.gif)
@@ -20,26 +22,28 @@ If you are enjoying using Speckle, don't forget to ⭐ our [GitHub repositories]
and [join our community forum](https://speckle.community/) where you can post any questions, suggestions, and discuss exciting projects!
## Notice
We support Unity 2020 and 2021 (newer versions likely work, but aren't currently part of our test pipeline).
We officially support Unity 2021.3 or newer.
Features:
- Receive Speckle Objects at Editor or Runtime
- Send Speckle Objects at Runtime (editor support in the works!)
- Send Speckle Objects at Editor or Runtime
- Material override/substitution
- Automatic receiving changes
Currently tested on Windows and MacOS. Experimental support for Android [in the works](https://github.com/specklesystems/speckle-unity/issues/68).
Currently tested on Windows, Linux, and MacOS.
## Sample project
This repo holds a simple sample project (Speckle Playground). Simply [download this repo](https://github.com/specklesystems/speckle-unity/archive/refs/heads/main.zip)
or clone with git, and open in Unity 2020.3.
Android will work [with some signficant limitations](https://github.com/specklesystems/speckle-unity/issues/68), and other platforms likly work with similar limitations.
## Sample Project
This repo holds a simple sample project (Speckle Playground), containing an example GUI (UnityUI) for fetching stream/branch data, and sending/receiving geometry to/from Speckle.
Simply [download this repo](https://github.com/specklesystems/speckle-unity/archive/refs/heads/main.zip)
or clone with git, and open in Unity 2021.3 or newer.
```
git clone https://github.com/specklesystems/speckle-unity.git
```
The sample project contains an example GUI (UnityUI) for fetching stream/branch data, and receiving/sending geometry to Speckle.
## Installation
## Installation (Package)
To install the connector into your own Unity project (rather than using the sample project), open the Package Manager (`Windows -> Package Manager`)
and select **Add Package from git URL**. (requires [git](https://git-scm.com/downloads) installed)
@@ -59,18 +63,18 @@ We encourage everyone interested to hack / contribute / debug / give feedback to
### Requirements
- Unity 2020.3+
- Unity 2021 or greater
- Have created an account on [speckle.xyz](https://speckle.xyz) (or your own server)
- Installed [Speckle Manager](https://speckle.guide/user/manager.html) (recommended, otherwise you'll need to implement your own authentication system in Unity)
### Dependencies
All dependencies to Speckle Core have been included; compiled in the Asset folder until we figure out how to best reference Core.
All dependencies to Speckle Core have been included; compiled in `systems.speckle.speckle-unity` package.
## Contributing
Please make sure you read the [contribution guidelines](.github/CONTRIBUTING.md) for an overview of the best practices we try to follow.
Please make sure you read the [contribution guidelines](https://github.com/specklesystems/speckle-sharp/blob/main/.github/CONTRIBUTING.md) for an overview of the best practices we try to follow.
## License