StateDrivenCameraTests.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #if CINEMACHINE_UNITY_ANIMATION
  2. using System.Collections;
  3. using NUnit.Framework;
  4. using UnityEngine;
  5. using UnityEngine.TestTools;
  6. using UnityEditor;
  7. using UnityEditor.Animations;
  8. using Cinemachine;
  9. namespace Tests.Runtime
  10. {
  11. [TestFixture]
  12. public class StateDrivenCameraTests : CinemachineFixtureBase
  13. {
  14. CinemachineStateDrivenCamera m_StateDrivenCamera;
  15. Animator m_Animator;
  16. CinemachineVirtualCamera m_Vcam1, m_Vcam2;
  17. [SetUp]
  18. public override void SetUp()
  19. {
  20. CreateGameObject("Camera", typeof(Camera), typeof(CinemachineBrain));
  21. // Create a minimal character controller
  22. var character = CreateGameObject("Character", typeof(Animator));
  23. var controller = AssetDatabase.LoadMainAssetAtPath("Packages/com.unity.cinemachine/Tests/Runtime/TestController.controller") as AnimatorController;
  24. character.GetComponent<Animator>().runtimeAnimatorController = controller;
  25. // Create a state-driven camera with two vcams
  26. var stateDrivenCamera = CreateGameObject("CM StateDrivenCamera", typeof(CinemachineStateDrivenCamera)).GetComponent<CinemachineStateDrivenCamera>();
  27. stateDrivenCamera.m_AnimatedTarget = character.GetComponent<Animator>();
  28. var vcam1 = CreateGameObject("Vcam1", typeof(CinemachineVirtualCamera)).GetComponent<CinemachineVirtualCamera>();
  29. var vcam2 = CreateGameObject("Vcam1", typeof(CinemachineVirtualCamera)).GetComponent<CinemachineVirtualCamera>();
  30. vcam1.gameObject.transform.SetParent(stateDrivenCamera.gameObject.transform);
  31. vcam2.gameObject.transform.SetParent(stateDrivenCamera.gameObject.transform);
  32. // Map states to vcams
  33. stateDrivenCamera.m_Instructions = new[]
  34. {
  35. new CinemachineStateDrivenCamera.Instruction() {m_FullHash = controller.layers[0].stateMachine.states[0].GetHashCode(), m_VirtualCamera = vcam1},
  36. new CinemachineStateDrivenCamera.Instruction() {m_FullHash = controller.layers[0].stateMachine.states[1].GetHashCode(), m_VirtualCamera = vcam2}
  37. };
  38. m_StateDrivenCamera = stateDrivenCamera;
  39. m_Animator = character.GetComponent<Animator>();
  40. m_Vcam1 = vcam1;
  41. m_Vcam2 = vcam2;
  42. base.SetUp();
  43. }
  44. [UnityTest]
  45. public IEnumerator Test_StateDrivenCamera_Follows_State()
  46. {
  47. yield return null; // wait one frame
  48. Assert.That(m_StateDrivenCamera.LiveChild.Name, Is.EqualTo(m_Vcam1.Name));
  49. m_Animator.SetTrigger("DoTransitionToState2");
  50. yield return null; // wait one frame
  51. Assert.That(m_StateDrivenCamera.LiveChild.Name, Is.EqualTo(m_Vcam2.Name));
  52. m_Animator.SetTrigger("DoTransitionToState1");
  53. yield return null; // wait one frame
  54. Assert.That(m_StateDrivenCamera.LiveChild.Name, Is.EqualTo(m_Vcam1.Name));
  55. }
  56. }
  57. }
  58. #endif