@@ -106,7 +106,7 @@ public IEnumerator TestLinePointers()
106106 /// bounds are outside the camera FOV.
107107 /// </summary>
108108 [ UnityTest ]
109- public IEnumerator TestPointerFieldOfViewLargeCollider ( )
109+ public IEnumerator TestPointerFOVLargeCollider ( )
110110 {
111111 var rightHand = new TestHand ( Handedness . Right ) ;
112112 yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
@@ -120,47 +120,19 @@ public IEnumerator TestPointerFieldOfViewLargeCollider()
120120 var spherePointer = PointerUtils . GetPointer < SpherePointer > ( Handedness . Right ) ;
121121 var pokePointer = PointerUtils . GetPointer < PokePointer > ( Handedness . Right ) ;
122122
123- yield return TestPointerFieldOfViewLargeColliderHelper ( spherePointer , cube , rightHand ) ;
124- yield return TestPointerFieldOfViewLargeColliderHelper ( pokePointer , cube , rightHand ) ;
123+ yield return TestPointerFOVLargeColliderHelper ( spherePointer , cube , rightHand ) ;
124+ yield return TestPointerFOVLargeColliderHelper ( pokePointer , cube , rightHand ) ;
125125
126126 rightHand . Hide ( ) ;
127127 GameObject . Destroy ( cube ) ;
128128 }
129129
130-
131- private IEnumerator TestPointerFieldOfViewLargeColliderHelper ( IMixedRealityPointer myPointer , GameObject cube , TestHand testHand )
132- {
133- cube . transform . localScale = new Vector3 ( 3 , 3 , 0.05f ) ;
134- float [ ] yOffsets = new float [ ] { - 1f , 0f , 1f } ;
135- float [ ] xOffsets = new float [ ] { - 1f , 0f , 1f } ;
136- float [ ] zOffsets = new float [ ] { 1f , - 1f } ;
137-
138- foreach ( var zOffset in zOffsets )
139- {
140- foreach ( var yOffset in yOffsets )
141- {
142- foreach ( var xOffset in xOffsets )
143- {
144- var cameraPos = CameraCache . Main . transform . position ;
145- var pos = new Vector3 ( cameraPos . x + xOffset , cameraPos . y + yOffset , cameraPos . z + zOffset ) ;
146- cube . transform . position = pos ;
147- yield return testHand . MoveTo ( cube . transform . position ) ;
148- yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
149- bool isInFov = CameraCache . Main . IsInFOVCached ( cube . GetComponent < BoxCollider > ( ) ) ;
150- Assert . IsTrue ( zOffset == 1f ? myPointer . IsInteractionEnabled : ! myPointer . IsInteractionEnabled ,
151- $ "Pointer { myPointer . PointerName } in incorrect state. IsInFOV { isInFov } Cube size { cube . transform . localScale } location { cube . transform . position } .") ;
152- }
153- }
154- }
155- }
156-
157-
158130 /// <summary>
159131 /// Tests that pointers behave correctly when interacting with objects inside and outside
160132 /// its field of view
161133 /// </summary>
162134 [ UnityTest ]
163- public IEnumerator TestPointerFieldOfView ( )
135+ public IEnumerator TestPointerFOV ( )
164136 {
165137 var rightHand = new TestHand ( Handedness . Right ) ;
166138 yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
@@ -174,51 +146,13 @@ public IEnumerator TestPointerFieldOfView()
174146 var spherePointer = PointerUtils . GetPointer < SpherePointer > ( Handedness . Right ) ;
175147 var pokePointer = PointerUtils . GetPointer < PokePointer > ( Handedness . Right ) ;
176148
177- yield return TestPointerFieldOfViewHelper ( spherePointer , cube , rightHand ) ;
178- yield return TestPointerFieldOfViewHelper ( pokePointer , cube , rightHand ) ;
149+ yield return TestPointerFOVHelper ( spherePointer , cube , rightHand ) ;
150+ yield return TestPointerFOVHelper ( pokePointer , cube , rightHand ) ;
179151
180152 rightHand . Hide ( ) ;
181153 GameObject . Destroy ( cube ) ;
182154 }
183155
184- private IEnumerator TestPointerFieldOfViewHelper ( IMixedRealityPointer myPointer , GameObject cube , TestHand testHand )
185- {
186- // Cube in front of camera
187- cube . transform . SetPositionAndRotation ( Vector3 . forward * 1f , Quaternion . identity ) ;
188- cube . transform . localScale = Vector3 . one * 0.1f ;
189- yield return testHand . MoveTo ( cube . transform . position ) ;
190- yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
191- Assert . IsTrue ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should be enabled, cube in front camera. Cube size { cube . transform . localScale } location { cube . transform . position } .") ;
192-
193- // Cube above camera
194- cube . transform . Translate ( Vector3 . up * 10 ) ;
195- yield return testHand . MoveTo ( cube . transform . position ) ;
196- yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
197- Assert . IsFalse ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should NOT be enabled, cube behind camera. Cube size { cube . transform . localScale } location { cube . transform . position } .") ;
198-
199- // For sphere and poke pointers, test that setting IgnoreCollidersNotInFOV works
200- if ( myPointer is SpherePointer spherePointer )
201- {
202- spherePointer . IgnoreCollidersNotInFOV = false ;
203- yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
204- Assert . IsTrue ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should be enabled because IgnoreCollidersNotInFOV is false.") ;
205- spherePointer . IgnoreCollidersNotInFOV = true ;
206- }
207- else if ( myPointer is PokePointer pokePointer )
208- {
209- pokePointer . IgnoreCollidersNotInFOV = false ;
210- yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
211- Assert . IsTrue ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should be enabled because IgnoreCollidersNotInFOV is false.") ;
212- pokePointer . IgnoreCollidersNotInFOV = true ;
213- }
214-
215- // Move it back to be visible again
216- cube . transform . Translate ( Vector3 . up * - 10f ) ;
217- yield return testHand . MoveTo ( cube . transform . position ) ;
218- yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
219- Assert . IsTrue ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should be enabled because it is near object inside of FOV. Cube size { cube . transform . localScale } location { cube . transform . position } .") ;
220- }
221-
222156 /// <summary>
223157 /// Tests that sphere pointer grabs object when hand is inside a giant grabbable
224158 /// </summary>
@@ -423,6 +357,69 @@ private static T CreatePointerPrefab<T>(string prefabPath,
423357 return pointer ;
424358 }
425359
360+ private IEnumerator TestPointerFOVHelper ( IMixedRealityPointer myPointer , GameObject cube , TestHand testHand )
361+ {
362+ // Cube in front of camera
363+ cube . transform . SetPositionAndRotation ( Vector3 . forward * 1f , Quaternion . identity ) ;
364+ cube . transform . localScale = Vector3 . one * 0.1f ;
365+ yield return testHand . MoveTo ( cube . transform . position ) ;
366+ yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
367+ Assert . IsTrue ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should be enabled, cube in front camera. Cube size { cube . transform . localScale } location { cube . transform . position } .") ;
368+
369+ // Cube above camera
370+ cube . transform . Translate ( Vector3 . up * 10 ) ;
371+ yield return testHand . MoveTo ( cube . transform . position ) ;
372+ yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
373+ Assert . IsFalse ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should NOT be enabled, cube behind camera. Cube size { cube . transform . localScale } location { cube . transform . position } .") ;
374+
375+ // For sphere and poke pointers, test that setting IgnoreCollidersNotInFOV works
376+ if ( myPointer is SpherePointer spherePointer )
377+ {
378+ spherePointer . IgnoreCollidersNotInFOV = false ;
379+ yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
380+ Assert . IsTrue ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should be enabled because IgnoreCollidersNotInFOV is false.") ;
381+ spherePointer . IgnoreCollidersNotInFOV = true ;
382+ }
383+ else if ( myPointer is PokePointer pokePointer )
384+ {
385+ pokePointer . IgnoreCollidersNotInFOV = false ;
386+ yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
387+ Assert . IsTrue ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should be enabled because IgnoreCollidersNotInFOV is false.") ;
388+ pokePointer . IgnoreCollidersNotInFOV = true ;
389+ }
390+
391+ // Move it back to be visible again
392+ cube . transform . Translate ( Vector3 . up * - 10f ) ;
393+ yield return testHand . MoveTo ( cube . transform . position ) ;
394+ yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
395+ Assert . IsTrue ( myPointer . IsInteractionEnabled , $ "Pointer { myPointer . PointerName } should be enabled because it is near object inside of FOV. Cube size { cube . transform . localScale } location { cube . transform . position } .") ;
396+ }
397+
398+ private IEnumerator TestPointerFOVLargeColliderHelper ( IMixedRealityPointer myPointer , GameObject cube , TestHand testHand )
399+ {
400+ cube . transform . localScale = new Vector3 ( 3 , 3 , 0.05f ) ;
401+ float [ ] yOffsets = new float [ ] { - 1f , 0f , 1f } ;
402+ float [ ] xOffsets = new float [ ] { - 1f , 0f , 1f } ;
403+ float [ ] zOffsets = new float [ ] { 1f , - 1f } ;
404+ var collider = cube . GetComponent < BoxCollider > ( ) ;
405+ foreach ( var zOffset in zOffsets )
406+ {
407+ foreach ( var yOffset in yOffsets )
408+ {
409+ foreach ( var xOffset in xOffsets )
410+ {
411+ var cameraPos = CameraCache . Main . transform . position ;
412+ var pos = new Vector3 ( cameraPos . x + xOffset , cameraPos . y + yOffset , cameraPos . z + zOffset ) ;
413+ cube . transform . position = pos ;
414+ yield return testHand . MoveTo ( cube . transform . position ) ;
415+ yield return PlayModeTestUtilities . WaitForInputSystemUpdate ( ) ;
416+ bool isInFov = CameraCache . Main . IsInFOVCached ( collider ) ;
417+ Assert . IsTrue ( zOffset == 1f ? myPointer . IsInteractionEnabled : ! myPointer . IsInteractionEnabled ,
418+ $ "Pointer { myPointer . PointerName } in incorrect state. IsInFOV { isInFov } Cube size { cube . transform . localScale } location { cube . transform . position } .") ;
419+ }
420+ }
421+ }
422+ }
426423 #endregion
427424 }
428425}
0 commit comments