Normcore Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[2.7.2] - 2024-01-16
Fixed
- Fix a bug where child scene views could get assigned a scene view UUID in another scene via a prefab reference.
[2.7.1] - 2024-01-16
Fixed
- Fix issue where RealtimeModel and RealtimeView do not fire ownerIDSelfDidChange on client requesting ownership.
- Improved documentation around Realtime/Room time value being a linux epoch timestamp.
[2.7.0] - 2024-01-11
Added
- Add support for visionOS and visionOS Simulator.
- Add error diagnostic for RealtimeProperty names without a leading underscore, which can cause name collisions with the generated model.
[2.6.4] - 2023-12-13
Added
- Add a warning to Realtime and NormcoreAppSettings inspectors if the app key is not a valid UUID format.
[2.6.3] - 2023-12-11
Added
- Add API to request ownership of RealtimeView and all child views and components.
Fixed
- Fix issue where macOS Sonoma would fail to verify code signature of native plugin.
[2.6.2] - 2023-12-07
Fixed
- Fix bug where model and collection write stream length could be cached incorrectly causing delta updates on unreliable properties to throw an exception on connections with very high latency.
[2.6.1] - 2023-10-20
Fixed
- Fix issue with RealtimeSet/RealtimeArray/RealtimeDictionary returning an incorrect count/enumerator after deserializing a full model.
[2.6.0] - 2023-10-17
Added
- Add explicit error diagnostic for invalid model property type, but skip model source generation for that property.
[2.6.0-rc.3] - 2023-09-28
Fixed
- Fix issue in Unity 2023 where setting velocity on kinematic rigidbodies creates a warning.
[2.6.0-rc.2] - 2023-09-27
Changed
- Updated transport congestion controller to improve packet transport on connections with high packet loss, latency, and jitter.
[2.6.0-rc.1] - 2023-09-18
Fixed
- Fix issue where model source gen allows models to use reserved property ID 0. Using property ID 0 will now cause a compiler error.
Changed
- Add local cache to Realtime collections to improve enumerator performance.
[2.6.0-rc.0] - 2023-09-06
Added
- Add ping API to Realtime and Room classes to fetch the local client’s ping.
[2.5.2] - 2023-09-11
Fixed
- Fix issue where iOS builds would reference a missing _ClientGetPing symbol
[2.5.1] - 2023-09-08
Fixed
- Fix issue where model source gen generates incorrect code for OnDidReadProperties callbacks.
[2.5.0] - 2023-09-05
[2.5.0-rc.5] - 2023-09-01
Fixed
- Fix issue where model source gen fails on autogenerated child models.
[2.5.0-rc.4] - 2023-08-30
Added
- Add error diagnostics to model source generators for non-partial classes and duplicate property IDs. RealtimeModel source generation will skip model declarations with error diagnostics.
Fixed
- Fix issue where model source gen fails on empty model classes.
[2.5.0-rc.3] - 2023-08-04
Changed
- Update Normcore native plug-in to include performance improvements to congestion control and packet transmission.
[2.5.0-rc.2] - 2023-06-26
Added
- In Unity 2021 or newer, replace RealtimeModel codegen with Roslyn source generators. This fixes partially deleted RealtimeModel properties preventing recompilation of the model.
Changed
- Rearrange assemblies, move avatar and audio code into respective asmdef assemblies.
[2.5.0-rc.1] - 2023-06-07
Fixed
- Fix issue where removing models from RealtimeSet would throw a serialization exception if the model has unreliable properties that were updated after the model was removed from the collection, but before the server had confirmed removal.
[2.5.0-rc.0] - 2023-06-01
Changed
- Move
RealtimeAvatar
default execution order from -95 to -90 to remove ambiguity withRealtimeTransform
. - Mark
Normal.Utility.ExecutionOrder
as obsolete and replace uses withUnityEngine.DefaultExecutionOrder
. - Move execution order consts in
RealtimeExecutionOrder
into their respective monobehaviours.
[2.4.2] - 2023-05-22
[2.4.2-rc.3] - 2023-04-12
Fixed
- Fix performance regression from
RealtimeTransform
incorrectly waking rigidbodies in 2.4.2-rc.2.
[2.4.2-rc.2] - 2023-03-29
Fixed
- Fix issue where kinematic and non-kinematic rigidbodies could behave differently on remote clients.
[2.4.2-rc.1] - 2023-03-28
Added
- Add PlayStation native plugin.
[2.4.2-rc.0] - 2023-01-26
Fixed
- Fix bug where Normcore will log a CloseAudioStream error message on disconnect.
[2.4.1] - 2022-12-01
Fixed
- Fix bug where toggleable warning containers could be null after domain reloading.
- Fix crash on M1 Macs when using Normcore with Rosetta. AVX instruction support is now detected at runtime.
- Fix bug where RealtimeAvatarVoice will attempt to use echo cancellation on Oculus devices that are using the OpenXR backend.
[2.4.0] - 2022-11-09
[2.4.0-rc.1] - 2022-11-09
Fixed
- Fix unnecessary garbage allocation in OnDidReadProperties model callbacks, including RealtimeTransformModel.
[2.3.2-rc.1] - 2022-09-06
Fixed
- Fix bug where RealtimeView scene view lifetime flags were not correctly migrated from obsolete serialized properties.
[2.3.1] - 2022-09-06
[2.3.1-rc.1] - 2022-08-17
Fixed
- Fix bug where Unity could initialize Normcore before ScriptableObject Types were properly loaded.
[2.3.0] - 2022-07-29
[2.3.0-rc.4] - 2022-07-19
Fixed
- Fix bug where
RealtimeTransform
could get initialized incorrectly on remote clients. - Automatically reject room names that are longer than 512 characters instead of waiting for the server to reject them.
[2.3.0-rc.3] - 2022-06-13
Added
- Add toggle in
Window/Normcore/Warnings
to silence warnings about no Realtime instances in the scene. - Add
RealtimeView#didReplaceAllComponentModels
event, emitted after a view has visited & replaced all of its component models. - Change position/rotation/scale sync masking on RealtimeTransform to be networked properties.
- Add
RealtimeTransform#SyncPosition(bool)
,RealtimeTransform#SyncRotation(bool)
,RealtimeTransform#SyncScale(bool)
for changing the sync mask at runtime. - Add
RealtimeTransform#isSyncingTransform
andRealtimeTransform#SyncTransform(bool)
for managing the position/rotation/scale sync masks at the same time.
Fixed
- Fix bug where unowned rigidbodies never go to sleep.
[2.3.0-rc.2] - 2022-05-18
Added
- Expose ReadStruct/WriteStruct serialization methods for all supported types.
[2.3.0-rc.1] - 2022-05-09
Added
- Add Room.ConnectOptions API for passing options to connect operations on Realtime and Room.
- Add support for Normcore Private webhooks via the public SDK.
- Expose ReadStruct/WriteStruct serialization methods for all supported types.
[2.2.3] - 2022-04-18
Fixed
- Fix incompatible import in Unity 2021 and newer.
[2.2.2] - 2022-04-13
Fixed
- Fix DLL collision issue in Android builds.
- Fix Android arm64 native plugin meta file in Unity 2018.
[2.2.1] - 2022-04-12
Added
- Add
RealtimeView#ownerIDSelfDidChange
,RealtimeComponent<T>#ownerIDSelfDidChange
, andRealtimeModel#ownerIDSelfDidChange
events.
Fixed
- Fix bug where negative sbyte could serialize with incorrect length.
- Fix incompatible import in Unity 2021 and newer.
[2.1.11] - 2022-02-03
Fixed
- Improve RealtimeAvatarVoice.Update() performance by improving the audio encoder locking mechanism in the native plugin.
[2.1.10] - 2021-10-13
Fixed
- Fix bug where calling the Room.Connect API directly would result in a null RealtimePrefabDelegate implementation instead of the default.
[2.1.9] - 2021-09-26
Fixed
- Fix bug where RealtimeTransform would set local transform instead of world transform after instantiation.
- Fix race condition where a property update that occurs locally before a previous in-flight update is received would cause the model value to flip back to the in-flight value.
[2.1.8] - 2021-07-22
Fixed
- Fix a ReadStream exception that could be thrown when two clients attempt to connect to the same room at the exact same time.
[2.1.7] - 2021-07-17
Added
- Add support for arm64 / Apple Silicon builds on macOS.
[2.1.6] - 2021-07-14
Fixed
- Improve OnAudioFilterRead performance for devices with bad memory barrier performance. (namely Oculus Quest 1)
- Tweak Opus DTX settings to be more bandwidth efficient.
[2.1.5] - 2021-06-02
Fixed
- Fix bug with double deserialization.
[2.1.4] - 2021-06-02
Added
- Add error log if
Realtime#Connect
is called after the Realtime instance as been destroyed.
Fixed
- Fix bug where instantiating and destroying a realtime prefab before it was confirmed by the server would cause a serialization exception.
- Fix bug in Realtime.Instantiate() that would cause destroyWhenX APIs to not function correctly when trying to make objects persist.
- Fix inspector drawing scene view controls on prefab views.
[2.1.3] - 2021-05-26
Fixed
- Remove log level DLL variants that were preventing Unity from building on Android.
[2.1.2] - 2021-05-25
Fixed
- Fix infinite recursion in
RealtimeViewEditor
.
[2.1.1] - 2021-05-25
Fixed
- Fix native bundle issue on Mac.
[2.1.0] - 2021-05-25
Added
- Add
RealtimeModel#room
andRealtimeModel#isRoomConnected
getters for easier room access from models. - Add
RealtimeView#isPrefabView
andRealtimeView#isSceneView
getters for checking child views. - Add
RealtimeView#GetParentView()
andRealtimeView#GetRootView()
for finding the parent/root views of a view. - Add
TryGetValue
,ContainsKey
, andContains
to RealtimeDictionary. - Add
destroyWhenOwnerLeaves
anddestroyWhenLastClientLeaves
toRealtimeView
andRealtimeModel
. - Add new
Realtime.Instantiate
signature withRealtime.InstantiateOptions
parameter. - Add error log when lifetime flags are modified on a model with no meta-model.
- Add
joinRoomOnStart
androomToJoinOnStart
getters so that applications can query whetherRealtime
is configured to join a room on start. - Add “Destroy” button to the RealtimeView inspector on the root realtime view of a prefab to make it easier to clean up persistent realtime prefabs.
- Add multi-object editing support to the RealtimeTransform inspector.
- Add inline documentation to all public C# APIs and include XML docs file for C# IDEs.
- Add
IRealtimePrefabLoadDelegate
andIRealtimePrefabInstantiateDelegate
interfaces to support hooking realtime prefab loading and instantiation. - Add property serializer classes to simplify autogenerated model code and improve memory/performance.
Changed
- Change
Realtime#Connect
to go into an error state if the room name or app key is empty. - Update
RealtimeAvatarVoice
to automatically request microphone permissions on Android. - Change
RealtimeModel#isPersistent
to use current ownership to determine if it is persistent. - Realtime collections now throw an error if the child model already exists in the datastore.
- Unsupported versions of
Realtime.Instantiate
andRealtime.Destroy
now create compiler errors. - Deprecate
Realtime.Instantiate
overloads that usedestroyWhenOwnerOrLastClientLeaves
. - Deprecate
destroyWhenOwnerOrLastClientLeaves
, which can cause a scene view to be destroyed while clients are still in the room. The property has been split intodestroyWhenOwnerLeaves
anddestroyWhenLastClientLeaves
. Old clients setting the deprecated property will still work, but they will not see changes from the new properties. Use the newRealtime.Instantiate
method signature to instantiate prefabs with the split lifetime flags.
Fixed
- Fix issue with
RealtimeView#destroyWhenOwnerOrLastClientLeaves
not forwarding the setter to the model. - Fix issue with high CPU usage in
RealtimeAvatarVoice
on Quest and Quest 2. - Fix issue with
RealtimeSet
where serializing a newly created collection for the first time will only send one item to the server. - Fix issue where
RealtimeView
on a deeply nested game object could end up as the child to two parent views. - Fix
StringKeyDictionary
enumerator signature to iterate through string keys instead of internal ID keys. - Fix issue where calling
Realtime#Connect
inside ofRealtime#didConnectToRoom
event handler would crash Unity. - Fix issue where datastore snapshots larger than 125kb would prevent a new client from connecting to a room.
- Fix issue where
Realtime
would try to destroy null game objects after scene unloads. - Fix issue where Normcore 1 migration window would show on new projects.
- Fix
SimpleJSON
to use allSystem
namespace types explicitly to avoid conflicts if a type with the same name is defined in the global namespace. - Fix issue in native plug-in that would cause occasional crashes on macOS when connecting to a room.
- Fix issue where the internal settings asset would throw an exception while the asset database was loading.
- Fix warning in RealtimeAvatarManager about using deprecated API.
Removed
- Remove public parent constructor from autogenerated
RealtimeModel
code.
[2.0.3] - 2020-11-13
Fixed
- Fix exception on
RealtimeSet#modelRemoved
when event is null. - Fix issue introduced in 2.0.2 with
RealtimeTransform
on scene views not initializing correctly.
[2.0.2] - 2020-11-09
Added
- Add
preventOwnershipTakeover
anddestroyWhenOwnerOrLastClientLeaves
properties toRealtimeView
. - Add support for macOS 10.13 & 10.14 (High Sierra & Mojave).
- Notarize native plugin on macOS.
Fixed
- Add Lumin SDK to list of supported platforms for native plugin to fix Magic Leap support.
- Fix null
realtimeView
references on disabled game objects.
[2.0.1] - 2020-10-26
Added
- Add “Never Ask Again” option when Normcore alerts you to a new version.
Fixed
- Fix thread error when a
RealtimeTransform
is garbage collected off the main thread.
[2.0.0] - 2020-10-16
Initial changelog release.