Skip to content

Commit c10f972

Browse files
author
Unity Technologies
committed
com.unity.xr.visionos@3.1.0
## [3.1.0] - 2026-02-20 ### Added - Added MSAA and Post Processing AA controls to Metal samples to make testing AA modes easier. - Added NativeApi.Utilities.ConvertExistingDataToNativeArrayWithSafetyHandle to create safety handles when converting native pointers to NativeArrays.
1 parent 2dc35d3 commit c10f972

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+6017
-1713
lines changed

.attestation.p7m

28 Bytes
Binary file not shown.

.signature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"timestamp":1767891474,"signature":"doUbg3cRjS8sX5TyNuu7vsIsogWNU8sWuSGim3hd16n2nrS0lRKyA9DIZ6BZ0bPhamPNlAOe8S7b2r8x4OG+awT+gYZrlBtbXQvith+gSe//xvvJZ1cdRXV4zuN3kmrDfn1AbupwEwsdh6snlNMPyqPTg+XmDMyd05okUR2Yp2eEay2Bukz5GaA6BXbWYs9N4w65VE11iIE8MpHve/y24MJ3Mj5pVb4IEcseoGNj3qB+OsknJwvKhZIqxi2j+Q9Bji439gIxyRguZCXDe58hXVZWDY0sroLzm4+G4asQu9rYKoDLFBKpJRMTYE+ViO58ZqIL0MXdB+PBRjcr5tupBhwswJLJge26WH3gdV61/uwBQntOKkAKG2dlEU+wlPuj+QD4tsFysnAvhlYUP7QLRpQDBY8K8RMe4z5W4R69wQwxYc181q1n9sF6Qr77W0cGIPYHBpD3QT38Q4cRKt6eqycK7xXtnKw//JiGAh4eQjw5PlLWDkSjnEMfGP6f3CV1","publicKey":"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUFzdUhXYUhsZ0I1cVF4ZEJjTlJKSAordHR4SmoxcVY1NTdvMlZaRE1XaXhYRVBkRTBEMVFkT1JIRXNSS1RscmplUXlERU83ZlNQS0ZwZ1A3MU5TTnJCCkFHM2NFSU45aHNQVDhOVmllZmdWem5QTkVMenFkVmdEbFhpb2VpUnV6OERKWFgvblpmU1JWKytwbk9ySTRibG4KS0twelJlNW14OTc1SjhxZ1FvRktKT0NNRlpHdkJMR2MxSzZZaEIzOHJFODZCZzgzbUovWjBEYkVmQjBxZm13cgo2ZDVFUXFsd0E5Y3JZT1YyV1VpWXprSnBLNmJZNzRZNmM1TmpBcEFKeGNiaTFOaDlRVEhUcU44N0ZtMDF0R1ZwCjVNd1pXSWZuYVRUemEvTGZLelR5U0pka0tldEZMVGdkYXpMYlpzUEE2aHBSK0FJRTJhc0tLTi84UUk1N3UzU2cKL2xyMnZKS1IvU2l5eEN1Q20vQWJkYnJMbXk0WjlSdm1jMGdpclA4T0lLQWxBRWZ2TzV5Z2hSKy8vd1RpTFlzUQp1SllDM0V2UE16ZGdKUzdGR2FscnFLZzlPTCsxVzROY05yNWdveVdSUUJ0cktKaWlTZEJVWmVxb0RvSUY5NHpCCndGbzJJT1JFdXFqcU51M3diMWZIM3p1dGdtalFra3IxVjJhd3hmcExLWlROQWdNQkFBRT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg"}
1+
{"timestamp":1771630129,"signature":"UQfei+5nCCoBJERp9u046Ft0DGONllgao8b455k2TIcNh9Gu8it0bKm7PPWaHjaWw1KB843BshGT11cqRwuIzvDwWNzuJ/cR6enyh+kgDj5Ijy0rN1YBjP77V7E7bhElOkOn0Cogi5dqMXkzvrSP4TOaiivSjheTHSJKrEnQdXVBA1FDgPrAmJ6HZg0Hd3CtMq/4CeVkBx76T+pIBH4vbcBTa6B2J/TWGGqgvlAu6oF7dP5PoCTw9V8sTB8t9TcQRkGx+pMaueFobzFCoeXrmgG8/ua+XxxVkzuvKw9ZuaNF/LGjspbFqiHv7UILBxT4yg5IGSH5ET+zJXXXnNu7VAemTimAk38MLXJ6uhDVwMfNo8IV8mg1rUZ0LfrTPFainOGRFZf/uB/YSg9yx9QVUozBEiSUBr9weiX0Ya+7THLnJr4z8Sn835XKpg+j1d4mERFetog/B8gYVX3I3BpJME3REHg/2dP1xjHzFLivGcnzonMqMU3r04EXGcp8WafQ","publicKey":"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUFzdUhXYUhsZ0I1cVF4ZEJjTlJKSAordHR4SmoxcVY1NTdvMlZaRE1XaXhYRVBkRTBEMVFkT1JIRXNSS1RscmplUXlERU83ZlNQS0ZwZ1A3MU5TTnJCCkFHM2NFSU45aHNQVDhOVmllZmdWem5QTkVMenFkVmdEbFhpb2VpUnV6OERKWFgvblpmU1JWKytwbk9ySTRibG4KS0twelJlNW14OTc1SjhxZ1FvRktKT0NNRlpHdkJMR2MxSzZZaEIzOHJFODZCZzgzbUovWjBEYkVmQjBxZm13cgo2ZDVFUXFsd0E5Y3JZT1YyV1VpWXprSnBLNmJZNzRZNmM1TmpBcEFKeGNiaTFOaDlRVEhUcU44N0ZtMDF0R1ZwCjVNd1pXSWZuYVRUemEvTGZLelR5U0pka0tldEZMVGdkYXpMYlpzUEE2aHBSK0FJRTJhc0tLTi84UUk1N3UzU2cKL2xyMnZKS1IvU2l5eEN1Q20vQWJkYnJMbXk0WjlSdm1jMGdpclA4T0lLQWxBRWZ2TzV5Z2hSKy8vd1RpTFlzUQp1SllDM0V2UE16ZGdKUzdGR2FscnFLZzlPTCsxVzROY05yNWdveVdSUUJ0cktKaWlTZEJVWmVxb0RvSUY5NHpCCndGbzJJT1JFdXFqcU51M3diMWZIM3p1dGdtalFra3IxVjJhd3hmcExLWlROQWdNQkFBRT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg"}

CHANGELOG.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ All notable changes to this package will be documented in this file.
77
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
88
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
99

10+
## [3.1.0] - 2026-02-20
11+
12+
### Added
13+
- Added MSAA and Post Processing AA controls to Metal samples to make testing AA modes easier.
14+
- Added NativeApi.Utilities.ConvertExistingDataToNativeArrayWithSafetyHandle to create safety handles when converting native pointers to NativeArrays.
15+
1016
## [3.0.5] - 2026-01-08
1117

1218
### Fixed
@@ -17,10 +23,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
1723
### Fixed
1824
- Fixed a crash in the visionOS player when disabling hand tracking.
1925

20-
## [3.0.3-pre.3] - 2025-10-22
21-
22-
## [3.0.3-pre.2] - 2025-10-20
23-
2426
## [3.0.3-pre.1] - 2025-10-13
2527

2628
## [3.0.2] - 2025-10-06

Editor/ProjectValidation/VisionOSProjectValidation.cs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,11 @@ static void SetCamerasDepthTextureToEnabled()
109109
if (UniversalRenderPipeline.asset == null)
110110
return;
111111

112+
#if UNITY_6000_4_OR_NEWER
113+
var cameras = UnityObject.FindObjectsByType<Camera>(FindObjectsInactive.Include);
114+
#else
112115
var cameras = UnityObject.FindObjectsByType<Camera>(FindObjectsInactive.Include, FindObjectsSortMode.None);
116+
#endif
113117
foreach (var camera in cameras)
114118
{
115119
var cameraData = camera.GetUniversalAdditionalCameraData();
@@ -127,7 +131,11 @@ static bool IsCamerasDepthTextureDisabled()
127131
if (UniversalRenderPipeline.asset == null)
128132
return true;
129133

134+
#if UNITY_6000_4_OR_NEWER
135+
var cameras = UnityObject.FindObjectsByType<Camera>(FindObjectsInactive.Include);
136+
#else
130137
var cameras = UnityObject.FindObjectsByType<Camera>(FindObjectsInactive.Include, FindObjectsSortMode.None);
138+
#endif
131139
foreach (var camera in cameras)
132140
{
133141
var cameraData = camera.GetUniversalAdditionalCameraData();
@@ -438,23 +446,11 @@ static bool SetVisionOSLoaderEnabled(bool enabled)
438446
if (visionOSLoader == null)
439447
return false;
440448

441-
var visionOSBuildTargetGroup = BuildPipeline.GetBuildTargetGroup(BuildTarget.VisionOS);
442-
var visionOSXRSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(visionOSBuildTargetGroup);
449+
var visionOSXRSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(
450+
BuildPipeline.GetBuildTargetGroup(BuildTarget.VisionOS));
443451

444452
if (visionOSXRSettings == null)
445-
{
446-
// There is no VisionOS Settings asset, create a default one
447-
var generalSettingsMapType = typeof(XRGeneralSettingsPerBuildTarget);
448-
var getOrCreateMethod = generalSettingsMapType.GetMethod("GetOrCreate", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
449-
var generalSettingsMap = getOrCreateMethod?.Invoke(null, null) as XRGeneralSettingsPerBuildTarget;
450-
if (generalSettingsMap == null)
451-
return false;
452-
453-
generalSettingsMap.CreateDefaultManagerSettingsForBuildTarget(visionOSBuildTargetGroup);
454-
visionOSXRSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(visionOSBuildTargetGroup);
455-
if (visionOSXRSettings == null)
456-
return false;
457-
}
453+
return false;
458454

459455
var manager = visionOSXRSettings.Manager;
460456
if (manager == null)

Editor/VisionOSBuildProcessor.PostProcessor.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#if UNITY_VISIONOS
22
using System;
3+
using System.Globalization;
34
using System.IO;
45
using System.Linq;
56
using UnityEditor.Build;
@@ -330,7 +331,7 @@ static string GetSettingsString()
330331
var VisionOSPersistentSystemOverlays: Visibility = {persistentSystemOverlaysString}
331332
var VisionOSImmersionStyle: ImmersionStyle = {immersionStyleString}
332333
var VisionOSSkipPresent = true
333-
var VisionOSEDRHeadroom = {edrHeadroom}
334+
var VisionOSEDRHeadroom = {edrHeadroom.ToString(CultureInfo.InvariantCulture)}
334335
";
335336
}
336337
}

Runtime/Input/VisionOSPlayModeInput.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ void OnEnable()
4343
{
4444
// Disable mouse input on input modules in order to prevent doubling up of events
4545
m_PreviouslyEnabledModules.Clear();
46+
#if UNITY_6000_4_OR_NEWER
47+
foreach (var inputModule in FindObjectsByType<XRUIInputModule>(FindObjectsInactive.Include))
48+
#else
4649
foreach (var inputModule in FindObjectsByType<XRUIInputModule>(FindObjectsInactive.Include, FindObjectsSortMode.None))
50+
#endif
4751
{
4852
if (inputModule.enableMouseInput)
4953
{

Runtime/Input/VisionOSSpatialPointerDevice.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ protected override void FinishSetup()
6464
void IInputUpdateCallbackReceiver.OnUpdate()
6565
{
6666
// Ensures we only dequeue one event per hand per input system update
67-
eventListener.ProcessEventQueue();
67+
eventListener?.ProcessEventQueue();
6868
}
6969

7070
/// <summary>

Runtime/Input/VisionOSSpatialPointerEventListener.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ static unsafe void OnInputEvent(int eventCount, void* eventsPtr)
4545
// MonoPInvokeCallback methods will leak exceptions and cause crashes; always use a try/catch in these methods
4646
try
4747
{
48-
var inputEvents = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray<VisionOSSpatialPointerEvent>(
48+
var inputEvents = NativeApi.Utilities.ConvertExistingDataToNativeArrayWithSafetyHandle<VisionOSSpatialPointerEvent>(
4949
eventsPtr,
5050
eventCount,
5151
Allocator.None);

Runtime/NativeApi/Utilities.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Runtime.InteropServices;
44
using Unity.Collections;
5+
using Unity.Collections.LowLevel.Unsafe;
56
using UnityEngine.XR.ARSubsystems;
67

78
namespace UnityEngine.XR.VisionOS
@@ -90,6 +91,17 @@ public static void HashSetToNativeArray<T>(HashSet<T> hashSet, ref NativeArray<T
9091
array[count++] = element;
9192
}
9293
}
94+
95+
public static unsafe NativeArray<T> ConvertExistingDataToNativeArrayWithSafetyHandle<T>(void* dataPointer, int length, Allocator allocator) where T : struct
96+
{
97+
var nativeArray = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray<T>(dataPointer, length, allocator);
98+
99+
#if ENABLE_UNITY_COLLECTIONS_CHECKS
100+
NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref nativeArray, AtomicSafetyHandle.GetTempUnsafePtrSliceHandle());
101+
#endif
102+
103+
return nativeArray;
104+
}
93105
}
94106
}
95107
}

Runtime/NativeApi/VisionOSReferenceObject.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,28 @@ static void ReferenceObjectURLLoadCompletionHandler(IntPtr context, IntPtr url,
5757
{
5858
try
5959
{
60-
var referenceObject = (VisionOSReferenceObject)GCHandle.FromIntPtr(context).Target;
61-
62-
if (success != 0)
60+
var contextHandle = GCHandle.FromIntPtr(context);
61+
try
6362
{
64-
referenceObject.m_Self = nativeReferenceObject;
65-
referenceObject.m_Loaded = true;
63+
var referenceObject = (VisionOSReferenceObject)contextHandle.Target;
64+
if (success != 0)
65+
{
66+
referenceObject.m_Self = nativeReferenceObject;
67+
referenceObject.m_Loaded = true;
68+
}
69+
else
70+
{
71+
referenceObject.m_Self = IntPtr.Zero;
72+
Debug.LogError("Failed to load referenceobject file.");
73+
74+
var convertedError = NativeApi.ObjectTracking.ar_error_copy_cf_error(error);
75+
NativeApi.ObjectTracking.UnityVisionOSPrintCFErrorDescription(convertedError);
76+
}
6677
}
67-
else
78+
finally
6879
{
69-
referenceObject.m_Self = IntPtr.Zero;
70-
Debug.LogError("Failed to load referenceobject file.");
71-
72-
var convertedError = NativeApi.ObjectTracking.ar_error_copy_cf_error(error);
73-
NativeApi.ObjectTracking.UnityVisionOSPrintCFErrorDescription(convertedError);
80+
contextHandle.Free();
7481
}
75-
GCHandle.FromIntPtr(context).Free();
7682
}
7783
catch (Exception e)
7884
{

0 commit comments

Comments
 (0)