GVR SDK for Unity v1.150.0

@rusmaxham rusmaxham released this Jul 3, 2018

Multiple controller support

  • New GvrControllerInputDevice class for accessing controllers, accessible via GvrControllerInput.GetDevice(GvrControllerHand hand).
  • New GvrControllerInput.OnDevicesChanged event to handle changes in GvrControllerInputDevice instances. Old instances will be marked invalid and error when used. When this event fires, re-fetch the desired GvrControllerInputDevice from GvrControllerInput.GetDevice(). New handlers added to this event will be called immediately upon adding.
  • New GvrControllerHand enum for specifying handedness.
    • Values: Right, Left, Dominant, NonDominant.
    • Dominant controller will always be present on single and multiple controller systems and will map to the Right or Left controller depending on the handedness system prefrerence setting (GvrSettings.Handedness).
  • New GvrControllerButton enum for specifying controller buttons. Values can be OR'ed together to create a multi-button mask.
  • New GvrTrackedController.ControllerHand property to specify which hand GvrTrackedController tracks.
  • New IGvrControllerInputDeviceReceiver interface. Script components that that implement this receiver interface and are children of GvrTrackedController or children of the object set in GvrTrackedController.ArmModel will receive callbacks when the tracked controller initializes or changes its device instance.
  • GvrControllerPointer prefab defaults to Dominant controller.
    • The prefab will automatically track the Daydream controller on devices that only support one controller.
    • To develop for devices that support two controllers, add a second prefab instance to your scene and change the hand property to NonDominant.
  • HelloVR scene now has two GvrControllerPointer game objects for Dominant and NonDominant hands.
    • On devices that only support a single controller, only the Dominant controller will be activated at runtime.
  • DemoSceneManager prefab updated for 2 controllers.
  • DemoInputManager's ControllerPointers property is now an array to handle multiple controllers. Since there can only be one pointer at a time, DemoInputManager activates the single pointer on the last controller the user clicked the App or TouchPadButton button.
  • Generally, when upgrading from obsolete GvrControllerInput methods to GvrControllerInputDevice methods, you will need to consider how best to get GvrControllerInputDevice instance updates. If your component will be a child of GvrTrackedController, then your component should implement the IGvrControllerInputDeviceReceiver interface to receive device instance updates from GvrTrackedController. This has the advantage that your component will automatically get the GvrControllerInputDevice of the hand for which the parent GvrTrackedController is configured. If your component lives outside of GvrTrackedController you can either fetch a device instance every time you need one from GvrControllerInput.GetDevice(), or register an event hander for GvrControllerInput.OnDevicesChanged to receive callbacks when device instances change and cache the result of a call to GvrControllerInput.GetDevice().

Breaking changes

None.

Deprecations

  • Most of the static GvrControllerInput methods and properties have been deprecated. Replacement methods and properties can be accessed on the new GvrControllerInputDevice instances:
    • The following static properties are available, with the same name, as GvrControllerInputDevice instance properties:
      • OnStateChanged
      • State
      • Orientation
      • Gyro
      • Accel
      • ErrorDetails
      • StatePtr
      • IsCharging
      • BatteryLevel
    • The following static properties have been deprecated and are replaced by a single TouchPos instance property on GvrControllerInputDevice that returns center relative touch coordinates:
      • GvrControllerInput.TouchPosCentered (center is (0, 0)) -> TouchPos (center is (0, 0))
      • GvrControllerInput.TouchPos (top-left is (0, 0)) -> TouchPos on GvrControllerInputDevice (center is (0, 0))
    • The following static methods have been replaced by similarly named GvrControllerInputDevice instance methods. Method names have been changed for consistency with Unity's Input API:
      • GvrControllerInput.IsTouching() -> GetButton(GvrControllerButton.TouchPadTouch)
      • GvrControllerInput.TouchDown() -> GetButtonDown(GvrControllerButton.TouchPadTouch)
      • GvrControllerInput.TouchUp() -> GetButtonUp(GvrControllerButton.TouchPadTouch)
      • GvrControllerInput.ClickButton() -> GetButton(GvrControllerButton.TouchPadButton)
      • GvrControllerInput.ClickButtonDown() -> GetButtonDown(GvrControllerButton.TouchPadButton)
      • GvrControllerInput.ClickButtonUp() -> GetButtonUp(GvrControllerButton.TouchPadButton)
      • GvrControllerInput.AppButton() -> GetButton(GvrControllerButton.App)
      • GvrControllerInput.AppButtonDown() -> GetButtonDown(GvrControllerButton.App)
      • GvrControllerInput.AppButton() -> GetButtonUp(GvrControllerButton.App)
      • GvrControllerInput.HomeButtonDown() -> GetButtonDown(GvrControllerButton.System)
      • GvrControllerInput.HomeButtonState() -> GetButton(GvrControllerButton.System)

Behavioral changes

  • HeadsetDemoManager debug logging of safety region and floor height is now off by default.

Other changes

  • Added support for positionally tracked headsets in Instant Preview.
  • Updated bundled lib GVR for Android to v1.150.0.
  • Fixed IPreprocessBuild and IPostrocessBuild obsolete warnings in Unity 2018.x.
  • Added null checks on safetyRing in HeadsetDemoManager.
  • Added source code for native libs gvr-exoplayersupport, gvr-keyboardsupport, gvr-permissionsupport, and video_plugin to the git repo. Addresses issues 437 and 556.

Experimental features

Bug fixes

  • Fixed issue 822 where the permission request could result in a crash after the permission had been granted.
  • Fixed issue 835. The GvrEditorEmulator was previously allocating memory every frame, and should now only allocate on Awake().
  • Fixed issue 865 where GvrVRHelpers.GetHeadRotation() didn't work with Instant Preview.
  • Fixed issue 888. Added a console warning when trying to use a GvrTrackedController without a GvrControllerInput.
  • Fixed issue 917 where using GVRKeyboard when building with IL2CPP would throw NotSupportedException.
  • Fixed issue 918 where adding a new GVRKeyboard component after destroying one will cause a crash.
  • Fixed the pointer reticle not showing up properly on all of the demo scenes that use the CubeRoom prefab.
  • Fixed missing Instant Preview newlines characters in standard output and standard error console messages.

GVR SDK for Unity v1.130.1

@rusmaxham rusmaxham released this Mar 17, 2018 · 1 commit to master since this release

Bug fixes

* Fixed build error (issue 877) when Unity iOS player support is not installed.

GVR SDK for Unity v1.130.0

@rusmaxham rusmaxham released this Mar 16, 2018 · 2 commits to master since this release

Breaking changes

  • None

Deprecations

  • None

Behavioral changes

  • Using the Google VR keyboard no longer disables positional headtracking on Standalone headsets. Removed InputTracking.disablePositionalTracking = true from the AndroidNativeKeyboardProvider constructor.

Other changes

  • Changed the default value for maxReticleDistance on GvrReticlePointer from 10.0f to 20.0f.
  • Fix compilation errors (issue 861) in Unity 2018.1 and newer.
  • Fix compile time warnings due to member hiding inerherited member.
  • Updated bundled lib GVR for Android to v1.130.0.

Bug fixes

  • Fix iOS crash when trying to use camera to scan QR codes (issue 326). Added build postprocessor to add NSCameraUsageDescription to Info.plist.
  • GVR keyboard now sends touch updates, fixes CJK language suggestions bar.
  • Fixed permission flow samples to prevent leaking ServiceConnection to Google VR Services by properly closing DaydreamApi instance.
  • Fix InstantPreview APK version check, so that previously installed APKs are correctly updated by newer ones.

GVR SDK for Unity v1.120.0

@rusmaxham rusmaxham released this Jan 10, 2018 · 5 commits to master since this release

Breaking changes

  • None

Deprecations

  • The GvrAudio* components remain deprecated in Unity 2017.1 or later. However, the SDK no longer displays deprecation warnings in Unity 5.6, as upgrading to Resonance Audio (developers.google.com/resonance-audio/migrate) requires Unity 2017.1 or later.

Behavioral changes

  • The Daydream controller dynamic tooltip graphics provided by the GvrControllerTooltipsTemplate prefab have been updated to match the simple tooltip graphics provided by the GvrControllerTooltipsSimple prefab.

Other changes

  • Added a setter (issue #813, PR #814) to the GvrKeyboard EditorText.
  • Added new prefab developer reference documentation.
  • GVRDemo has been updated and renamed to HelloVR with refreshed assets and safety cylinder visualization on Standalone devices.
  • Controller assets have been updated to a more optimized mesh and updated texture.
  • Updated bundled lib GVR for Android to v1.120.0.
  • Added CurrentDistance readonly property to class GvrLaserVisual.
  • Added SetControllerTexture method to class GvrControllerVisual to toggle it at runtime.
  • Updated README to link to https://github.com/googlevr/gvr-unity-sdk/releases for latest SDK and release notes.

Bug fixes

  • Fixed issue #778 where GvrEditorEmulator would not function without the GvrControllerMain prefab in the scene.
  • Fixed a bug where calling GvrCardboardHelpers.Recenter would not recenter GvrEditorEmulator in the editor.
  • Fixed issue resonance-audio/resonance-audio-unity-sdk#7 where the GvrAudio* components would cause a crash in the Unity Editor when the target platform is selected to iOS.

GVR SDK for Unity v1.110.0

@rusmaxham rusmaxham released this Nov 8, 2017 · 6 commits to master since this release

Breaking changes

  • The ScrollingUIDemo has been removed from the SDK. It is still available via Daydream Elements, and will continue to be maintained there.

Deprecations

Behavioral changes

  • No longer print a build time error message when building for Android when a non-GVR VR SDK is included in Player Settings > Android > Virtual Reality SDKs.

Other changes

  • Auto API updater no longer needed to update UnityEngine.VR to UnityEngine.XR when using Unity 2017.2 or later.
  • Consolidated various "cardboard" and "daydream" string constants into GvrSettings.VR_SDK_{CARDBOARD|DAYDREAM}.
  • Bundled lib GVR for Android v1.101.0.

Bug fixes

  • Moved all demo code to their own namespaces to avoid naming conflicts with developer code. Fixed issue #734.
  • Fixed a bug in the Arm Model where the torso direction wouldn't be reset to the gaze direction when a recenter occurs -or- the GvrArmModel's OnEnable() is called.
  • Fixed an editor bug where GvrEditorEmulator would be updated in the middle of a frame, meaning it was non-deterministic when a recenter would be applied to the editor head rotation.
  • Fixed an editor bug where the neck model would not be applied until one frame after the recenter event.
  • Fixed an editor bug where GvrArmModel would throw an exception in OnDrawGizmosSelected when placed at the root of the scene hierarchy.
  • Fixed several issues with the GvrRecenterOnlyController script.
    • Fixed an issue where recentering would cause the controller's laser to point in the wrong direction.
    • Orientation changes are now handled using localRotation so that this won't clobber the initial rotation on any parent objects.
    • Orientation changes are now relative, so the initial rotation of the transform will be maintained through re-center events.
  • Fixed an Instant Preview bug (gvr-instant-preview issue 11) where disabling and enabling cameras would unnecessarily create new eye cameras.
  • Fixed cube room texture import settings for iOS and Standalone. Shrunk texture image down to save 1.5MB.
  • Fixed Instant Preview version inconsistencies which caused the apk to be constantly reinstalled. New version of plugin and apk is 1.1.0 for both Windows and OSX.
  • Fixed a bug where requesting permissions would display the app's name inside a box for a second before popping up the permission request.
  • Fixed a bug in GvrHeadset that would prevent Standalone (6DoF) APIs from working.

GVR SDK for Unity v1.100.1

@rusmaxham rusmaxham released this Oct 13, 2017 · 10 commits to master since this release

Bug fixes

  • Fixes "MissingReferenceException: The object of type 'GvrTrackedController' has been destroyed but you are still trying to access it." error caused by GvrTrackedController registering a callback for GvrControllerInput.OnStateChanged twice, while only disconnecting once.

GVR SDK for Unity v1.100.0

@rusmaxham rusmaxham released this Oct 7, 2017 · 11 commits to master since this release

Breaking changes

  • The broken GvrFPS prefab and script have been removed. See issue 674.
    Daydream app developers are encouraged to use Performance HUD instead.

Deprecations

  • GvrControllerInput's Recentering property has been deprecated. This property will be removed in an upcoming release. Note, this property has already been returning false for some time.

Behavioral changes

  • The default raycast mode is now Hybrid, instead of Camera.
    • With Hybrid raycast mode, introduced in v1.70, the laser is only fully shown when the reticle intersects with something closer than maxLaserDistance.
    • Hybrid raycast mode avoid mismatches between the laser and the reticle when using a camera based ray. It smoothly transitions between Camera and Direct modes, shrinking the laser towards the reticle, based on the angle between the actual reticle position, and the forward direction of the pointer. The laser shrinking behavior is controlled by the shrinkLaser property of GvrLaserVisual. The raycast mode is controlled by GvrLaserPointer.
    • The GvrLaserPointer inspector view provides Hybrid, Camera, and Direct mode buttons which update the laser to the recommended settings for each raycast mode.
  • When using the mouse or trackpad to emulate head or controller momevement, the mouse cursor is locked, so it doesn't escape the Game view. Based on PR 738.
  • The controller state is updated at the start of each frame, rather than at the end. This should reduce input and controller latency, as well as guarantee that input state remains consistent during a frame.
  • Improved GvrEventSystem's touchpad scroll sensitivity. Touch direction threshold is now per-axis, so it is easier to scroll in only one direction, without accidentally scrolling in the perpendicular direction.
  • Removed the dummy camera from GvrControllerPointer prefab. Instead, GvrPointerGraphicRaycaster automatically adds a dummy camera at runtime if required.

Other changes

  • Instant Preview in now included as part of the SDK. Simply add the new GvrInstantPreviewMain prefab to your scene and attach your Android development phone to preview your Daydream app on your phone, while your app runs in the editor.

  • Removed GvrBaseControllerVisual class.

  • Removed GvrFollowControllerPose and merged its functionality into GvrTrackedController.

  • GvrLaserVisual has been updated:

    • Reticle functionality has been separated into the new GvrControllerReticleVisual class.
    • Fixed a bug where the reticle wasn't visible if the laser LineRenderer was turned off, which casued OnWillRenderObject to not be called.
    • Fixed a bug where the reticle was being incorrectly rotated/scaled when explicitly calling Camera.Render() for special effects.
    • Exposed new Size Meters and Is Size Based On Camera Distance tuning properties to make it easier to control the size of the reticle.
  • GvrTrackedController exposes a new IsDeactivatedWhenDisconnected property which is settable at runtime via script.

  • Improved controller rendering performance by updating shader to use vertex colors and saturate, so it is branchless.

  • Cardboard reticle maxReticleDistance property is now tunable.

  • Some files in the GoogleVR/Prefabs and GoogleVR/Scripts directories have been moved for better plugin organization.

  • Added new GvrHeadset class to support Daydream standalone VR headsets. Includes a basic logging-only example in the GVRDemo scene.

  • You can now set GvrVideoPlayerTexture to render to an object other than the one that the script is attached to.

  • In GvrVideoPlayerTexture, Aspect Ratio, Width, and Height are now exposed.

  • Changes to GvrArmModel:

    • Fixed a bug where the elbow position was too far back.
    • Implementation has been refactored to be more extensible.
    • There is now an actual controller joint, separate from the wrist joint, so that the controller visual does not need to be offset forward.
    • Removed Gaze Behaviour and Use Accelerometer properties.
    • Removed PointerPositionFromController and PointerRotationFromController from GvrArmModel. Position and rotation of the laser are now in the prefab, which makes it possible to simply move the laser relative to the controller.
    • Previously private tuning properties are now exposed:
Tuning property Description
elbowRestPosition Position of the elbow joint relative to the head before the arm model is applied.
wristRestPosition Position of the wrist joint relative to the elbow before the arm model is applied.
controllerRestPosition Position of the controller joint relative to the wrist before the arm model is applied.
armExtensionOffset Offset applied to the elbow position as the controller is rotated upwards.
elbowBendRatio Ratio of the controller's rotation to apply to the rotation of the elbow. The remaining rotation is applied to the wrist's rotation.
fadeControllerOffset Offset in front of the controller to determine what position to use when determing if the controller should fade. This is useful when objects are attached to the controller.
fadeDistanceFromHeadForward Controller distance from the front/back of the head after which the controller disappears (meters).
fadeDistanceFromHeadSide Controller distance from the left/right of the head after which the controller disappears (meters).
tooltipMinDistanceFromFace Controller distance from face after which the tooltips appear (meters).

Bug fixes

  • GvrControllerInput Up / Down events are now based on the difference between the previous and current frame, which guarantees Up and Down events will be paired, and there will always be at least one frame between Up and Down events.
  • GVREditorEmulator now ignores disabled cameras.
  • Fixed a bug where the inherited serialized field maximumAlpha was not exposed in the GvrControllerVisual inspector view.
  • Fix for "DllNotFoundException: Unable to load DLL 'gvr': The specified module could not be found" (issues 621, PR 622) when calling GvrCardboardHelpers.Recenter() or GvrCardboardHelpers.SetViewerProfile().
  • Fixed GvrControllerInput.Gyro values when using mouse controller emulation.
  • Fixed crashes when calling GvrCardboardHelpers.Recenter() or GvrCardboardHelpers.SetViewerProfile() while the "Cardboard" VR SDK isn't active (usually when VRSettings.enabled = false or VRSettings.loadedDeviceName != 'cardboard') or VRDevice.GetNativePtr() == IntPr.Zero.
  • Fixes a bug (issue 666) where GvrReticlePointer was set to the wrong raycast mode, causing the "GvrPointerGraphicRaycaster requires GvrPointer to have a Camera when in Direct mode" error message to be displayed continuously in the console.
  • GvrArmModel and GvrLaserVisual now use unscaledDeltaTime, to support Time.timeScale != 1.0f.
  • GvrBaseControllerVisual automatically multiplies PreferredAlpha by maximumAlpha, so the subclass doesn’t need to do it.
  • Fixes a bug in GvrVideoPlayerTexture that would cause portrait videos to be rendered incorrectly.
  • Improved GvrControllerMain prefab instantiation time.

GVR SDK for Unity v1.70.0

@miraleung miraleung released this Jul 24, 2017 · 14 commits to master since this release

Breaking Changes

  • Refactored Controller classes:
    • Deprecated GvrPointerManager. Its functionality has been moved to
      GvrPointerInputModule.
    • GvrArmModel is no longer a singleton and has been moved to the
      GvrControllerPointer prefab.
    • Renamed GvrController to GvrControllerInput. GvrController still
      exists for backwards compatibility.
    • GvrArmModelOffsets has been replaced by GvrFollowControllerPose.
      GvrArmModelOffsets still exists for backwards compatibility.
    • GvrControllerVisualManager has been replaced by
      GvrTrackedController. GvrControllerVisualManager still exists for
      backwards compatibility.
    • GvrLaserPointer has been de-coupled from the laser/reticle rendering
      code (which is now handled by GvrLaserVisual).
    • Tooltips have been removed from the GvrControllerPointer prefab.
      There are now prefabs for just tooltips.
    • Prefabs can be dynamically added to the controller visual by listing
      them in the attachmentPrefabs property on the GvrControllerVisual
      script.
    • RaycastMode is now set per-pointer instead of per-raycaster.

Additions

  • You can now simulate the controller in the Unity editor using the mouse.
    • Hold the shift key with the game view in focus to use the mouse.
      The controls are as follows:
      • Shift + move mouse: Change orientation.
      • Shift + left-click: ClickButton
      • Shift + right-click: AppButton
      • Shift + Middle mouse button: HomeButton/Recenter
      • Shift + Ctrl: IsTouching
      • Shift + Ctrl + Move Mouse: Change TouchPos
  • Added the ability to anchor the arm model to the local position of the
    head. This will be used for the standalone headsets so the arm model doesn't
    break with positional tracking.
  • Introduced a new experimental Hybrid raycast mode that combines
    Camera and Direct modes to make the Daydream controller work better
    in more complex scenes that include objects at many different depths and
    locomotion. The default raycast mode is still Camera.

Changes

  • We've updated the controller visualization. The new controller visual is
    both higher fidelity and more performant.
    • Removed the touch point and battery indicator.
    • Replaced controller assets and textures.
    • Added new simple tooltips.
  • The battery status UI is only displayed when the required library is available.
    Unity includes the required library as of Unity 5.6.2p1.
  • The GvrDaydreamApi.LaunchVrHome() API no longer requires that you first
    call GvrDaydreamApi.Create(). However, the Create() method still exists
    to give developers precise control over when the (expensive) instance creation
    happens. The Dispose() method remains as well, to allow developers to clean
    up unneeded memory. However, Dispose() is now called automatically upon
    OnApplicationPause(true). See class comments in GvrDaydreamApi for
    additional details.
  • Change DemoInputManger's default message to be less confusing when
    viewing its message canvas when the app is not running.
  • Included a few different improvements to scrolling in the GVR SDK for Unity:
    • GvrPointerScrollInput no longer directly accesses GvrControllerInput.
      Instead, input is piped through GvrBasePointer just like it is for
      GvrPointerInputModule. This makes it possible for the scroll events to
      work cross-platform with custom GvrBasePointer implementations.
    • Added the ability to respond to Scroll Events globally in
      GvrAllEventsTrigger.
    • Added the ability to override scroll inertia settings on a per-GameObject
      basis by either implementing IGvrScrollSettings or using the script
      GvrScrollSettings.
  • Optimized GvrFps display by removing Canvas and replacing the Text component.
    • Renamed GvrFPSCanvas.prefab to GvrFPSDisplay.prefab.
  • Removed (unused) GvrDistortion.cginc.
  • GvrPointerPhysicsRaycaster no longer allocates memory every frame. It now
    uses RaycastNonAlloc/SphereCastNonAlloc. The size of the buffer for raycast
    hits is determined by the new serialized property maxRaycastHits.
  • It's now possible to use the pointer system with no main camera. A camera
    can be (optionally) specified on the overridePointerCamera field on
    GvrLaserPointer.
  • GvrDaydreamApi.LaunchVrHome() and Create() have new method signatures
    to communicate asynchronous implementation and to provide the caller with
    a way to know when the call has completed:
    GvrDaydreamApi.LaunchVrHomeAsync(Action<bool> callback),
    CreateAsync(Action<bool> callback).
  • Exposed TouchPosCentered, which remaps touchpad input from (-1, 1),
    centered on 0, and magnitude <= 1 (e.g. clamped to the circular touchpad)
  • Moved the Plugins folder underneath the GoogleVR folder so that future
    SDK upgrades are easier since the top level Plugins folder will no longer
    contain non-GVR and GVR content.
  • GVRVideoPlayerTexture no longer copies SurfaceTextures into Unity textures,
    but rather renders SurfaceTextures directly into the scene, optimizing it
    to use much less memory and GPU.
  • GVR Video Demo OBB sample video is now a stereo version of Big Buck Bunny.

Fixes

  • Prevent serialized field properties in Google VR prefabs and scenes
    being set to null when editing them while build platform is not Android
    or iOS.
  • Fixed continuous calls to the Stop() method in the GvrAudioSource source.
  • Fixed a bug that caused the INTERNET permission to be added to the Android
    manifest unnecessarily when using the SDK.
  • GVRVideoPlayerTexture.SetDisplayTexture() now properly sets the display
    texture.
  • GvrBuildProcessor now ignores non-Google VR target build platforms.
  • Fixed a bug that would cause GvrReticlePointer to render behind things
    with a sort order > than 0.
  • Added support for tracking all of a scene's cameras (that target at least
    one eye) in GvrEditorEmulator.
  • Fixed audio not showing up in iOS native integration builds
    (issue 618).

GVR Unity v1.60.0

@miraleung miraleung released this Jun 7, 2017 · 16 commits to master since this release

Known Issues

  • Some iOS developers are having issues running Cardboard projects.
    To run a Unity-built iOS Cardboard project, you must open the workspace
    containing the project (not the project itself) in XCode and build and run
    the project there. See issue 607 for more information.

Additions

  • Added GvrCardboardHelpers.SetViewerParams to set the Cardboard viewer
    parameters from a URI.

Changes

  • GvrBuildProcessor no longer warns at build time if Player Settings >
    Virtual Reality SDKs
    contains the None device. At build time, the
    following checks are currently performed:
    1. Player Settings > Virtual Reality Supported must be enabled.
    2. When the selected build platform is Android, Player Settings >
      Virtual Reality SDKs
      must include Daydream or Cardboard.
    3. When the selected build platform is iOS, Player Settings >
      Virtual Reality SDKs
      must include Cardboard.
  • If an unsupported version of Daydream Keyboard
    is installed, you will be prompted to go to the Play Store to update it.

Fixes

  • Fixed a bug where the controller emulator wasn't working on the latest
    Macbook Pro due to SystemInfo.graphicsDeviceID == 0. See (issue 585).
  • Fixed a bug where GVRRecenterOnlyController did not work correctly in-editor.
  • Fixed a bug where Unity threw an exception when switching scenes.