BrainTargetOverrideTests.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using System.Collections;
  2. using NUnit.Framework;
  3. using UnityEngine;
  4. using UnityEngine.TestTools;
  5. using Cinemachine;
  6. namespace Tests.Runtime
  7. {
  8. public class BrainTargetOverrideTests : CinemachineFixtureBase
  9. {
  10. GameObject m_CameraHolderWithBrain, m_CameraHolderWithoutBrain, m_GoWithBrain, m_GoWithoutBrain;
  11. CinemachineVirtualCamera m_Vcam;
  12. GameObject m_FollowObject;
  13. CinemachineBrain m_BrainAlone, m_BrainAlone2;
  14. [SetUp]
  15. public override void SetUp()
  16. {
  17. m_CameraHolderWithBrain = CreateGameObject("MainCamera 1", typeof(Camera), typeof(CinemachineBrain));
  18. m_CameraHolderWithoutBrain = CreateGameObject("MainCamera 2", typeof(Camera));
  19. m_BrainAlone = CreateGameObject("BrainAlone for MainCamera 2", typeof(CinemachineBrain)).GetComponent<CinemachineBrain>();
  20. m_BrainAlone.ControlledObject = m_CameraHolderWithoutBrain;
  21. m_GoWithBrain = CreateGameObject("Empty 1", typeof(CinemachineBrain));
  22. m_GoWithoutBrain = CreateGameObject("Empty 2");
  23. m_BrainAlone2 = CreateGameObject("BrainAlone for Empty 2", typeof(CinemachineBrain)).GetComponent<CinemachineBrain>();
  24. m_BrainAlone2.ControlledObject = m_GoWithoutBrain;
  25. m_Vcam = CreateGameObject("CM Vcam", typeof(CinemachineVirtualCamera)).GetComponent<CinemachineVirtualCamera>();
  26. m_Vcam.Priority = 100;
  27. m_FollowObject = CreateGameObject("Follow Object");
  28. base.SetUp();
  29. }
  30. Vector3 m_Delta = new Vector3(10, 0, 0);
  31. IEnumerator CheckThatBrainsAreControllingTheirTargets()
  32. {
  33. m_FollowObject.transform.position += m_Delta;
  34. yield return null;
  35. AreBrainControlledTransformsTheSame();
  36. m_FollowObject.transform.position += m_Delta;
  37. yield return null;
  38. AreBrainControlledTransformsTheSame();
  39. void AreBrainControlledTransformsTheSame()
  40. {
  41. Assert.That(m_CameraHolderWithBrain.GetComponent<Camera>().fieldOfView == m_CameraHolderWithoutBrain.GetComponent<Camera>().fieldOfView, Is.True);
  42. Assert.That(EqualTransforms(m_CameraHolderWithBrain.transform, m_CameraHolderWithoutBrain.transform), Is.True);
  43. Assert.That(EqualTransforms(m_CameraHolderWithBrain.transform, m_GoWithBrain.transform), Is.True);
  44. Assert.That(EqualTransforms(m_CameraHolderWithBrain.transform, m_GoWithoutBrain.transform), Is.True);
  45. bool EqualTransforms(Transform a, Transform b) => a.position == b.position && a.rotation == b.rotation;
  46. }
  47. }
  48. IEnumerator CheckDisconnectedBrains()
  49. {
  50. m_BrainAlone.ControlledObject = null;
  51. m_BrainAlone2.ControlledObject = null;
  52. m_FollowObject.transform.position += m_Delta;
  53. yield return null;
  54. var position = m_CameraHolderWithBrain.transform.position;
  55. Assert.That(position == m_CameraHolderWithoutBrain.transform.position, Is.False);
  56. Assert.That(position == m_GoWithoutBrain.transform.position, Is.False);
  57. }
  58. [UnityTest]
  59. public IEnumerator DoNothing()
  60. {
  61. m_Vcam.m_Lens.FieldOfView = 50;
  62. yield return CheckThatBrainsAreControllingTheirTargets();
  63. }
  64. [UnityTest]
  65. public IEnumerator ThirdPerson()
  66. {
  67. m_Vcam.AddCinemachineComponent<Cinemachine3rdPersonFollow>();
  68. m_Vcam.m_Lens.FieldOfView = 50;
  69. m_Vcam.Follow = m_FollowObject.transform;
  70. yield return CheckThatBrainsAreControllingTheirTargets();
  71. yield return CheckDisconnectedBrains();
  72. }
  73. [UnityTest]
  74. public IEnumerator FramingTransposer()
  75. {
  76. var component = m_Vcam.AddCinemachineComponent<CinemachineFramingTransposer>();
  77. component.m_XDamping = 0;
  78. component.m_YDamping = 0;
  79. component.m_ZDamping = 0;
  80. component.m_CameraDistance = 1f;
  81. m_Vcam.Follow = m_FollowObject.transform;
  82. yield return CheckThatBrainsAreControllingTheirTargets();
  83. yield return CheckDisconnectedBrains();
  84. }
  85. [UnityTest]
  86. public IEnumerator HardLockToTarget()
  87. {
  88. m_Vcam.AddCinemachineComponent<CinemachineHardLockToTarget>();
  89. m_Vcam.Follow = m_FollowObject.transform;
  90. yield return CheckThatBrainsAreControllingTheirTargets();
  91. yield return CheckDisconnectedBrains();
  92. }
  93. [UnityTest]
  94. public IEnumerator OrbTransposer()
  95. {
  96. var component = m_Vcam.AddCinemachineComponent<CinemachineOrbitalTransposer>();
  97. component.m_XDamping = 0;
  98. component.m_YDamping = 0;
  99. component.m_ZDamping = 0;
  100. component.m_FollowOffset = new Vector3(0, 0, 0);
  101. m_Vcam.Follow = m_FollowObject.transform;
  102. yield return CheckThatBrainsAreControllingTheirTargets();
  103. yield return CheckDisconnectedBrains();
  104. }
  105. [UnityTest]
  106. public IEnumerator Transposer()
  107. {
  108. var component = m_Vcam.AddCinemachineComponent<CinemachineTransposer>();
  109. component.m_XDamping = 0;
  110. component.m_YDamping = 0;
  111. component.m_ZDamping = 0;
  112. component.m_FollowOffset = new Vector3(0, 0, 0);
  113. m_Vcam.Follow = m_FollowObject.transform;
  114. yield return CheckThatBrainsAreControllingTheirTargets();
  115. yield return CheckDisconnectedBrains();
  116. }
  117. }
  118. }