We have just released a Stable update to ChilloutVR that includes various fixes and improvements, including how you interact with objects, players, and mature content.
Main Changes:
[h2]Player Interaction without Input[/h2]
Allow or restrict other players/props from initiating certain interactions without your input, such as attaching objects or teleporting. Worlds always bypass this setting.
[h2]Desktop Throwing[/h2]
Props & Objects can now be thrown in Desktop by holding the ‘G’ key while held
[h2]Mature Content Visibility[/h2]
Players with access to Mature Content within ChilloutVR via the DLC now have a global toggle available in both the game Settings menu (General), and Account Settings on the HUB.
[h2]Unity Upgrade[/h2]
While not a major change, ChilloutVR is now using Unity 2021.3.45f1. This editor version may be used to upload content going forward.
Note: CCK related changes, and uploading via Unity 2021.3.45f1, will be available along with the release of CCK 3.13 following soon.
Changes:
- Added 'normalizeBoneAttachment' option to CVRAttachment to allow for attachments to work across differing avatar rigs
- This means that bone attachment with fixed offsets won't be affected by bone roll & local scale
- Added 'OnPickupUseUp' and 'OnPickupUseDown' to CVRInteractable
- This differs from 'OnInteractDown' and 'OnInteractUp' by only firing for the held hand holding the pickup
- Added 'RectTransform.SetParent' and 'Transform.SetParent' to the unity event whitelist, limited to worlds. These are available via 'CVRInteractable' method call.
- Added a mipmap streaming toggle on the experimental settings
- Added a MoveMode dropdown to CVRPickupObject
- This just exposes Velocity / Instant tracked pickups, with the potential for more to be added in the future
- Added an additional Exception Handling for Bundle Verifier
- Added a throwing multiplier & min speed threshold to CVRPickupObject
- Added CollisionWithPlayer configuration to CVRPickupObject & CVRAttachment
- DisableWhileHeld: The pickup will not collide with the player while held Collision is immediately returned on release
- DisableWhileHeldAndColliding: Same as above, but the pickup will not instantly collide on release, but instead push the player out after half a second
- DontDisable: The pickup will continue to collide while held
- Added destroy children option to 'CVRInteractable.DeleteGameObject' action
- Added error handling and display for incompatible worlds in the player activity menu.
- Added filtering of "illegal layers" on world load
- PlayerClone & UI Internal are now filtered
- Added logs for when unity events get filtered out, while also stating the reason they were filtered
- Added starting Steam (if not running) when using DeepLink to start the game
- This fixes the issues of losing SteamVR custom bindings and mature DLC when starting the game from DeepLink URLs while steam is closed
- Adjusted 'CVRAttachment' to call the Detached event when the attachment is broken
- This can occur on an avatar switch, prop deletion, or any general case where the tracked transform is no longer able to be tracked
- This also fixed CVRInteractables attached state being incorrect if another attachment was done prior to calling DeAttach
- Adjusted Drop key in Desktop '(G)' to accumulate a throw timer while held
- You can now hold G for up to 3 seconds to charge a throw
- Adjusted first CVRInteractable.OnEnable call to occur after world load
- Adjusted GravityZone rotation alignment handling to not force ZeroG controls during the transition between two override zones which have the same alignment mode
- This fixes Zero G controls being active while transitioning through aligned override gravity zones
- Adjusted how velocity is applied on release of a pickup
- This should make throwing things feel just a bit nicer
- This also fixes rotational velocity not applying to a pickup on release
- Adjusted order that 'CVRAttachment' checks for attachable transforms:
- Now is Snapping Points -> Trackers -> Avatar Bones (was in reverse order)
- Ex: an attachment set to look for a "holster" type and hip bone will prioritize the preconfigured snapping point if found over the hip bone
- Adjusted the new non-whitelisted url notification
- Changed 0m MaximumGrabDistance behaviour
- When set to 0m only Proximity Grab will work
- As desktop cannot physically do proximity grab they have an extra reach distance given to compensate
- Existing pickups using 0m for infinite still work as expected
- Changed CVRInteractable.OnTimer to use coroutine instead of scheduler system
- Changed how 'StateMachineCallbackSender' works
- You now must define a specific receiver to forward callbacks to
- This was changed for performance & implementation reasons
- CVRPickupObject will no longer change Kinematic mode on held rigidbody
- If disabled, pickup object will respect collision
- If enabled, pickup object does not respect collision
- Disabled rich text on Portals, Avatar Markers, and Spawnable Markers
- Enabled mipmap streaming and set mipmap memory budget appropriately (currently set to 80% of max VRAM)
- This should resolve where textures were always the lowest mip selected on a previous build that had mipmaps enabled.
- Note: Some older avatars that have mipmap streaming enabled might use the lowest resolution at all times, which must be re-uploaded to resolve.
- Exposed 'enabled', 'SetAutoHold', 'ForceRelease', & 'IsPickupable' on 'CVRPickupObject' for use with Unity Events
- Fixed Advanced Safety not actually clamping transform positions
- Fixed an issue where multiple delayed CVRInteractable actions being removed at once would stop other delayed actions
- Fixed an issue where switching to VR after starting in Desktop would mess with VR push pull distance & speed
- This caused pulling an object to you to stop before actually reaching you depending on your playspace scale prior to switch
- Fixed an issue with Avatar Reloading not working properly when the upload is updated
- Fixed an issue with Disconnect Messages being played twice
- Fixed an issue with Max Prop Download Size not being enforced (it was using the avatars max limit setting instead)
- Fixed an issue with Player Join and Leave toggles not working properly
- Fixed an issue with Player Voice Pipelines not applying values properly
- Fixed an issue with SteamVR not abiding by user-specified render resolution
- Fixed CVRAdvancedAvatarSettingsTriggerTaskStay Add/Subtract per second being tied to target refresh rate
- Fixed CVRBlitter Breaking when deleting content
- Fixed CVRInteractable actions being needlessly iterated over during callbacks where actions weren't defined
- Fixed CVRInteractableManagers enableInteractions state not being fully respected, causing desync while interactions were disabled
- ex: CVRInteractable.OnGrab would not fire while in FBT calibration
- Fixed CVRInteractables Teleport Player World Up option misbehaving
- Fixed CVRInteractable Teleport Player with gravity alignment option not working
- Fixed not orientating properly in certain scenarios
- Fixed CVRPickupObject.RootTransform returning stored grip transform instead of active one
- Fixed CVRPickupObject handling rotation of non-physics updated pickups properly
- They used to move in FixedUpdate but rotate in Update, causing some visual issues
- This also fixed GripOrigin pickups not being throwable
- Fixed game initial Intro video not continuing the loading after finishing without user input to skip
- Fixed Interactable not being able to handle multiple controllers properly
- This fixes 'CVRInteractable.OnInteractUp' being wrongly invoked when hovering a controller over an object already being interacted with by the other controller
- Fixed interactable-spawned objects in worlds set to Auto Pickup not working
- It attempts to auto-pickup the spawned object if there is an available hand. If there is no available hand, it will drop the current held object and then grab the newer one
- In VR it checks first the right and then the left hand for a free hand, if none available it force drops the right hand and then use it.
- In Desktop just uses the single existent grab point (head)
- Added options for interactions without user input option on Avatars and Props
- Example: Attach props to users, or Teleport/Seat remote without clicking on something
- Worlds do bypass these settings
- For now 'UnityUI' calling 'CustomTrigger' does not count as user Input, so it will be restricted if players have this disabled
- Currently the Me/Friends options look for the avatar wearer or prop spawner to decide whether the limits are applied or not. In the future this might be refactored to better interactions (like checking filtering depending on who's grabbing for example)
- The default settings are:
- Attachment without user input: Always
- Teleport Player: Props spawns/Avatars worn by Friends (or self)
- Note: This didn't improve the access to the mentioned functionalities, instead it restricts some funny ways to do it
- Fixed issue with CVRBlitter breaking when multiple instances of the same prop were spawned
- Fixed Mirror Facing Check, Mirrors should now be fully functional again
- Fixed mirrors breaking with a skewed transformation matrix
- Fixed notification for blocked prop due to max file size not showing
- Fixed pressing prone key while in Desktop changing Seated Play state
- Fixed reusing clips with shared Animation Events blows up AnimationEventHelper on content load
- Fixed some youtube videos play using the wrong language
- Fixed soundcloud.com links not working in the video player
- Fixed typo on Player Interactions without Input description
- Fixed VRModeSwitch Shader Replacement only occurring for only Legacy bundle format Worlds despite Compatibility Version being NotSpi
- Fixed VR Switch Shader Replacement prompt using the wrong conditions to display
- Would incorrectly display in any world using Legacy bundle format instead of NotSpi Compatibility Version
- Fixed Worlds with Terrain set to Draw Instanced causing visual artifacts during Digitize transition
- Implemented a system to handle shared physics & collision state across CCK components
- This ensures CVRAttachment, CVRPickupObject, CVRPhysicsInfluencer, CVRObjectSync, & CVRSpawnable shouldn't end up reapplying values they shouldn't
- This will also later allow creators to change the desired kinematic & gravity values when one of the above components is not overriding them
- Implemented content blocking based on global mature content setting
- You won't be able to see the details or use avatars/props/worlds/instances tagged with nudity or gore if you have the setting off
- You won't be able to join instances of worlds that are tagged with nudity or gore if you have the setting off
- Implemented global mature content setting associated with the users account
- The toggle is available within the in-game General settings & on the Hub
- You must run the game with the Mature Content DLC at least once to unlock this toggle
- The toggle is automatically defaulted to true this first time you run with the DLC
- Improved CVRBlitter functionality
- Added RandomWriteTarget support to the CVRBlitter component
- Added CVRBlitterController to ensure CVRBlitter execution order
- Improved menu clarity and reduce aliasing significantly
- Made Mirror Optimization always apply
- Removed the setting from experimental
- Pickups ineligible for grabbing will no longer highlight
- Prevent some avatar materials that are not instantiated from getting destroyed
- Renamed 'Input & Key-Bindings' to 'Controls'
- Replaced 'Fade When Idle' setting with 'Display Behaviour' in Settings -> Graphics. Now it offers 3 modes:
- 'Always' - The HUD is always shown (previously Fade When Idle unchecked)
- 'Voice & Updates' - The HUD fades out if there are no updates nor voice activity both muted and unmuted (previously Fade When Idle checked)
- 'Only Updates' - The HUD fades out and only returns when there are updates, or there is voice activity while unmuted (new)
- Upgraded Unity version to 2021.3.45f1.
- Whitelisted 'CanvasGroup' for props
- Whitelisted FinalIK's 'AimIK' and 'IKExecutionOrder' components for avatars and props
- Whitelisted setting some properties of 'CanvasGroup' via UnityEvents (limited to props and worlds)