자세히보기

공부 나눔 (Sharing Study)/Unity 와 C#

[Unity/C#] 영상 재생, 일시정지, 볼륨 조절 (Video Player)

윤스톤 2021. 5. 22. 22:56

지난 두 가지 게시물을 통해 유니티에 영상 넣는 방법을 배웠습니다
이번에는 그 영상을 재생, 일시정지, 볼륨 조절하는 방법을 배워보겠습니다
더 나아가서 변수만 바뀌어도 실시간으로 상태가 변하게 하는
기능까지 알려드릴게요! :)

 

↓ 지난 게시글 ↓

https://yoonstone-games.tistory.com/39?category=798233 

 

[Unity/유니티] 영상 넣는 방법 (알파값 있는 영상, 배경없는 영상)

유니티에서 다양한 방법으로 활용되고 있는 영상을 넣는 방법과 '배경이 없는, 알파값이 있는 영상'을 넣는 방법을 함께 알아보도록 하겠습니다 :) 1. 유니티에 영상 쉽게 넣기 (드래그앤드롭) 먼

yoonstone-games.tistory.com

 

https://yoonstone-games.tistory.com/87?category=899312 

 

[Unity] Canvas/UI 에 영상 넣는 방법 (Raw Image, Render Texture)

지난 게시글에서 plane, cube, sphere 에 영상 넣는 방법을 알아봤다면 이번에는 UI인 Canvas Image에 영상 넣는 방법을 함께 알아보도록 하겠습니다 :) ↓ 지난 게시글 ↓ https://yoonstone-games.tistory.com/3..

yoonstone-games.tistory.com

 

 

1. Video Player 세팅

https://docs.unity3d.com/kr/2019.4/Manual/class-VideoPlayer.html

 

Video Player 컴포넌트 - Unity 매뉴얼

비디오 플레이어 컴포넌트를 사용하여 비디오 파일을 게임 오브젝트에 연결하고 런타임 시점에 게임 오브젝트의 텍스처에서 재생할 수 있습니다.

docs.unity3d.com

▷ 비디오 플레이어에 관한 유니티 공식 문서입니다

 

지난 번에 만든 Video Player를 확인해볼게요

Player On Awake : 시작하자마자 영상이 실행될 것인지
Loop : 영상이 끝나면 자동으로 반복재생될 것인지
Volume : 영상의 볼륨
저는 스크립트에서 영상을 재생시키기 위해 먼저 Player On Awake를 체크 해제하고,
볼륨도 위아래로 바로 조절할 수 있게 0.5로 지정해두었습니다

 

 

2. 스크립트로 비디오 플레이어 가져오기

비디오 플레이어를 컨트롤할 스크립트를 만들어보겠습니다

Assets에 우클릭 - Create - C# Script를 눌러주시고,
원하는 이름으로 만들어주세요 저는 VideoCtrl라고 했습니다

 

using UnityEngine.Video; // 비디오 플레이어 사용하기 위해 선언

먼저 가장 위에 UnityEngine.Video를 적어서
비디오 플레이어를 사용할 수 있도록 하고

 

public VideoPlayer video;

사용하고자 하는 VideoPlayer를 public으로 선언해주세요
(*꼭 public으로 선언하지 않아도, 다양한 방법으로 스크립트에 비디오 플레이어를 가져오시면 됩니다)
이제 이 video라는 변수를 사용해보겠습니다

 

 

3. 재생, 일시정지 사용하기 + 볼륨 가져오고, 지정하기

// 비디오 플레이어 재생
video.Play();

Play() 클래스를 사용하면 영상을 재생시킬 수 있고,

// 비디오 일시정지
video.Pause();

Pause() 클래스를 사용하면 영상을 일시정지 할 수 있습니다

// 비디오 볼륨 가져와서 저장
float volume = video.GetDirectAudioVolume(0);

GetDirectAudioVolume() 클래스를 사용하면 영상의 볼륨을 가져올 수 있습니다

// 볼륨을 1로 지정
video.SetDirectAudioVolume(0, 1); 

// 볼륨을 0으로 지정
video.SetDirectAudioVolume(0, 0); 

SetDirectAudioVolume() 클래스를 사용하면 영상의 볼륨을 지정할 수 있습니다

 

 

4. 볼륨 조금씩 올리고, 조금씩 줄이기

GetDirectAudioVolume()SetDirectAudioVolume()을 활용해서
볼륨을 조금씩 올리고 내리는 기능들 만들어 보겠습니다

// 볼륨이 1보다 작을 때만
if(video.GetDirectAudioVolume(0) < 1)
	// 볼륨 0.1씩 올리기
    video.SetDirectAudioVolume(0, video.GetDirectAudioVolume(0) + 0.1f);
    
// 볼륨이 0보다 클 때만
if(video.GetDirectAudioVolume(0) > 0)
	// 볼륨 0.1씩 줄이기
    video.SetDirectAudioVolume(0, video.GetDirectAudioVolume(0) - 0.1f);

볼륨을 가져오는 GetDirectAudioVolume() 을 활용해서
현재 영상의 볼륨에서 0.1씩 더하거나 빼서 지정해주는 방법을 사용하면
이 코드가 사용될 때마다 0.1씩 볼륨을 조절할 수 있습니다

Clipboard1.cs
0.00MB

(위 코드를 복사하시려면 이 스크립트를 다운받아주세요 - 우클릭 방지)

 

5. 변수를 사용해서 실시간으로 상태 변경

마지막입니다!

이렇게 해서 익힌 비디오 플레이어의 요소들을 활용해서

실시간으로 재생, 일시정지, 볼륨업, 볼륨다운을 해보겠습니다

    // 기준이 될 값
    public int numberValue;
    
    // 이전 값
    int currentNumber;

    private void Update()
    {
        // 입력한 숫자가 있고, 그 숫자가 이전과 달라졌다면
        if (numberValue != currentNumber)
        {
        	// 기준이 되는 값에 따라 상태 변경
            switch (numberValue)
            {
                // 재생
                case 1:
                    video.Play();
                    break;

                // 일시정지
                case 2:
                    video.Pause();
                    break;

                // 볼륨 업
                case 3:
                    // 볼륨 조금씩 키우기 (1보다 작을 때만)
                    if (video.GetDirectAudioVolume(0) < 1)
                        video.SetDirectAudioVolume(0, video.GetDirectAudioVolume(0) + 0.1f);
                    break;

                // 볼륨 다운
                case 4:
                    // 볼륨 조금씩 줄이기 (0보다 클 때만)
                    if (video.GetDirectAudioVolume(0) > 0)
                        video.SetDirectAudioVolume(0, video.GetDirectAudioVolume(0) - 0.1f);
                    break;
            }
        }        
        
        // 지금 값을 이전 값으로 저장
        currentNumber = numberValue;
    }

Clipboard2.cs
0.00MB

(위 코드를 복사하시려면 이 스크립트를 다운받아주세요 - 우클릭 방지)

 

numberValue라는 int 변수를 인스펙터 창에서 마음대로 조절할 수 있도록 public으로 선언해주세요
swich문으로 변수에 값에 따라 지금까지 배운 클래스를 사용해주세요

 

Update 함수 안에 있기 때문에 계속해서 볼륨이 커지거나 작아지는 현상이 발생합니다
이 부분을 해결하기 위해서 currentValue라는 값을 만들어
이전 값을 저장해주고, 이전 값과 달라졌을 때만 인지하여 작동하도록 했습니다

 

 

플레이해보기 전에,

원하는 위치에 VideoCtrl 스크립트를 넣고,
Video에 비디오 플레이어를 드래그해서 넣어주세요

 

플레이해보시면

 

이 기능들을 활용해서 원하시는 비디오 플레이 기능을
만드기실 바랍니다! :)

 


 

유니티 영상을 재생, 일시정지, 볼륨 조절하는 방법과
실시간으로 조절하는 방법은 여기까지입니다!

끝까지 읽어주셔서 감사합니다! 즐거운 개발되세요 😊

반응형