유니티 C# 비디오 재생하기 Video Player 간단 구현

반응형

코드 작성

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;

public class VideoPlayerController : MonoBehaviour
{
    public VideoPlayer videoPlayer; // VideoPlayer 컴포넌트
    public string videoURL = "https://www.example.com/video.mp4"; // 비디오 URL 또는 파일 경로
    public Text currentTimeText; // 현재 시간 UI
    public Text durationText; // 총 재생 시간 UI
    public Slider timeSlider; // 타임라인 제어 슬라이더
    public bool loopVideo = false; // 비디오 루프 여부 설정

    private bool isVideoPrepared = false;

    void Start()
    {
        // VideoPlayer 컴포넌트 초기화
        videoPlayer = GetComponent<VideoPlayer>();

        // 비디오 URL 설정 (또는 로컬 경로 설정 가능)
        videoPlayer.url = videoURL;

        // 비디오가 준비된 후 자동 재생
        videoPlayer.prepareCompleted += OnVideoPrepared;
        videoPlayer.loopPointReached += OnVideoEnd; // 비디오 끝 이벤트 추가
        videoPlayer.Prepare();
    }

    void Update()
    {
        // 비디오가 준비되었을 때만 타임라인과 시간을 업데이트
        if (isVideoPrepared)
        {
            UpdateTimeUI();
            UpdateTimeSlider();
        }
    }

    // 비디오가 준비된 후 호출
    void OnVideoPrepared(VideoPlayer vp)
    {
        isVideoPrepared = true;
        videoPlayer.Play();

        // 총 재생 시간 설정 (초 단위로 표시)
        durationText.text = FormatTime((float)videoPlayer.length);
    }

    // 비디오가 끝났을 때 호출되는 메서드
    void OnVideoEnd(VideoPlayer vp)
    {
        if (loopVideo)
        {
            videoPlayer.Stop();
            videoPlayer.Play(); // 루프 재생
        }
        else
        {
            // 비디오가 끝난 후 처리 (루프가 아닐 때)
            Debug.Log("Video has ended.");
        }
    }

    // 비디오 재생/일시정지 토글
    public void PlayPauseVideo()
    {
        if (videoPlayer.isPlaying)
        {
            videoPlayer.Pause();
        }
        else
        {
            videoPlayer.Play();
        }
    }

    // 비디오 중지
    public void StopVideo()
    {
        videoPlayer.Stop();
    }

    // 타임라인을 직접 조정하는 메서드 (슬라이더를 통해)
    public void SeekVideo(float sliderValue)
    {
        if (isVideoPrepared)
        {
            double newTime = sliderValue * videoPlayer.length;
            videoPlayer.time = newTime; // 비디오 타임라인 이동
        }
    }

    // 비디오 재생 속도 조정
    public void SetPlaybackSpeed(float speed)
    {
        videoPlayer.playbackSpeed = speed;
    }

    // 현재 시간 UI 업데이트
    void UpdateTimeUI()
    {
        currentTimeText.text = FormatTime((float)videoPlayer.time);
    }

    // 타임라인 슬라이더 업데이트
    void UpdateTimeSlider()
    {
        if (isVideoPrepared && videoPlayer.length > 0)
        {
            timeSlider.value = (float)(videoPlayer.time / videoPlayer.length); // 슬라이더 값 업데이트
        }
    }

    // 시간 포맷팅 (mm:ss)
    string FormatTime(float time)
    {
        int minutes = Mathf.FloorToInt(time / 60);
        int seconds = Mathf.FloorToInt(time % 60);
        return string.Format("{0:00}:{1:00}", minutes, seconds);
    }
}
반응형