很久之前拜读过雨松大神关于u3d中播放视频的文章Unity3D研究院之两种方式播放游戏视频(二十五)。最近项目中有需要简单的视频播放的,但使用plane和GUI都不是很合适,于是试了一下直接使用Image控件,果然也是可以的。当然需要更强大的功能还是需要借助插件实现。
首先导入我们的视频文件,Unity支持.mov, .mpg, .mpeg, .mp4, .avi, .asf等视频格式,详细可以查询官方文档。导入视频之前需要安装QuickTime。如果在打开项目之后再安装的QuickTime,则需要重启一下项目。然后编辑一下我们的脚本,定义MovieTexture变量,负责影片播放的Image变量和负责声音播放的AudioSource变量,初始化播放器将image材质的mainTexture设为movie。
public Image image;
public MovieTexture movie;
public AudioSource audioPlayer;
image.material.mainTexture = movie;
定义播放器的播放,暂停,停止方法
public void Play()
{
movie.Play();
audioPlayer.Play();
}
public void Stop()
{
movie.Stop();
audioPlayer.Stop();
}
public void Pause()
{
movie.Pause();
audioPlayer.Pause();
}
新建一个Image物体和AudioSource物体,将我们导入的视频文件中的音频拖给AudioSource,然后将视频文件拖给MoviePlayer的movie,Image拖给image,AudioSource拖给audioPlayer。然后调用Play方法即可播放。
场景文件结构:
MVImage的设置:
audio的设置:
运行效果(视频使用的是武士桑的Snow Halation指弹视频):
也可以使用WWW加载程序外部视频,将WWW读取的MovieTexture赋值给MoviePlayer的movie,将WWW读取的MovieTexture的audioClip变量赋值给AudioSource的clip变量。
以下是MoviePlayer的完整代码:
MoviePlayer.cs:
using UnityEngine;
using UnityEngine.UI;
public class MoviePlayer : MonoBehaviour
{
public Image image;
public MovieTexture movie;
public AudioSource audioPlayer;
void Awake()
{
image.material.mainTexture = movie;
Play();
}
public void Play()
{
movie.Play();
audioPlayer.Play();
}
public void Stop()
{
movie.Stop();
audioPlayer.Stop();
}
public void Pause()
{
movie.Pause();
audioPlayer.Pause();
}
}
By: 蒋志杰