본문 바로가기

Unity

[Unity] Video Player 페이드 인, 페이드 아웃 효과 만들기 (1)

728x90

씬 전환 간에 VideoPlayer의 targetCameraAlpha값을 조정해서 페이드 인, 페이드 아웃 효과를 만들어보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
 
public class VideoManager : MonoBehaviour
{
    VideoPlayer videoPlayer;
    public bool isChanged;
    public VideoClip[] videoClips;
    int indexNumber;
 

 

  • videoPlayer - VideoPlayer를 저장할 변수입니다.
  • isChanged - 씬 전환이 완료 여부를 저장할 변수입니다.
  • videoClips - 재생할 비디오 클립을 저장할 변수입니다.
  • indexNumber - 다음 비디오 클립의 인덱스 숫자를 저장할 변수입니다.

 

1
2
3
4
5
6
    void Awake()
    {
        indexNumber = 0;
        videoPlayer = GetComponent<VideoPlayer>();
        SetVideo();
    }

 

 indexNumber값을 초기화해주고, videoPlayer의 값을 가져옵니다. 그리고 SetVideo 함수를 실행시켜줍니다.

 

1
2
3
4
5
6
7
8
9
10
 public void SetVideo()
    {
        if (indexNumber < videoClips.Length)
        {
            videoPlayer.clip = videoClips[indexNumber];
            indexNumber++;
        }
        else
            videoPlayer.clip = null;
    }

 

만약에 indexNumber가 videoClips의 길이보다 작다면 videoPlayer에 indexNumber에 맞는 videoClips를 넣어줍니다.

 

씬 전환 순서

 

위 그림은 씬 전환 순서에 대한 내용을 담고 있고, FadeIn과 FadeOut 코드의 이해를 높이기 위해서 넣었습니다.

 

1
2
3
4
5
6
7
8
9
    public IEnumerator FadeIn()
    {
        isChanged = false;
        while (videoPlayer.targetCameraAlpha < 0.99f)
        {
            videoPlayer.targetCameraAlpha += 0.025f;
            yield return new WaitForSeconds(0.01f);
        }
    }

 

코루틴을 통해서 FadeIn 기능을 구현해줍니다. FadeIn은 씬 전환이 완료되고 나서 실행되기 때문에 isChanged를 false로 바꿔줍니다. 그리고 videoPlayer의 targetCameraAlpha값을 0.99f 보다 높을 때까지 값을 올려줍니다.

 

1
2
3
4
5
6
7
8
9
10
 public IEnumerator FadeOut()
    {
        while (videoPlayer.targetCameraAlpha > 0.01f)
        {
            videoPlayer.targetCameraAlpha -= 0.025f;
            yield return new WaitForSeconds(0.01f);
        }
        isChanged = true;
    }
}

 

FadeIn에서 반대로 코루틴을 구현하면 됩니다.

728x90