FreelookForcePositionTests.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System.Collections;
  2. using Cinemachine;
  3. using NUnit.Framework;
  4. using UnityEngine;
  5. using UnityEngine.TestTools;
  6. using UnityEngine.TestTools.Utils;
  7. namespace Tests.Runtime
  8. {
  9. public class FreelookForcePositionTests : CinemachineFixtureBase
  10. {
  11. CinemachineFreeLook m_Freelook;
  12. Vector3 m_OriginalPosition;
  13. Quaternion m_OriginalOrientation;
  14. [SetUp]
  15. public override void SetUp()
  16. {
  17. CreateGameObject("MainCamera", typeof(Camera), typeof(CinemachineBrain)).GetComponent<Camera>();
  18. var vcamHolder = CreateGameObject("CM Freelook", typeof(CinemachineFreeLook));
  19. m_Freelook = vcamHolder.GetComponent<CinemachineFreeLook>();
  20. m_Freelook.Priority = 100;
  21. base.SetUp();
  22. }
  23. [TearDown]
  24. public override void TearDown()
  25. {
  26. base.TearDown();
  27. }
  28. static IEnumerable RigSetups
  29. {
  30. get
  31. {
  32. yield return new TestCaseData(new[]
  33. {
  34. new CinemachineFreeLook.Orbit { m_Height = 0, m_Radius = 1 },
  35. new CinemachineFreeLook.Orbit { m_Height = 1, m_Radius = 2 },
  36. new CinemachineFreeLook.Orbit { m_Height = 2, m_Radius = 3 }
  37. }).SetName("Rig1").Returns(null);
  38. yield return new TestCaseData(new[]
  39. {
  40. new CinemachineFreeLook.Orbit { m_Height = 5, m_Radius = 3 },
  41. new CinemachineFreeLook.Orbit { m_Height = 3, m_Radius = 1 },
  42. new CinemachineFreeLook.Orbit { m_Height = 1, m_Radius = 2 }
  43. }).SetName("Rig2").Returns(null);
  44. yield return new TestCaseData(new[]
  45. {
  46. new CinemachineFreeLook.Orbit { m_Height = -1, m_Radius = 3 },
  47. new CinemachineFreeLook.Orbit { m_Height = -3, m_Radius = 8 },
  48. new CinemachineFreeLook.Orbit { m_Height = -5, m_Radius = 5 }
  49. }).SetName("Rig3").Returns(null);
  50. }
  51. }
  52. [UnityTest, TestCaseSource(nameof(RigSetups)), ConditionalIgnore("IgnoreHDRPInstability", "This test is unstable on HDRP")]
  53. public IEnumerator Test_Freelook_ForcePosition_Precision(CinemachineFreeLook.Orbit[] rigSetup)
  54. {
  55. for (var i = 0; i < m_Freelook.m_Orbits.Length; ++i)
  56. m_Freelook.m_Orbits[i] = rigSetup[i];
  57. const float steps = 20f;
  58. for (var i = 0f; i <= steps; ++i)
  59. {
  60. var axisValue = i / steps;
  61. m_Freelook.m_XAxis.Value = 180f * axisValue; // x axis range [0, 180]
  62. m_Freelook.m_YAxis.Value = axisValue; // y axis range [0, 1]
  63. yield return null;
  64. // save camera current position and rotation
  65. m_OriginalPosition = m_Freelook.State.CorrectedPosition;
  66. m_OriginalOrientation = m_Freelook.State.CorrectedOrientation;
  67. yield return null;
  68. m_Freelook.ForceCameraPosition(m_OriginalPosition, m_OriginalOrientation);
  69. yield return null;
  70. Assert.That(m_Freelook.State.CorrectedPosition, Is.EqualTo(m_OriginalPosition).Using(new Vector3EqualityComparer(0.01f)));
  71. Assert.That(m_Freelook.State.CorrectedOrientation, Is.EqualTo(m_OriginalOrientation).Using(new QuaternionEqualityComparer(0.001f)));
  72. }
  73. }
  74. }
  75. }