ボタンを押すと動画がランダムに選ばれて再生されるようにすると、ボタンを押してから再生が始まるまで少し間が空きます。
ゲーム中に読み込みが遅すぎて画面に表示されないまま動画の再生が終わってしまったりもするので、事前に動画を読み込んで好きなタイミングですぐに再生されるようにしてみます。
まずVideo Playerを作ってカメラの近面に動画が表示されるようにしました。
そして、ボタンを押すと動画を再生するスクリプトを作ります。
using UnityEngine;
using UnityEngine.Video;
public class PlayVideoScript : MonoBehaviour
{
[SerializeField] VideoPlayer videoPlayer;
[SerializeField] VideoClip[] videoClips;
// Start is called before the first frame update
void Start()
{
videoPlayer.isLooping = true;
SelectClipRandomly(videoPlayer);
videoPlayer.loopPointReached += SelectClipRandomly;
}
void SelectClipRandomly(VideoPlayer v)
{
v.Stop(); // 再生を停止
v.clip = videoClips[Random.Range(0, videoClips.Length)]; // 動画をランダムに選ぶ
v.Prepare(); // 事前に読み込む
}
public void PlayVideo()
{
videoPlayer.Play(); // 動画を再生
}
}
Start()で動画の終了判定をするためにループ再生されるようにし、動画の終端に来たらクリップをランダムで選ぶメソッドが呼ばれるようにしています。
このメソッドでは動画の再生を停止してクリップを選んだ後に、VideoPlayer.Prepare()で動画を事前に読み込みます。
そして、ボタンを押すと事前に読み込まれたクリップが再生されます。
これだと動画の終了を待たなければいけませんが、ボタンを押してから再生されるまでが短くなりました。
また、アイテムを拾ったら動画を再生するというようなときに、冒頭に書いたような問題もなくなって安定するようになりました。