¡¡VideoPlayer ¤ò³èÍѤ·¤Æ¥à¡¼¥Ó¡¼ºÆÀ¸¤¹¤ë¤¿¤á¤Îµ¡Ç½¤ò»ý¤Ä¥¹¥¯¥ê¥×¥È¤òºîÀ®¤·¤Þ¤¹¡£
¤³¤Î¥¹¥¯¥ê¥×¥È¤Ë¤Ï VideoPlayer ¤Ë´ØÏ¢¤¹¤ë½èÍý¤ò¤Þ¤È¤á¤ÆµºÜ¤·¤Æ¤ª¤¤Þ¤¹¡£Î㤨¤Ð¡¢Æ°²è¤òºÆÀ¸¤¹¤ë¥á¥½¥Ã¥É¡¢Ää»ß¤¹¤ë¥á¥½¥Ã¥É¤Ê¤É¤òÍÑ°Õ¤·¤Þ¤¹¡£
¡¡¤³¤Á¤é¤Î¥¯¥é¥¹¤âÍøÊØÀ¤ò¹Í¤¨¡¢¤¤¤º¤ì¤Î¥¹¥¯¥ê¥×¥È¤«¤é¤Ç¤âÆ°²èºÆÀ¸/Ää»ß¤Î¥á¥½¥Ã¥É¤Ë¥¢¥¯¥»¥¹¤·¤ä¤¹¤¤¤è¤¦¤Ë¡¢¥·¥ó¥°¥ë¥È¥ó¥¯¥é¥¹¤È¤·¤ÆºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£
¡¡ÂçÀڤʥݥ¤¥ó¥È¤È¤·¤Æ¤Ï¡¢ºÆÀ¸¤¹¤ë¥à¡¼¥Ó¡¼¤ÏËè²ó¸ÇÄê¤ÇƱ¤¸¡¢¤È¤¤¤¦Ìõ¤Ë¤Ï¤¤¤¤Þ¤»¤ó¡£¥·¡¼¥ó¤´¤È¤ËŬÀÚ¤ÊÆ°²è¤òºÆÀ¸¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢Àè¤Û¤ÉºîÀ®¤·¤¿ VideoDataSO ¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥ÈÆâ¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë VideoClip (¥à¡¼¥Ó¡¼Æ°²è)¤ò¤½¤ÎÅÔÅÙÆɤ߹þ¤ó¤Ç¡¢
¥²¡¼¥à¤Î¾ìÌ̤ËŬ¤·¤¿¥à¡¼¥Ó¡¼¤òºÆÀ¸¤¹¤ëµ¡Ç½¤ò»ý¤ÄÈÆÍÑŪ¤Ê½èÍý¤¬¹Ô¤¨¤ë¤è¤¦¤ËÀ߷פò¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤Þ¤¿º£²ó¤Ï
ºÆÀ¸¤ÎÅÓÃæ¤Ç¤â²èÌ̤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç¥¹¥¥Ã¥×¤¹¤ëµ¡Ç½¤â¹ç¤ï¤»¤Æ¼ÂÁõ¤·¤Þ¤¹¡£
¤¿¤À¤·¡¢ÆâÉôŪ¤Ë¤Ï¥à¡¼¥Ó¡¼¤Î°ì»þÄä»ß¤Î½èÍý¤ò¥¹¥¥Ã¥×ÍѤËήÍѤ·¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢
¥¹¥¥Ã¥×¤À¤±¤Ç¤Ï¤Ê¤¯°ì»þÄä»ß¤Îµ¡Ç½¤â¼ÂÁõ¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢Ê̤μÂÁõÊýË¡¤ò¸¡Æ¤¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
VideoClipManager.cs
<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤¤Þ¤¹
using System.Collections;
using UnityEngine;
using UnityEngine.Video;
using DG.Tweening;
[RequireComponent(typeof(CanvasGroup))]
public class VideoClipManager : MonoBehaviour
{
public static VideoClipManager instance;
[SerializeField]
private VideoPlayer videoPlayer;
[SerializeField]
private CanvasGroup canvasGroup;
public VideoClip clip;
public bool IsVideoPlaying { get => videoPlayer.isPlaying; }
¡¡¡¡private float fadeDuration = 1.0f;
void Awake() {
if (instance == null) {
instance = this;
DontDestroyOnLoad(gameObject);
} else {
Destroy(gameObject);
}
// ½é´ü²½
Initialize();
}
/// <summary>
/// Video ½èÍý¤Î½é´ü²½
/// </summary>
private void Initialize() {
canvasGroup.alpha = 0;
canvasGroup.blocksRaycasts = false;
videoPlayer.clip = null;
// ²òÊü¤·¤ÆÁ°¤Î¥Æ¥¯¥¹¥Á¥ã¤òºï½ü
videoPlayer.targetTexture.Release();
}
/// <summary>
/// ¥Ç¥Ð¥Ã¥°ÍÑ(Awake ¤Ç¤ä¤é¤Ê¤¤¤³¤È¡£DataBaseManager ¤Î½àÈ÷¤¬¶¥¹ç¤·¤Æ´Ö¤Ë¹ç¤ï¤Ê¤¤)
/// </summary>
/// <returns></returns>
IEnumerator Start() {
yield return null;
// VideoClip ¤Î½àÈ÷
//PrepareVideoClip(1);
}
/// <summary>
/// VideoClip ¤Î½àÈ÷
/// </summary>
/// <param name="videoNo"></param>
public void PrepareVideoClip(int setVideoNo, VideoClip sourceVideoClip = null) {
// VideoClip ¤¬Ì¤ÀßÄê¤Ê¤é
if (videoPlayer.clip == null) {
// VideoClip ¤Î°ú¿ô¾ðÊ󤬤ʤ¤¾ì¹ç
if (sourceVideoClip == null) {
// ÂоݤΠVideoClip ¤ò¸¡º÷¤·¤ÆÀßÄê
videoPlayer.clip = DataBaseManager.instance.GetVideoData(setVideoNo).videoClip;
} else {
// VideoClip ¤Î¾ðÊ󤬤¢¤ë¾ì¹ç¤Ï¡¢¤½¤ì¤ò»È¤¦
videoPlayer.clip = sourceVideoClip;
}
}
// Æɤ߹þ¤ß¸å¤Î¥¤¥Ù¥ó¥È¤Î¥³¡¼¥ë¥Ð¥Ã¥¯ÅÐÏ¿
videoPlayer.prepareCompleted += OnCompletePrepare;
// Æɤ߹þ¤ß³«»Ï
videoPlayer.Prepare();
Debug.Log("VideoClip ¥í¡¼¥É³«»Ï");
// TODO ɬÍפ˱þ¤¸¤Æ¡¢VideoClip ¤Î»Ï¤Þ¤ë¥¿¥¤¥ß¥ó¥°(¥Õ¥§¡¼¥É¥¤¥ó)¤È¹ç¤ï¤»¤ë
/// <summary>
/// Prepare ´°Î»»þ¤Ë¸Æ¤Ð¤ì¤ë¥³¡¼¥ë¥Ð¥Ã¥¯ÍÑ¤Î¥í¡¼¥«¥ë´Ø¿ô
/// </summary>
/// <param name="vp"></param>
void OnCompletePrepare(VideoPlayer vp) {
// ¥¤¥Ù¥ó¥È¤Î¥³¡¼¥ë¥Ð¥Ã¥¯¤«¤éºï½ü(»Ä¤Ã¤Æ¤¤¤ë¤È¼¡²ó¤â¼Â¹Ô¤µ¤ì¤ë¤¿¤á)
videoPlayer.prepareCompleted -= OnCompletePrepare;
Debug.Log("VideoClip ¥í¡¼¥É´°Î»");
// ºÆÀ¸
StartCoroutine(PlayVideo());
}
//// Æɤ߹þ¤à¤Þ¤ÇÂÔµ¡(videoPlayer.prepareCompleted ¤ò»È¤ï¤Ê¤¤¾ì¹ç)
//while (!videoPlayer.isPrepared)
// yield return null;
}
/// <summary>
/// VideoClip ¤ÎºÆÀ¸
/// </summary>
/// <returns></returns>
private IEnumerator PlayVideo() {
// ²èÌ̤Υ¿¥Ã¥×¤òÀ©¸æ
canvasGroup.blocksRaycasts = true;
// TODO ¥Õ¥§¡¼¥É¥¤¥ó¤·¤ÆºÆÀ¸(´Ê°×¡£¸å¤Ç¥È¥é¥ó¥¸¥·¥ç¥ó¤È¹ç¤ï¤»¤ë)
canvasGroup.DOFade(1.0f, fadeDuration); // ¤Ê¤ª¡¢OnComplete ¤ò»È¤Ã¤Æ VideoPlayer ¤Î Play ¥á¥½¥Ã¥É¤ò½èÍý¤¹¤ë¤ÈÆ°¤«¤Ê¤¤¤¿¤á¡¢»È¤ï¤Ê¤¤¡£
¡¡¡¡¡¡¡¡// VideoClip ºÆÀ¸
videoPlayer.Play();
Debug.Log("VideoClip ºÆÀ¸");
// ºÆÀ¸¤¬½ªÎ»¤¹¤ë¤«¡¢¥¹¥¥Ã¥×¤¹¤ë¤Þ¤ÇÂÔµ¡(°ì»þÄä»ß¤Î½èÍý¤â¼ÂÁõ¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¾ò·ï¼°¤òÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹)
while (videoPlayer.isPlaying) {
// ºÆÀ¸Ãæ¤Ë¥¿¥Ã¥×¤·¤¿¤éºÆÀ¸Ää»ß¤·¤Æ¥¹¥¥Ã¥×
if (Input.GetMouseButtonDown(0)) {
SkipVideo();
}
yield return null;
}
// Ää»ß
StopVideo();
}
/// <summary>
/// VideoClip ¤Î¥¹¥¥Ã¥×
/// </summary>
public void SkipVideo() {
// ºÆÀ¸Ãæ¤Î VideoClip ¤¬¤¢¤ë¾ì¹ç
if (videoPlayer.isPlaying) {
// ÆâÉôŪ¤Ë¤Ï°ì»þÄä»ß(isPlayng ¤¬ false ¤Ë¤Ê¤ë)¤À¤¬¡¢º£²ó¤Î PlayVideo ¥á¥½¥Ã¥ÉÆâ¤Î while ʸ¤Î¾ò·ï¼°¤Ï¡¢¤³¤Î½èÍý¤Ç¥¹¥¥Ã¥×¤¹¤ë¤è¤¦¤Ë¾ò·ïÀßÄꤷ¤Æ¤¤¤ë
videoPlayer.Pause();
Debug.Log("VideoClip ¥¹¥¥Ã¥×");
}
}
/// <summary>
/// VideoClip ¤ÎÄä»ß
/// </summary>
public void StopVideo() {
// Ää»ß
videoPlayer.Stop();
// ¥Õ¥§¡¼¥É¥¢¥¦¥È¤·¤Æ½é´ü²½
canvasGroup.DOFade(0, fadeDuration)
.OnComplete(() => {
Initialize();
});
Debug.Log("VideoClip Ää»ß");
}
}
¡¡¥¹¥¯¥ê¥×¥È¤òºîÀ®¤·¤¿¤é¥»¡¼¥Ö¤·¤Þ¤¹¡£
¡¡³Æ¥á¥½¥Ã¥É¤äÊÑ¿ô¤¬¡¢¤É¤¦¤¤¤Ã¤¿Ìò³ä¤ò»ý¤Ã¤ÆÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¤«¤ò¤·¤Ã¤«¤ê¤ÈÍý²ò¤·¤Æ¤«¤é¿Ê¤á¤Æ¤¯¤À¤µ¤¤¡£