Skip to content

Commit bc3d2ab

Browse files
authored
Merge pull request #278 from smitdylan2001/PerformanceFixes
CPU Performance Improvements
2 parents 054f686 + cc2e93f commit bc3d2ab

File tree

7 files changed

+107
-25
lines changed

7 files changed

+107
-25
lines changed

Packages/webxr-interactions/Runtime/Scripts/ControllerInteraction.cs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using UnityEngine;
1+
using UnityEngine;
22
using System.Collections.Generic;
33
#if WEBXR_INPUT_PROFILES
44
using WebXRInputProfile;
@@ -161,7 +161,7 @@ private void Update()
161161

162162
private void OnTriggerEnter(Collider other)
163163
{
164-
if (other.gameObject.tag != "Interactable")
164+
if (!other.gameObject.CompareTag("Interactable"))
165165
return;
166166

167167
contactRigidBodies.Add(other.gameObject.GetComponent<Rigidbody>());
@@ -170,7 +170,7 @@ private void OnTriggerEnter(Collider other)
170170

171171
private void OnTriggerExit(Collider other)
172172
{
173-
if (other.gameObject.tag != "Interactable")
173+
if (!other.gameObject.CompareTag("Interactable"))
174174
return;
175175

176176
contactRigidBodies.Remove(other.gameObject.GetComponent<Rigidbody>());
@@ -183,17 +183,15 @@ public void SetUseCollidersForHandJoints(bool value)
183183
{
184184
if (handJoints.ContainsKey(i))
185185
{
186-
var collider = handJoints[i].GetComponent<Collider>();
187-
if (collider != null)
186+
if (handJoints[i].TryGetComponent<Collider>(out var collider))
188187
{
189188
collider.enabled = useCollidersForHandJoints;
190189
}
191190
}
192191
#if WEBXR_INPUT_PROFILES
193192
if (handModelJoints.ContainsKey(i))
194193
{
195-
var collider = handModelJoints[i].GetComponent<Collider>();
196-
if (collider != null)
194+
if (handModelJoints[i].TryGetComponent<Collider>(out var collider))
197195
{
198196
collider.enabled = useCollidersForHandJoints;
199197
}
@@ -259,8 +257,13 @@ private void SetControllerVisible(bool visible)
259257

260258
private void SetInputProfileModelPose(bool alwaysUseGrip)
261259
{
260+
#if UNITY_2022_3_OR_NEWER
261+
inputProfileModelParent.transform.SetLocalPositionAndRotation(alwaysUseGrip ? Vector3.zero : controller.gripPosition,
262+
alwaysUseGrip ? Quaternion.identity : controller.gripRotation);
263+
#else
262264
inputProfileModelParent.transform.localPosition = alwaysUseGrip ? Vector3.zero : controller.gripPosition;
263265
inputProfileModelParent.transform.localRotation = alwaysUseGrip ? Quaternion.identity : controller.gripRotation;
266+
#endif
264267
}
265268

266269
private void SetHandJointsVisible(bool visible)
@@ -328,8 +331,12 @@ private void OnHandUpdate(WebXRHandData handData)
328331
{
329332
if (handJoints.ContainsKey(i))
330333
{
334+
#if UNITY_2022_3_OR_NEWER
335+
handJoints[i].SetLocalPositionAndRotation(rotationOffset * (handData.joints[i].position - handData.joints[0].position), rotationOffset * handData.joints[i].rotation);
336+
#else
331337
handJoints[i].localPosition = rotationOffset * (handData.joints[i].position - handData.joints[0].position);
332338
handJoints[i].localRotation = rotationOffset * handData.joints[i].rotation;
339+
#endif
333340
if (handData.joints[i].radius != handJoints[i].localScale.x && handData.joints[i].radius > 0)
334341
{
335342
handJoints[i].localScale = new Vector3(handData.joints[i].radius, handData.joints[i].radius, handData.joints[i].radius);
@@ -338,8 +345,12 @@ private void OnHandUpdate(WebXRHandData handData)
338345
else
339346
{
340347
var clone = Instantiate(handJointPrefab, transform);
348+
#if UNITY_2022_3_OR_NEWER
349+
clone.SetLocalPositionAndRotation(rotationOffset * (handData.joints[i].position - handData.joints[0].position), rotationOffset * handData.joints[i].rotation);
350+
#else
341351
clone.localPosition = rotationOffset * (handData.joints[i].position - handData.joints[0].position);
342352
clone.localRotation = rotationOffset * handData.joints[i].rotation;
353+
#endif
343354
if (handData.joints[i].radius > 0f)
344355
{
345356
clone.localScale = new Vector3(handData.joints[i].radius, handData.joints[i].radius, handData.joints[i].radius);

Packages/webxr-interactions/Runtime/Scripts/MixedRealityCaptureController.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,19 +278,28 @@ private void Ended()
278278
webcamParent.gameObject.SetActive(storedWebcamParentActive);
279279
stackCameras.SetActive(false);
280280
ClearRenderTextures();
281+
#if UNITY_2022_3_OR_NEWER
282+
spectatorCameraParent.SetPositionAndRotation(storedSpectatorParentPosition, storedSpectatorParentRotation);
283+
spectatorCameraTransform.SetPositionAndRotation(storedSpectatorPosition, storedSpectatorRotation);
284+
#else
281285
spectatorCameraParent.position = storedSpectatorParentPosition;
282286
spectatorCameraParent.rotation = storedSpectatorParentRotation;
283287
spectatorCameraTransform.position = storedSpectatorPosition;
284288
spectatorCameraTransform.rotation = storedSpectatorRotation;
289+
#endif
285290
spectatorCamera.cullingMask = storedSpectatorCullingMask;
286291
spectatorCamera.clearFlags = storedSpectatorClearFlags;
287292
spectatorCamera.fieldOfView = storedSpectatorFieldOfView;
288293
spectatorCamera.nearClipPlane = sotredSpectatorNearClipPlane;
289294
spectatorCamera.farClipPlane = sotredSpectatorFarClipPlane;
290295
spectatorCamera.orthographic = storedSpectatorOrthographic;
291296
spectatorCamera.orthographicSize = storedSpectatorOrthographicSize;
297+
#if UNITY_2022_3_OR_NEWER
298+
webcamParent.SetPositionAndRotation(storedWebcamParentPosition, storedWebcamParentRotation);
299+
#else
292300
webcamParent.position = storedWebcamParentPosition;
293301
webcamParent.rotation = storedWebcamParentRotation;
302+
#endif
294303
webcamParent.localScale = storedWebcamParentScale;
295304
webcam.TrySetLightingTexture(null);
296305
}

Packages/webxr-interactions/Runtime/Scripts/SceneHitTest.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using UnityEngine;
1+
using UnityEngine;
22

33
namespace WebXR.Interactions
44
{
@@ -77,8 +77,12 @@ void Update()
7777

7878
private void HandleOnXRChange(WebXRState state, int viewsCount, Rect leftRect, Rect rightRect)
7979
{
80+
#if UNITY_2022_3_OR_NEWER
81+
WebXRManager.Instance.transform.SetLocalPositionAndRotation(originPosition, originRotation);
82+
#else
8083
WebXRManager.Instance.transform.localPosition = originPosition;
8184
WebXRManager.Instance.transform.localRotation = originRotation;
85+
#endif
8286
isFollowing = false;
8387
if (state == WebXRState.AR)
8488
{
@@ -97,26 +101,38 @@ void HandleOnViewerHitTestUpdate(WebXRHitPoseData hitPoseData)
97101
if (hitPoseData.available)
98102
{
99103
isFollowing = true;
104+
#if UNITY_2022_3_OR_NEWER
105+
transform.SetLocalPositionAndRotation(hitPoseData.position, hitPoseData.rotation);
106+
#else
100107
transform.localPosition = hitPoseData.position;
101108
transform.localRotation = hitPoseData.rotation;
109+
#endif
102110
FollowByViewRotation(hitPoseData);
103111
}
104112
}
105113

106114
void FollowByHitRotation(WebXRHitPoseData hitPoseData)
107115
{
108116
Quaternion rotationOffset = Quaternion.Inverse(hitPoseData.rotation);
117+
#if UNITY_2022_3_OR_NEWER
118+
WebXRManager.Instance.transform.SetLocalPositionAndRotation(rotationOffset * (originPosition - hitPoseData.position), rotationOffset);
119+
#else
109120
WebXRManager.Instance.transform.localPosition = rotationOffset * (originPosition - hitPoseData.position);
110121
WebXRManager.Instance.transform.localRotation = rotationOffset;
122+
#endif
111123
}
112124

113125
void FollowByViewRotation(WebXRHitPoseData hitPoseData)
114126
{
115127
Vector2 diff = new Vector2(hitPoseData.position.x, hitPoseData.position.z) - new Vector2(arCameraTransform.localPosition.x, arCameraTransform.localPosition.z);
116128
float angle = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg - 90f;
117129
Quaternion rotationOffset = Quaternion.Euler(0, angle, 0);
130+
#if UNITY_2022_3_OR_NEWER
131+
WebXRManager.Instance.transform.SetLocalPositionAndRotation(rotationOffset * (originPosition - hitPoseData.position), rotationOffset);
132+
#else
118133
WebXRManager.Instance.transform.localPosition = rotationOffset * (originPosition - hitPoseData.position);
119134
WebXRManager.Instance.transform.localRotation = rotationOffset;
135+
#endif
120136
}
121137
}
122138
}

Packages/webxr/Editor/WebXRPackage.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,7 @@ private class WebXRPackageMetadata : IXRPackageMetadata
4646
public bool PopulateNewSettingsInstance(ScriptableObject obj)
4747
{
4848
var settings = obj as WebXRSettings;
49-
if (settings != null)
50-
{
51-
return true;
52-
}
53-
return false;
49+
return settings != null;
5450
}
5551
}
5652
}

Packages/webxr/Runtime/Scripts/WebXRCamera.cs

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using UnityEngine;
1+
using UnityEngine;
22

33
namespace WebXR
44
{
@@ -89,21 +89,31 @@ private void UpdateFollower()
8989
switch (xrState)
9090
{
9191
case WebXRState.AR:
92+
#if UNITY_2022_3_OR_NEWER
93+
cameraFollower.SetLocalPositionAndRotation(viewsCount > 1 ? (cameraARL.transform.localPosition + cameraARR.transform.localPosition) * 0.5f : cameraARL.transform.localPosition,
94+
cameraARL.transform.localRotation);
95+
#else
96+
cameraFollower.localPosition = viewsCount > 1 ? (cameraARL.transform.localPosition + cameraARR.transform.localPosition) * 0.5f : cameraARL.transform.localPosition;
9297
cameraFollower.localRotation = cameraARL.transform.localRotation;
93-
if (viewsCount > 1)
94-
{
95-
cameraFollower.localPosition = (cameraARL.transform.localPosition + cameraARR.transform.localPosition) * 0.5f;
96-
return;
97-
}
98-
cameraFollower.localPosition = cameraARL.transform.localPosition;
98+
#endif
9999
return;
100100
case WebXRState.VR:
101-
cameraFollower.localRotation = cameraL.transform.localRotation;
101+
#if UNITY_2022_3_OR_NEWER
102+
cameraFollower.SetLocalPositionAndRotation((cameraL.transform.localPosition + cameraR.transform.localPosition) * 0.5f,
103+
cameraL.transform.localRotation);
104+
#else
102105
cameraFollower.localPosition = (cameraL.transform.localPosition + cameraR.transform.localPosition) * 0.5f;
106+
cameraFollower.localRotation = cameraL.transform.localRotation;
107+
#endif
103108
return;
104109
}
110+
#if UNITY_2022_3_OR_NEWER
111+
cameraFollower.SetLocalPositionAndRotation(cameraMain.transform.localPosition,
112+
cameraMain.transform.localRotation);
113+
#else
105114
cameraFollower.localRotation = cameraMain.transform.localRotation;
106115
cameraFollower.localPosition = cameraMain.transform.localPosition;
116+
#endif
107117
}
108118

109119
public Quaternion GetLocalRotation()
@@ -169,20 +179,37 @@ private void OnHeadsetUpdate(
169179
{
170180
if (xrState == WebXRState.VR)
171181
{
182+
#if UNITY_2022_3_OR_NEWER
183+
cameraL.transform.SetLocalPositionAndRotation(leftPosition, leftRotation);
184+
#else
172185
cameraL.transform.localPosition = leftPosition;
173186
cameraL.transform.localRotation = leftRotation;
187+
#endif
174188
cameraL.projectionMatrix = leftProjectionMatrix;
189+
190+
#if UNITY_2022_3_OR_NEWER
191+
cameraR.transform.SetLocalPositionAndRotation(rightPosition, rightRotation);
192+
#else
175193
cameraR.transform.localPosition = rightPosition;
176194
cameraR.transform.localRotation = rightRotation;
195+
#endif
177196
cameraR.projectionMatrix = rightProjectionMatrix;
178197
}
179198
else if (xrState == WebXRState.AR)
180199
{
200+
#if UNITY_2022_3_OR_NEWER
201+
cameraARL.transform.SetLocalPositionAndRotation(leftPosition, leftRotation);
202+
#else
181203
cameraARL.transform.localPosition = leftPosition;
182204
cameraARL.transform.localRotation = leftRotation;
205+
#endif
183206
cameraARL.projectionMatrix = leftProjectionMatrix;
207+
#if UNITY_2022_3_OR_NEWER
208+
cameraARR.transform.SetLocalPositionAndRotation(rightPosition, rightRotation);
209+
#else
184210
cameraARR.transform.localPosition = rightPosition;
185211
cameraARR.transform.localRotation = rightRotation;
212+
#endif
186213
cameraARR.projectionMatrix = rightProjectionMatrix;
187214
}
188215
}

Packages/webxr/Runtime/Scripts/WebXRController.cs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,13 +371,23 @@ private void OnControllerUpdate(WebXRControllerData controllerData)
371371
gripPosition = controllerData.gripPosition;
372372
if (alwaysUseGrip)
373373
{
374+
#if UNITY_2022_3_OR_NEWER
375+
transform.SetLocalPositionAndRotation(controllerData.rotation * (controllerData.position + controllerData.gripPosition),
376+
controllerData.rotation * controllerData.gripRotation);
377+
#else
374378
transform.localRotation = controllerData.rotation * controllerData.gripRotation;
375379
transform.localPosition = controllerData.rotation * (controllerData.position + controllerData.gripPosition);
380+
#endif
376381
}
377382
else
378383
{
384+
#if UNITY_2022_3_OR_NEWER
385+
transform.SetLocalPositionAndRotation(controllerData.position,
386+
controllerData.rotation);
387+
#else
379388
transform.localRotation = controllerData.rotation;
380389
transform.localPosition = controllerData.position;
390+
#endif
381391
}
382392
// Oculus on desktop returns wrong rotation for targetRaySpace, this is an ugly hack to fix it
383393
if (CheckOculusLinkBug())
@@ -428,13 +438,23 @@ private void HandleOculusLinkBug(WebXRControllerData controllerData)
428438
gripPosition = controllerData.gripPosition;
429439
if (alwaysUseGrip)
430440
{
441+
#if UNITY_2022_3_OR_NEWER
442+
transform.SetLocalPositionAndRotation(controllerData.rotation * (controllerData.position + controllerData.gripPosition),
443+
controllerData.rotation * controllerData.gripRotation);
444+
#else
431445
transform.localRotation = controllerData.rotation * controllerData.gripRotation;
432446
transform.localPosition = controllerData.rotation * (controllerData.position + controllerData.gripPosition);
447+
#endif
433448
}
434449
else
435450
{
451+
#if UNITY_2022_3_OR_NEWER
452+
transform.SetLocalPositionAndRotation(controllerData.position,
453+
controllerData.rotation * oculusOffsetRay);
454+
#else
436455
transform.localRotation = controllerData.rotation * oculusOffsetRay;
437456
transform.localPosition = controllerData.position;
457+
#endif
438458
}
439459
}
440460

@@ -468,10 +488,13 @@ private void OnHandUpdateInternal(WebXRHandData handData)
468488
}
469489
SetControllerActive(false);
470490
SetHandActive(true);
471-
491+
#if UNITY_2022_3_OR_NEWER
492+
transform.SetLocalPositionAndRotation(handData.joints[0].position,
493+
handData.joints[0].rotation);
494+
#else
472495
transform.localPosition = handData.joints[0].position;
473496
transform.localRotation = handData.joints[0].rotation;
474-
497+
#endif
475498
trigger = handData.trigger;
476499
squeeze = handData.squeeze;
477500

Packages/webxr/Runtime/Scripts/WebXRManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,15 @@ public bool isSupportedAR
7272
{
7373
get
7474
{
75-
return subsystem == null ? false : subsystem.capabilities.canPresentAR;
75+
return subsystem != null && subsystem.capabilities.canPresentAR;
7676
}
7777
}
7878

7979
public bool isSupportedVR
8080
{
8181
get
8282
{
83-
return subsystem == null ? false : subsystem.capabilities.canPresentVR;
83+
return subsystem != null && subsystem.capabilities.canPresentVR;
8484
}
8585
}
8686

0 commit comments

Comments
 (0)