Files
dungeons/Assets/UltimateXR/CHANGELOG.md
2024-08-06 21:58:35 +02:00

26 KiB

Changelog

All notable changes to UltimateXR will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

TODO: Write update guide: -UxrApplyConstrainEventArgs new properties. -Rename CheckAndApplyLockHands() to KeepGripsInPlace() -Removed UxrGrabbableObject.PlaceOnAnchor -SDK constants moved from UxrManager to UxrConstants. -Component synchronization in UxrManager now uses IUxrStateSync instead of UxrComponent. -UxrComponent.TryGetComponentById now is UxrUniqueIdImplementer.TryGetComponentById(). -UxrManager.ExecuteStateChange is now called ExecuteStateSyncEvent. -Avatar prefab that is set up using UxrNetworkManager inspector, now is changed to "Update Externally" mode so that it is instantiated using external mode by default. Then it will switch to local if the avatar spawned is the local avatar.

Added

  • Add native multiplayer support and connectors for various network SDKs (Photon Fusion, Unity NetCode, Mirror) and voice communication SDKs (Photon Voice, Dissonance). More connectors will be added soon.
  • Add UxrNetworkManager and UxrInstanceManager to provice sync capabilities.
  • Update SDK Manager window with new tabs for SDK types, including new multiplayer.
  • Add new GlobalSettings accessible using the Tools->UltimateXR Unity menu.
  • Add new unique ID functionality to UXR components. All components that inherit from UxrComponent will have a unique ID that can be used with UxrUniqueIdImplementer.TryGetComponentById().
  • Add new Unique ID generation tool to generate unique IDs for projects build with earlier versions of UltimateXR.
  • Add IUxrUniqueId, IUxrStateSync and IUxrStateSave interfaces to UxrComponent to facilitate multiplayer synchronization, serialization, state saves and replay functionality in all UltimateXR components.
  • Add UxrUniqueIdImplementer, UxrStateSaveImplementer and UxrStateSyncImplementer to leverage the interface implementation in custom user classes that cannot inherit from UxrComponent due to multiple inheritance limitation.
  • Add functionality to UxrManager to save and load the scene state using SaveStateChanges() and LoadStateChanges().
  • Add functionality to UxrManager to have a single point of entry to all component state changes that require synchronization: ComponentStateChanged event and ExecuteStateChange() method.
  • Add serialization/deserialization methods to all UxrComponent derived classes.
  • Add serialization/deserialization methods to all UxrSyncEventArgs.
  • Create UxrVarType to enumerate all supported var types that can be synchronized.
  • Add ToString() to all UxrSyncEventArgs to help data logging.
  • Add new property Options to UxrSyncEventArgs to tell whether the event should be synchronized in different environments such as networks or replays.
  • Add new BinaryWriter and BinaryReader extensions with functionality to serialize/deserialize Unity and UltimateXR data, as well as well-known C# types.
  • Add new UxrBinarySerializer with binary serialization and deserialization support.
  • Add new UxrSyncObject component to identify objects that don't have any UxrComponent added, so that they have a unique ID. Also to sync the Transform of a GameObject if it's required and no other component does it already.
  • Add new interpolators to Math namespace to interpolate different types of variables using optional smooth and step options.
  • Add support to solve manipulations on objects using an unlimited amount of grabs to support multi-user shared interaction.
  • Add support to grab grabbable parent objects through grabbable children.
  • Add support for dummy grabbable parents. Dummy grabbable parents are grabbable objects that can be manipulating only through the children, but still have position/rotation constraints.
  • Add new functionality ForceSnapPosition and ForceSnapRotation to UxrPlacementOptions to force snap even if the grabbable object isn't set up that way.
  • Add new functionality in UxrGrabManager to move grabbable objects considering constraints: SetLocalPositionUsingConstraints(), SetLocalRotationUsingConstraints(), SetLocalPositionAndRotationUsingConstraints(), SetPositionUsingConstraints(), SetRotationUsingConstraints() and SetPositionAndRotationUsingConstraints().
  • Add new UxrAutoSlideInObject/Anchor components to provide built-in functionality like how the battery in the example scene can be inserted/removed smoothly from the generators.
  • Add new UxrGrabbableResizable component to provide functionality to create objects that can be scaled by grabbing them from both sides.
  • Add new ComponentProcessorWindow editor base class to generate component processors that can modify from single components to the whole project.
  • Add UxrEditorUtils.ProcessAllProjectComponents() functionality to process both innermost and non-innermost prefab elements.
  • Add UxrEditorUtils.ModifyComponent() to perform changes to components in the scene or project separately processing instances, prefab variants and original prefabs.
  • Add automatic detection of UXR installation path.
  • Add new menus in Tools->UltimateXR.
  • Add PushTransform() and PopTransform() methods in UxrComponent to facilitate saving and restoring transformation info.
  • Add new parameters to UxrColorTween.AnimateBlinkAlpha to support min alpha and max alpha.
  • Add new PBR shader with a tinted mask. Use in cyborg avatar to color it.
  • Add new cabinet prefab to Lab in example scene to showcase grabbable parent dummies.
  • Expose properties in UxrTeleportSpawnCollider to have public access.

Changed

  • Improve manipulation workflow to a system that is more scalable, robust and solves the whole interaction process in different stages.
  • Separate UxrGrabManager in different files based on functionality.
  • Remove all properties from UxrApplyConstrainEventArgs leaving only GrabbableObject. Constraints are applied on an object level so it doesn't make sense to use grabbers, especially in multi-user environments.
  • Remove RequireComponent attribute from UxrGrabbableObjectComponent that forces a UxrGrabbableObject component on the same GameObject. GrabbableObject can be required or not depending on overridable property IsGrabbableObjectRequired.
  • Rename IsOwnershipChanged in UxrManipulationEventArgs to IsGrabbedStateChanged.
  • UxrGrabPointShape now gets additional grabberDistanceTransform to also use non-default grabber proximity transforms.
  • Change how grabbable parenting works: Set to avatar's parent when grabbing and to anchor's parent when removing from anchor without grabbing.
  • Move SDK constants from UxrManager to UxrConstants.
  • Move input/tracking SDK locators from UltimateXR/Editor/Sdks to UltimateXR/Editor/Sdks/InputTracking.
  • Add teleportation validators to UxrTeleportLocomotionBase to create custom logic for destination validation and cancel a teleportation.
  • Move AvatarMoving and AvatarMoved events to UxrAvatar as GlobalAvatarMoving and GlobalAvatarMoved static events.
  • Change Teleported event in UxrTeleportSpawnCollider to use new UxrTeleportSpawnUsedEventArgs parameter.
  • Change UxrComponent unique ID functionality so that IDs are generated in the editor instead of using unique paths in scene with ComponentExt.GetUniqueScenePath().
  • Improve avatar arm rig reference solving for hierarchies with siblings in the clavicle, upper arm or forearm.
  • Change GetUniqueScenePath in ComponentExt and TransformExt to make it cleaner.
  • Move AlignWindow, LookAtWindow and MirrorWindow tools to new namespace/folder in Editor/Utilities/TransformUtils.
  • Improve UxrEditorUtils.Prefabs functionality.
  • Improve TaskControllers documentation and functionality.
  • Improve UxrLookAt component with new axis functionality.
  • Make UxrControllerTracking's properties UpdateAvatarLeftHand/UpdateAvatarRightHand public instead of protected.
  • Allow UxrTeleportLocomotionBase to be disabled to ignore the component.

Fixed

  • Fix UxrCameraPointer's ClickInput to Everything by default instead of None to avoid clicking each frame.
  • Fix bug in UxrPointerInputModule that prevents pointer up notifications being generated when the finger tip/pointer is dragged out of the UI.
  • Fix child dependent grabbable objects not being dynamic when releasing.
  • Fix bug in avatar IK where the coordinate system of clavicles/upperarm/forearm is inferred erroneously. Arms can look twisted.
  • Fix bug in standard avatar controller inspector when clicking Use Avatar Eyes.
  • Fix bug in UxrManager to avoid pre-caching multiple times when client network avatars are instantiated.
  • Fix bug in UxrManager where aync versions of teleport cause an await() to wait indefinitely when overlapping more than one teleport at the same time.
  • Fix bug in UxrTeleportSpawnCollider that throws null reference exceptions when Transform references are not set. When references are null, the Transform of the GameObject where the UxrTeleportSpawnCollider is added should be used instead.
  • Fix UxrEditorUtils.ProcessAllProjectComponents() not processing all components correctly.
  • Fix UxrEditorUtils.GetInnermostNon3DModelPrefabRoot() not working on all prefab/instance hierarchies correctly.
  • Fix UxrEditorUtils.GetInnermostNon3DModelPrefabRoot() to handle 3D model prefabs correctly.
  • Fix UxrUnityXRControllerInput when controllers have touchpads.
  • Fix warnings in example scene when loading ShotgunPump01.mp3 and ShotgunPump02.mp3
  • Fix missing EditorGUI.EndProperty() in UxrAxisPropertyDrawer.
  • Move UxrLaserPointerTargetTypes to correct namespace UltimateXR.UI instead of root UltimateXR namespace.
  • Fix UxrGrabPointShapeAxisAngle to compute center of grab correctly using snap point instead of using axis center.
  • Implement missing minAngle and maxAngle functionality in UxrGrabPointShapeAxisAngle.
  • Fix HandPositionAroundPivot manipulation mode drifting when grabbable object is child of another grabbable object.
  • Fix preview grab poses to work on hierarchies with non-uniform scaling.
  • Fix Lock Body Pivot parameter drifting in UxrStandardAvatarController.

0.9.7 - 2024-01-10

Added

  • Add support for Meta Quest 3.
  • Add support for Magic Leap 2.
  • Add support for Virtual Desktop controller naming.
  • Add support for Unity UI input on the screen and UltimateXR UI input in VR at the same time.
  • Add new functionality DontRelease to UxrPlacementOptions that keeps the object grabbed when UxrManager.Instance.PlaceObject() is called.
  • Add MinSingleRotationDegrees/MaxSingleRotationDegrees to UxrGrabbableObject when constrained to a single degree of freedom.
  • Add new symbol ULTIMATEXR_UNITY_XR_OCULUS when Unity.XR.Oculus is available.
  • Add joystick deadzone filtering in SteamVR.
  • Add support for position/rotation smoothing in all controller tracking components.
  • Add new UxrLinearPath spline type for linear interpolation in paths.

Changed

  • Improve teleportation raycasts to discard avatar colliders and grabbed objects.
  • Improve teleportation to handle avatars with roll/pitch.
  • Improve Body IK to handle avatars with roll/pitch. Improved precision by performing computations in local avatar space.
  • Rename UxrPlacementType to UxrPlacementOptions.
  • Improve support for HandPositionAroundPivot manipulation mode.
  • Disable UxrInputModule component parameter "Disable Other Input Modules" by default instead of being enabled.
  • Remove deprecated references to CommonUsages.thumbrest and CommonUsages.thumbTouch in UxrUnityXRControllerInput.cs and use OculusUsages.thumbrest and OculusUsages.thumbTouch instead if available. Add support for OculusUsages.indexTouch.

Fixed

  • Fix UxrLaserPointer hit quad position using controller forward.
  • Fix Pico controllers not working after using home button.
  • Fix Valve Index controllers' forward vectors.
  • Fix laser pointers not working correctly when mixing UI with 2D/3D objects.
  • Fix bug in UI module where finger tips and laser pointers cannot interact with multiple canvases when close to each other.
  • Fix null reference exception in manipulation system when placing constrained objects on anchors and grabbing them again.
  • Fix bug in UxrGrabManager that prevents GrabToggle manipulation mode to place objects on anchors.
  • Fix UxrGrabbableObject manipulation not working correctly when grab points are moved around during grabbing, for example when applying constraints.
  • Fix bug in UxrGrabbableObject.SetGrabPointEnabled not working correctly.
  • Fix UxrGrabPointShapes not computing center of grab correctly in some cases.
  • Fix scaling on root avatar GameObject not working correctly with Body/Arm IK.
  • Fix the following global input events in UxrControllerInput not being called: GlobalButtonStateChanged, GlobalInput1DChanged, GlobalInput2DChanged.
  • Fix UxrUnityXRControllerInput components not getting haptic capabilities correctly.
  • Fix warnings in example scene when loading ShotgunPump01.mp3 and ShotgunPump02.mp3

Removed

  • Remove deprecated references to CommonUsages.thumbrest and CommonUsages.thumbTouch in UxrUnityXRControllerInput.cs and use OculusUsages.thumbrest and OculusUsages.thumbTouch instead if available.

0.9.6 - 2023-01-18

Added

  • Add SteamVR support for Rift/Rift-S/Quest/Quest2 headsets and controllers.
  • Add selective 2D/3D/UI GameObject interaction to UxrLaserPointer.
  • Add PrecachingStarting and PrecachingFinished events to UxrManager.
  • Add new exposed parameters to UxrLaserPointer for scripting.
  • Add new exposed parameters to UxrPointerEventData for scripting.
  • Add LocalStandardAvatarController property to UxrAvatar for quick access.

Changed

  • Improve UxrLaserPointer inspector.
  • Improve UxrPointerInputModule event handling.
  • Make UxrControllerInput::GetIgnoreControllerInput() and SetIgnoreControllerInput() static so that they can be called at any point whether the controllers are active or not.
  • Change some common operations to favor execution time: #12.
  • Make grab preview poses no longer shown by default during play mode in the editor. Preview GameObjects are initially deactivated.
  • Improve hand pose editor load/save dialog boxes by caching the last load and save folders separately.
  • Change .meta files in Examples\FullScene\Settings\URP so that the IDs don't collide with the default URP project IDs.

Fixed

  • Fix Transform.SetLocalPositionAndRotation when not available through new Unity API.
  • Fix UxrLaserPointer to not send UI events when laser is disabled.
  • Fix uninitialized hand pose when hand tracking is supported but not available.
  • Fix grabbable object position constraint not working correctly when grabbed using both hands.
  • Fix UxrGrabbableInspector not storing correctly new grab point parameters right after it has been created.
  • Fix Grab Toggle mode in UxrGrabbableObject not keeping the pose during the grab.
  • Fix "Enable When Hand Near" parameter in UxrGrabbableObject being enabled incorrectly sometimes when another grabbed object was in closer range.
  • Fix hand grab pose incorrectly changing when moving within the range of a grabbable object enabled by a non-default grab button.
  • Fix bug in hand pose editor that prevents to load external pose files when using UltimateXR in package installation mode.
  • Fix bug in hand pose editor where the "Add all poses from folder" loads all hand pose presets instead.
  • Fix UxrGrabManager's GrabObject, PlaceObject, ReleaseObject direct methods calls not updating the avatar's grab pose.
  • Fix global events in UxrControllerInput that should be static but are not: GlobalButtonStateChanged, GlobalInput1DChanged, GlobalInput2DChanged, GlobalHapticRequesting.
  • Fix UxrAvatar Reset to make it override.
  • Fix UxrAvatar.LaserPointers to return correct laser pointers instead of finger tips.
  • Fix avatar parent prefab not being stored correctly when inside a nested prefab.
  • Fix UxrGrenadeWeapon pin so that the timer cannot be reset by quickly releasing and grabbing the pin again.
  • Fix UxrSteamControllerInput so that OnDeviceConnected is called only once.

0.9.5 - 2022-11-12

Added

  • Improve automatic avatar rig bone reference solving.
  • Improve automatic generation of body IK setup in avatar automatic setup.
  • Add UxrWristTorsionIKSolver component when torsion bones are found in avatar.
  • Improve UxrStandardAvatarController inspector when IK is selected but rig has no nodes.
  • Add TrackedHandPose to UxrControllerInputCapabilities enum and applied to Valve Index.
  • Add public method SolveBodyIK() to still use body IK when AvatarMode is UpdateExternally.
  • Add support to isolate the hand part of the mesh in the hand preview poses if the hands are in the same mesh as the body.

Changed

  • Set avatar rig type to full/half body when body bones are found in the avatar rig.

Fixed

  • Fix UxrWristTorsionInfo, UxrWristTorsionIKSolver and UxrAvatarArmInfo to generate correct data on all avatar rig coordinate systems.
  • Fix components that don't override Reset() or OnValidate().
  • Fix body IK when no neck bone is present.
  • Fix Valve Index controllers not sending UI input events when adopting a hand pose with the middle finger curled.
  • Fix bug in avatar finger bone reference solving if the finger has already data.

0.9.4 - 2022-10-29

Added

  • Add IUxrGrabbableModifier interface to create components that control certain parts of an UxrGrabbableObject. The UxrGrabbableObject inspector automatically disables the controlled UI sections and has also capability to show/hide the controlled parameters. The goal is to provide a scalable way to extend grabbable functionality by adding modifier components to the object.
  • Add Reset() and OnValidate() to the overridable Unity methods in UxrComponent.
  • Add ConstraintsFinished to UxrGrabbableObject to create logic after custom constraints have been applied.
  • Add constants to UxrGrabbableObjectEditor for UxrGrabbableObject field names.
  • Add "Any" variations to GetButtonsPress/GetButtonsTouch when multiple buttons are specified so that any button in the set is enough to meet the criteria instead of all.
  • Add EnumExt for Enum extensions.
  • Add static events to UxrControllerInput to receive events whenever any controller sends input data.

Changed

  • Change UxrApplyConstraintsEventArgs to contain the UxrGrabber instead of UxrGrabbableObject. The UxrGrabbableObject can still be accessed using the GrabbedObject property from the grabber.
  • Use ConstraintsFinished in UxrManipulationHapticFeedback in order to process object after custom constraints have been applied.
  • Rename UxrLocomotionTeleportBaseEditor to UxrTeleportLocomotionBaseEditor.
  • Update example scene prefabs so that they show the cyborg grab poses by default.

Fixed

  • Fix support for PicoXR controller detection on newer versions of the PicoXR Unity SDK.
  • Remove Universal Additional Camera Data scripts added incorrectly to BRP avatar variants. Affected avatars are SmallHandsAvatar_BRP, BigHandsAvatar_BRP and CyborgAvatar_BRP.
  • Fix joystick directional buttons (left/right/up/down) when getting ignored input.
  • Fix bug in UxrGrabbableObjectEditor that under some circumstances throws exceptions when previewing grab poses.
  • Fix UxrGrabbableObject constrained rotation on a single axis not working correctly when parent has different axes.
  • Fix UxrTeleportSpawnCollider not raising Teleported event.

0.9.3 - 2022-10-24

Added

  • Add support to use UltimateXR through Unity Package Manager using git URL.

Changed

0.9.2 - 2022-10-18

Fixed

  • Fix UxrGrabbableObject editor methods that caused compiler errors when creating a build.
  • Fix UxrGrabbableObject startup so that component can be added to an object at runtime.

0.9.1 - 2022-10-13

Changed

  • Improve some UxrGrabbableObject parameter tooltips.

Fixed

  • Fix GameObjectExt.GetBounds and GetLocalBounds exceptions when no renderers are found.
  • Fix GameObjectExt.GetBounds not computing value correctly.

0.9.0 - 2022-10-13

Added

  • Add new UxrGrabbableObject constraints functionality with improved manipulation.
  • Add UxrGrabbableObject gizmos to visualize rotation/translation constraints.
  • Add new UxrGrabbableObject rotation/translation constraint modes.
  • Add support to UxrGrabbableObject for rotation constraints on all 3 axes.
  • Add support to UxrGrabbableObject for a single rotation constraint over 360 degrees.
  • Improve manipulation behavior when grabbing objects to detect the grip and know which part of the hand creates more leverage.
  • Add possibility to parent to destination in locomotion components: UxrTeleportLocomotion and UxrSmoothLocomotion.
  • Add new teleport methods to UxrManager to teleport relative to moving objects.
  • Add new functionality to GameObjectExt to compute bounds recursively.
  • Add new functionality to MeshExt to compute skinned mesh vertices and bone influences.
  • Add new misc functionality to FloatExt, IntExt, Vector3Ext, Vector3IntExt and TransformExt.
  • Add new data to UxrAvatarRigInfo.
  • Add versioning to avatar rig info serialization and automatic updating.
  • Add IUxrLogger interface to unify logging in managers.
  • Add logging to UxrWeaponManager.
  • Add new properties to UxrComponent with initial Transform data.
  • Add new UxrAxis properties and functionality.
  • Add possibility to access avatar grabbers at edit-time.

Changed

  • Improve all UxrGrabbableObject and hand grab/release/constrain transitions.
  • Move UxrGrabbableObject constraints to the top of the inspector.
  • Replace GrabAndMove/RotateAroundAxis manipulation modes by new constraint system.
  • Change UxrGrabbableObject rotation and translation constraints reference. Rotations are performed around the grabbable object local axes. Translations are performed along the initial grabbable object local axes.
  • Improve UxrAvatarRig reference solving.

Removed

  • Remove parent reference to UxrGrabbableObject rotation/translation constraints.
  • Remove UxrManipulationMode. New constraint system and UxrRotationProvider is used instead.

Fixed

  • Fix manipulation not working correctly on moving platforms.
  • Fix incorrect manipulation release on objects with non-default grab button(s).
  • Fix UxrGrabbableObject release multipliers not working correctly with values less than 1.
  • Fix UxrGrabbableObject Constrain events not being called in some cases.
  • Fix UxrAvatarEditor throwing exception when using Fix button to save prefab variant.
  • Fix UxrCameraWallFade throwing exception when there are no avatars.
  • Fix constrained rotations not being able to go over 180 degrees.
  • Fix pre-caching triggered by non-local avatars. Only local avatar triggers pre-caching now.
  • Fix locomotion components detecting avatar or grabbed objects as obstacles.
  • Fix locomotion not working correctly on moving platforms.
  • Fix UxrWeaponManager not tracking actors correctly.
  • Fix UxrMagnifyingGlassUrp error when not using URP.
  • Fix CyborgAvatar_URP base to use index controllers correctly.
  • Fix some CyborgAvatar_BRP base materials that are using the URP variants.

0.8.4 - 2022-08-05

Added

  • Add new ULTIMATEXR_UNITY_TMPRO symbol when TextMeshPro is available.
  • Add support to UxrTextContentTween for TextMeshPro text components.

Changed

  • UxrTextContentTween.Animate() now uses a GameObject as target parameter so that either a Unity UI Text component or a TextMeshPro text component can be animated.

Fixed

  • Fix UxrInterpolator.InterpolateText() use of rich text color tag.
  • Fix UxrAvatar to avoid infinite loops when enumerating the avatar prefab chain.
  • Fix UxrAvatarRigInfo.GetWorldElbowAxis() for left side when T-pose is found.
  • Fix UxrAvatarRig.ClearRigElements() to clear missing references.
  • Fix missing ULTIMATEXR_UNITY_URP in UxrMagnifyingGlassUrp to avoid URP hard requirement.

0.8.3 - 2022-08-01

Added

  • Add editor tooltips to UxrTeleportLocomotionBase and UxrTeleportLocomotion.

Fixed

  • Fix UxrLaserPointerRaycaster bug that prevented using laser pointers as UI input.
  • Fix LaserDot.shader so that it works in stereo VR.

0.8.2 - 2022-07-21

Added

  • Add support for rotational constraints on more than one axis.
  • Add access to the grabbable object on UxrApplyConstraintsEventArgs.

Fixed

  • Remove built-in compatibility in hand shader to fix shader errors when building. Compatibility will be added again as soon as Unity issue is fixed. Issue status can be followed here: https://github.com/VRMADA/ultimatexr-unity/issues/2
  • Fix grabbable objects being manipulated on movable platforms.
  • Fix UxrManipulationHapticFeedback component sending feedback incorrectly on movable platforms.

0.8.1 - 2022-07-11

Changed

  • Use ULTIMATEXR_USE_PICOXR_SDK instead of UXR_USE_PICOXR_SDK for consistency.

Fixed

  • Add new ControllerNames device names to UxrHtcViveInput to correctly detect HTC Vive controllers.
  • Add new ControllerNames device names to UxrValveIndexInput to correctly detect Knuckles controllers.
  • Add new ULTIMATEXR_UNITY_URP symbol to avoid compiler errors when Unity's URP package is not installed.

0.8.0 - 2022-07-06

Added

  • First public release!