반응형
코드 작성
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);
}
}
반응형