Sofdec2-Unity/视频分割
使用Sofdec2进行编码压缩的视频在Unity中支持分割,我们可以采用UV位置的方式进行分割视频,使其在不同的载体上播放,同时可以单独控制每一个载体做单独的操作。
Unity中设置
本文中将视频放在Cube上,通过控制多个Cube进行视频的分割。
首先我们需要创建用于播放视频的载体,新建一个空的Object:
创建完成后我们需要在该Object创建用于播放视频的CriManaMovieMaterial,同时填写播放相关视频名称,并勾选Play On Start和Loop:
创建完成后,我们需要创建进行分割视频的播放Cube,我们选择创建9个Cube将视频均等分成9份:
在Cube上创建相关脚本:
using UnityEngine;
using System.Collections;
public class Scene_03_JigSawMovie_Quad : MonoBehaviour
{
public CriManaMovieMaterial movieMaterial;
// Use this for initialization
void Start()
{
Renderer renderer = GetComponent<Renderer>();
renderer.material = movieMaterial.material;
}
}
using UnityEngine;
using System.Collections;
public class MeshUVScaler : MonoBehaviour {
public Vector2 offset = new Vector2(0.0f, 0.0f);
public Vector2 scale = new Vector2(1.0f, 1.0f);
void Start ()
{
/* Moving and scaling of the uv coordinates of the mesh */
var uvs = GetComponent<MeshFilter>().mesh.uv;
for (int i = 0; i < uvs.Length; i++) {
uvs[i].x = (uvs[i].x * scale.x) + offset.x;
uvs[i].y = (uvs[i].y * scale.y) + offset.y;
}
GetComponent<MeshFilter>().mesh.uv = uvs;
}
void Update()
{
this.gameObject.transform.Rotate(Vector3.down * Time.deltaTime * 100 * Random.Range(1.0f,2.0f));
}
}
两个脚本如上图所示,第一个脚本用于初始化,第二个脚本则用于我们的UV分割。
第二个脚本中,我们没帧调用的内容中做了旋转,用以展示视频播放后独自控制效果。
在创建的9个Cube中,我们需要调整每一个Cube在视频UV上的位置,如下图:
每个Cube上脚本的uv位置如上图所示进行填写,填写完成后即可。
此时运行我们的场景就会看到视频被分割,并且以不同的初始开始进行旋转了: