개발 관련/SW, App 관련

Unity에서 Video Play 사용하기

by 소서리스25 2023. 4. 16.
반응형

 

Unity에서 Video Play 사용하기

 

현재 Unity 버전들은 기본적으로 영상파일을 플레이 할 수 있도록 Unity class를 제공하고 있다.

지원하는 영상 포맷은 OS에 따라 다음에 보시는 바와 같다. 다양한 영상포맷을 지원하고 있다.

 

▷ 유니티에서 호환되는 영상포맷

지원포맷(확장자) Windows MacOS Linux
.asf    
.avi    
.dv  
.m4v  
.mov  
.mp4  
.mpg  
.mpeg  
.ogv
.vp8
.webm
.wmv    

 

또한 H.265 인코딩이 호환됩니다. 다만 코덱이 OS에 따라 요구되는 사항이 있다.

해당부분은 위의 제공 Unity class 링크에서 확인 할 수 있다.

 

그러면 간략하게 구현하는 방법을 알아보자

 

먼저 동영상을 적용하는 방법은 2가지가 있다. 

첫번째는 clip로 등록해서 하는 방법이고,

두번째는 url로 연결해서 적용하는 방법이다.

 

clip는 에셋에 동영상을 등록해 주면 간단하게 된다.

이번에 간략하게 코드로 구현해 보고자 하는 것은 url 방식이다.

 

pc버전 프로젝트를 진행하게 되면 빈번히 발생하는것이 동영상 수정으로 가끔 변경되는 것이다. 그럴때마다 Unity를 매번 빌드를 다시 할 수도 있는데 이런 불편함을 덜어주기 위해 url 방식으로 로딩해서 사용하는 것이 편리하다.

 

크게 2가지 방법으로 정리하면 다음과 같다. 아마도 가장 많이 이용하는 방법이 아닐까 한다.

본 포스트에서는 Clip이 아닌 URL만 사용 할 것이다.

 

첫번째는 Camera를 이용한 전체화면 동영상 플레이

두번째는 RawImage에 Render Texture를 이용한 동영상 플레이

 

첫번째 Camera를 이용한 방법으로 다음과 같은 순서로 진행

 1. Hierarchy에서 Video > Video Player 을 생성한다.

 2. Inspector에서 Source를 Clip에서 URL로 변경

    (애셋폴더에 video 폴더를 만들고 video_1.mp4로 예로 만들었다.)

 3. Render Mode를 Camera로 변경하고 기본 생성된 카메라와 연결한다. 다음과 같다.

    (기본적인 체크 사항은 보면 알 수 있는 내용이다.)

Video Player 설정화면
Video Player 설정화면

 4. 유니티 플레이 버튼을 눌러보면 전체 화면으로 바로 동영상이 플레이 될 것이다.

 5. 동영상 플레이를 조절하려면 별도의 코드가 필요하다.

 

두번째는 RawImage에 Render Texture를 이용한 방법

 1. Unity의 Canvas에 RawImage를 만들자

 2. 첫번째와 같이 Hierarchy에서 Video > Video Player 을 생성한다.

 3. Render Mode를 Render Texture로 변경한다.

 4. Project에서 Create > Render Texture 를 생성한다.

 5. Render Texture의 Size를 영상의 해상도에 맞게 조절한다.

 6. Hierarchy의 Video Player에서 Target Texture에 Render Texture를 연결한다.

     (쉽게 끌어다 놓으면 된다.)

Render Texture 설정화면
Render Texture 설정화면

 

7. 유니티 플레이 버튼을 눌러보면 RawImage에서 동영상이 플레이 될 것이다.

동영상 플레이 화면
동영상 플레이 화면

 

기본적인 플레이는 위와 같이 쉽게 구현할 수 있다.

 

그러면 간단한 제어로 플레이, 일시정지, 멈춤을 Canvas에서 버튼으로 각각 만들자.

버튼 설정은 다음과 같으며 나머지도 해당하는 string 이름으로 스크립트와 동일하게 한다.

처음 시작시 동영상은 정지해야 3개의 버튼 역할을 알 수 있다. 따라서 Video Player의 Play On Awake 체크를 해제하자.

 

이와 연동할 세부적인 스크립트를 코드는 간략하게 구현하면 다음과 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
 
public class PlayController : MonoBehaviour
{
    public VideoPlayer _video;
 
    public void Controller(string mode)
    {
        switch (mode)
        {
            case "play":
                _video.Play();
                _video.playbackSpeed = 1;
                break;
 
            case "pause":
                _video.playbackSpeed = 0;
                break;
 
            case "stop":
                _video.Stop();
                _video.frame = 0;
                break;
        }
    }
}
cs

 

PlayControl의 이름으로 빈 객체를 만들고 해당 스크립트를 연결하고 다음과 같이 버튼을 설정한다.

버튼 설정
버튼 설정

 

이제 유니티 플레이 버튼을 눌러보자.

각 버튼에 맞게 동작 할 것이다.

 

 

 

 

반응형

댓글