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位置如上图所示进行填写,填写完成后即可。

此时运行我们的场景就会看到视频被分割,并且以不同的初始开始进行旋转了:

Ringo

CRI Middleware Global Expansion Group

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据