前几天遇到客户一个需求:项目中有个播放视频的功能,并且可以在自己电脑上替换这个播放的视频文件。

        使用到的技术点是Unity中的Video Player(视频播放组件)

        

        在场景中创建一个Video Player(鼠标右键-Create-Video-Video Player),再创建一个RawImage用来显示视频的播放。

        创建脚本并挂载到Video Player身上,代码如下:

using UnityEngine;
using UnityEngine.Video;
using UnityEngine.UI;

public class VideoPlayerExample : MonoBehaviour
{
    public RawImage rawImage;   //用于在UI中显示视频的图像
    private VideoPlayer videoPlayer;  //视频播放器组件
    private string videoPath;   //存储视频文件的路径

    void Start()
    {
        videoPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "/1.mp4";   //获取视频文件路径

        videoPlayer = gameObject.GetComponent<VideoPlayer>();      //获取VideoPlayer组件
        videoPlayer.prepareCompleted += OnVideoPrepared;         //注册视频准备完成时执行的回调方法
        videoPlayer.errorReceived += OnVideoError;  //注册当视频未获取到时执行的回调函数
        videoPlayer.source = VideoSource.Url;     //设置VideoPlayer组件上的Source模式为Url
        videoPlayer.url = videoPath;        //将前面获取的视频文件路径赋值给VideoPlayer

        videoPlayer.loopPointReached += OnVideoFinished;  //注册视频播放结束时执行的回调函数
    }

    //视频准备完成时执行的回调方法
    private void OnVideoPrepared(VideoPlayer source)
    {
        rawImage.texture = source.texture;
    }
    //当视频未获取到时执行的回调函数
    private void OnVideoError(VideoPlayer source, string message)
    {
        Debug.LogError("Video error: " + message);
    }
    //视频播放结束时执行的回调函数
    private void OnVideoFinished(VideoPlayer vp)
    {
        Debug.Log("视频播放完毕!");
        // 在这里执行视频播放完毕后的逻辑

    }
}

代码解析:

        System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop):这是所有Windows电脑桌面的路径,这里想要视频正确播放,需要将视频文件放在桌面上,你也可以改成你指定的文件夹路径,然后将视频文件放在对应文件夹即可。

        "/1.mp4" :这是我自己取的视频文件的名字,你可以根据自己需求取名,记得加上后缀名。需要注意的是,代码中的文件名需要与实际的视频文件名字相同,这样才能准确获取到。

挂载脚本后,记得将前面创建RawImage赋值进去。

运行Unity后,就可以看到视频播放了。

附言:

        这里做的效果,是运行Unity后立刻播放视频了,你如果想要对视频具有更多的控制权,你可以在Start函数中设置Video Player的playOnAwake属性,让其一开始不播放,并添加上Toggle按钮,当你点击Toggle按钮时才播放也可以。

        Toggle按钮注册基本写法:

 public Toggle playToggle;    

    void Start()
    {
        playToggle.onValueChanged.AddListener((isOn)=> {
            OnPlayToggleChanged(isOn);
        });
    }
  private void OnPlayToggleChanged(bool isOn)
    {
        if (playToggle.isOn)
        {
             videoPlayer.Play();
        }
        else
        {
            videoPlayer.Pause();
        }
    }

注:想看Unity哪个技术点的,可以评论或者私信,有时间我会更新的。(包用最通俗易懂的方式让你实现)

Logo

分享前沿Unity技术干货和开发经验,精彩的Unity活动和社区相关信息

更多推荐