带透明通道的mov视频无法导入到unity中,提示解码失败,
因此想到了将视频转为png图像序列,并在unity中创建材质,通过动态更换材质贴图以达到播放视频的目的。
1、创建材质,材质类型选择 Legacy Shaders/Particles/Alpha Blended
2、创建quad,将此材质赋予这个quad
3、创建脚本,脚本如下
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class ChangeTexture : MonoBehaviour
{
private Material png_mat;
private List<Texture2D> pngs;
private static int num = 0;
void Start()
{
MeshRenderer renderer = this.gameObject.GetComponent<MeshRenderer>();
png_mat = renderer.materials[0];
DirectoryInfo directoryInfo = new DirectoryInfo("本地图像序列地址");
FileInfo[] files = directoryInfo.GetFiles();
Debug.Log("files length:" + files.Length);
pngs = new List<Texture2D>();
foreach (FileInfo file in files)
{
Debug.Log(file.FullName);
Texture2D texture = new Texture2D(1, 1);
texture.LoadImage(GetImageByte(file.FullName));
pngs.Add(texture);
}
}
// Update is called once per frame
void Update()
{
if (num < pngs.Count + 1)
{
png_mat.mainTexture = pngs[num];
num++;
}
}
private static byte[] GetImageByte(string dir)
{
FileStream files = new FileStream(dir, FileMode.Open);
byte[] imgByte = new byte[files.Length];
files.Read(imgByte, 0, imgByte.Length);
files.Close();
return imgByte;
}
}