AVPlayVideo.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Collections;
  3. using RenderHeads.Media.AVProVideo;
  4. using UnityEngine;
  5. public class AVPlayVideo : MonoBehaviour, IPlayVideo
  6. {
  7. public Renderer VideoRenderer { get; private set; }
  8. public static AVPlayVideo CreateVideo(Renderer videoRenderer)
  9. {
  10. videoRenderer.sharedMaterial = new Material(Shader.Find("AVProVideo/Unlit/Opaque (texture+color+fog+stereo support)"));
  11. GameObject gameObject = videoRenderer.gameObject;
  12. AVPlayVideo avplayVideo = gameObject.AddComponent<AVPlayVideo>();
  13. avplayVideo.VideoRenderer = videoRenderer;
  14. avplayVideo._mediaPlayer = gameObject.AddComponent<MediaPlayer>();
  15. avplayVideo._mediaPlayer.m_AutoOpen = false;
  16. avplayVideo._applyToMesh = gameObject.AddComponent<ApplyToMesh>();
  17. avplayVideo._applyToMesh._media = avplayVideo._mediaPlayer;
  18. avplayVideo._applyToMesh._mesh = videoRenderer;
  19. avplayVideo._applyToMesh._defaultTexture = Texture2D.blackTexture;
  20. return avplayVideo;
  21. }
  22. public Coroutine Play(string moviePath, string moiveName, bool isLooping = false)
  23. {
  24. return base.StartCoroutine(this.PlayCoroutine(moviePath, moiveName, isLooping));
  25. }
  26. private IEnumerator PlayCoroutine(string moviePath, string moiveName, bool isLooping = false)
  27. {
  28. string videoPath = string.Format("{0}/{1}", moviePath, moiveName);
  29. if (this._mediaPlayer.Control != null && this._mediaPlayer.Control.IsPlaying())
  30. {
  31. if (videoPath == this._mediaPlayer.m_VideoPath)
  32. {
  33. yield break;
  34. }
  35. this._mediaPlayer.Stop();
  36. }
  37. this._mediaPlayer.m_VideoPath = videoPath;
  38. this._mediaPlayer.m_Loop = isLooping;
  39. this._mediaPlayer.m_Volume = R.Audio.EffectsVolume / 200f;
  40. this._mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, videoPath, true);
  41. if (!isLooping)
  42. {
  43. while (!this._mediaPlayer.Control.IsFinished())
  44. {
  45. yield return null;
  46. }
  47. }
  48. yield break;
  49. }
  50. public void Pause()
  51. {
  52. this._mediaPlayer.Pause();
  53. }
  54. public void Resume()
  55. {
  56. this._mediaPlayer.Play();
  57. }
  58. public void Stop()
  59. {
  60. if (this._mediaPlayer != null)
  61. {
  62. this._mediaPlayer.CloseVideo();
  63. }
  64. }
  65. public void Destroy()
  66. {
  67. UnityEngine.Object.Destroy(this._mediaPlayer);
  68. UnityEngine.Object.Destroy(this._applyToMesh);
  69. UnityEngine.Object.Destroy(this);
  70. }
  71. private void OnEnable()
  72. {
  73. }
  74. private MediaPlayer _mediaPlayer;
  75. public ApplyToMesh _applyToMesh;
  76. }