ClearShotTests.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #if CINEMACHINE_PHYSICS
  2. using System.Collections;
  3. using NUnit.Framework;
  4. using UnityEngine;
  5. using Cinemachine;
  6. using NUnit.Framework.Interfaces;
  7. using UnityEngine.TestTools;
  8. namespace Tests.Runtime
  9. {
  10. [TestFixture]
  11. public class ClearShotTests : CinemachineFixtureBase
  12. {
  13. private GameObject m_Character;
  14. private CinemachineClearShot m_ClearShot;
  15. private CinemachineVirtualCamera m_Vcam1;
  16. private CinemachineVirtualCamera m_Vcam2;
  17. [SetUp]
  18. public override void SetUp()
  19. {
  20. // a basic "character" to use as a lookat
  21. m_Character = CreateGameObject("Character");
  22. m_Character.transform.position = new Vector3(10, 0, 1);
  23. // main camera
  24. CreateGameObject("Camera", typeof(Camera), typeof(CinemachineBrain));
  25. // a ClearShot camera
  26. var clearShotHolder = CreateGameObject("CM ClearShot", typeof(CinemachineClearShot), typeof(CinemachineCollider));
  27. m_ClearShot = clearShotHolder.GetComponent<CinemachineClearShot>();
  28. m_ClearShot.LookAt = m_Character.transform;
  29. var clearShotCollider = clearShotHolder.GetComponent<CinemachineCollider>();
  30. clearShotCollider.m_MinimumDistanceFromTarget = 0.1f;
  31. // a stationary vcam1 with a hard lookat
  32. var vcam1Holder = CreateGameObject("CM Vcam1", typeof(CinemachineVirtualCamera));
  33. vcam1Holder.transform.SetParent(clearShotHolder.transform);
  34. vcam1Holder.transform.position = new Vector3(0, 0, 8);
  35. m_Vcam1 = vcam1Holder.GetComponent<CinemachineVirtualCamera>();
  36. m_Vcam1.AddCinemachineComponent<CinemachineHardLookAt>();
  37. m_Vcam1.Priority = 20;
  38. // a completely locked vcam2
  39. var vcam2Holder = CreateGameObject("CM Vcam2", typeof(CinemachineVirtualCamera));
  40. vcam2Holder.transform.SetParent(clearShotHolder.transform);
  41. vcam2Holder.transform.position = new Vector3(0, 0, -2);
  42. m_Vcam2 = vcam2Holder.GetComponent<CinemachineVirtualCamera>();
  43. m_Vcam2.Priority = 10;
  44. // a "wall" composed of a single quad that partially obscures vcam1, but not vcam2
  45. var wall = CreatePrimitive(PrimitiveType.Quad);
  46. wall.transform.SetPositionAndRotation(new Vector3(0, 0, 4), Quaternion.Euler(0, 180, 0));
  47. wall.transform.localScale = new Vector3(2, 2, 2);
  48. base.SetUp();
  49. }
  50. private static IEnumerable ClearShotTestCases
  51. {
  52. get
  53. {
  54. yield return new TestCaseData(new Vector3(100, 0, 1), "CM Vcam1").Returns(null);
  55. yield return new TestCaseData(new Vector3(5, 0, 1), "CM Vcam1").Returns(null);
  56. yield return new TestCaseData(new Vector3(0, 0, 1), "CM Vcam2").Returns(null);
  57. yield return new TestCaseData(new Vector3(-5, 0, 1), "CM Vcam1").Returns(null);
  58. yield return new TestCaseData(new Vector3(-100, 0, 1), "CM Vcam1").Returns(null);
  59. }
  60. }
  61. [UnityTest, TestCaseSource(nameof(ClearShotTestCases))]
  62. public IEnumerator TestClearShotSwitchesCameras(Vector3 characterPosition, string expectedVcamName)
  63. {
  64. m_Character.transform.position = characterPosition;
  65. yield return new WaitForSeconds(0.5f);
  66. Assert.That(m_ClearShot.LiveChild.Name, Is.EqualTo(expectedVcamName));
  67. }
  68. }
  69. }
  70. #endif