지난 두 가지 게시물을 통해 유니티에 영상 넣는 방법을 배웠습니다
이번에는 그 영상을 재생, 일시정지, 볼륨 조절하는 방법을 배워보겠습니다
더 나아가서 변수만 바뀌어도 실시간으로 상태가 변하게 하는
기능까지 알려드릴게요! :)
↓ 지난 게시글 ↓
https://yoonstone-games.tistory.com/39?category=798233
https://yoonstone-games.tistory.com/87?category=899312
1. Video Player 세팅
https://docs.unity3d.com/kr/2019.4/Manual/class-VideoPlayer.html
▷ 비디오 플레이어에 관한 유니티 공식 문서입니다
지난 번에 만든 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씩 볼륨을 조절할 수 있습니다
(위 코드를 복사하시려면 이 스크립트를 다운받아주세요 - 우클릭 방지)
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;
}
(위 코드를 복사하시려면 이 스크립트를 다운받아주세요 - 우클릭 방지)
numberValue라는 int 변수를 인스펙터 창에서 마음대로 조절할 수 있도록 public으로 선언해주세요
swich문으로 변수에 값에 따라 지금까지 배운 클래스를 사용해주세요
Update 함수 안에 있기 때문에 계속해서 볼륨이 커지거나 작아지는 현상이 발생합니다
이 부분을 해결하기 위해서 currentValue라는 값을 만들어
이전 값을 저장해주고, 이전 값과 달라졌을 때만 인지하여 작동하도록 했습니다
플레이해보기 전에,
원하는 위치에 VideoCtrl 스크립트를 넣고,
Video에 비디오 플레이어를 드래그해서 넣어주세요
플레이해보시면
이 기능들을 활용해서 원하시는 비디오 플레이 기능을
만드기실 바랍니다! :)
유니티 영상을 재생, 일시정지, 볼륨 조절하는 방법과
실시간으로 조절하는 방법은 여기까지입니다!
끝까지 읽어주셔서 감사합니다! 즐거운 개발되세요 😊
'공부 나눔 (Sharing Study) > Unity 와 C#' 카테고리의 다른 글
[Unity/C#] 카메라가 벽을 통과하지 못하게 만들기 (0) | 2023.01.18 |
---|---|
[Unity/C#] 가장 쉽게 포물선 '위로' 그리는 방법 (+라인 렌더러) (0) | 2022.05.26 |
[Unity/C#] 방금 클릭한 UI 이름, 정보 가져오기 (2) | 2021.03.18 |
[Unity/C#] 데이터 저장/불러오기 가장 쉬운 방법 (Json) (22) | 2020.05.26 |
[Unity/C#] UI 버튼 일반 클릭(터치) vs 롱클릭(터치) (2) | 2020.03.13 |