Unity支持播放众多格式视频,在这就不一一列举了,接下来说下如何播放透明视频,通过查阅资料与请教高手,总结了几种方式,与大家记录分享一下。
首先想到的是直接将视频拖入面板,Unity自动添加VedioPlayer组件
播放一下,确实能实现效果,但是却出现一个问题,虽然可以调该物体Scale,但是并不能实现改变其大小
效果如下图:
那么,如何播放透明视频,且可以自由控制呢?接下来进入正题。
要播放透明视频,首先视频具有 alpha通道。
1,第一种方式:通过Plane+shader
先创建一个Plane,把视频拖到Plane上面,通过控制Plane来控制视频的大小,但是却发现视频周边是黑色的,播放看看效果:
我们可以使用一个shader,剔除黑色
转自:
http://www.manew.com/thread-134897-1-1.html
首先想到的是直接将视频拖入面板,Unity自动添加VedioPlayer组件
播放一下,确实能实现效果,但是却出现一个问题,虽然可以调该物体Scale,但是并不能实现改变其大小
效果如下图:
那么,如何播放透明视频,且可以自由控制呢?接下来进入正题。
要播放透明视频,首先视频具有 alpha通道。
1,第一种方式:通过Plane+shader
先创建一个Plane,把视频拖到Plane上面,通过控制Plane来控制视频的大小,但是却发现视频周边是黑色的,播放看看效果:
我们可以使用一个shader,剔除黑色
shader代码如下:
Shader "Custom/Example"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
//_MainTex ("Albedo (RGB)", 2D) = "white" {}
_AlphaVideo ("Alpha Video(R)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader
{
Tags { "Queue"="Transparent" "RenderType"="Transparent" }
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard alpha
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
sampler2D _AlphaVideo;
struct Input {
float2 uv_MainTex;
float2 uv_AlphaVideo;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o) {
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
fixed4 _alpha = tex2D (_AlphaVideo, IN.uv_AlphaVideo);
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = _alpha.r;
}
ENDCG
}
FallBack "Diffuse"
}
再添加一个播放视频的脚本:
public MovieTexture moveTexture;
// Use this for initialization
void Start () {
GetComponent<Renderer>().material.mainTexture = moveTexture;
moveTexture.loop = true;
moveTexture.Play();
}
// Update is called once per frame
void Update () {
}
效果图如下:
|
Unity支持播放众多格式视频,在这就不一一列举了,接下来说下如何播放透明视频,通过查阅资料与请教高手,总结了几种方式,与大家记录分享一下。 首先想到的是直接将视频拖入面板,Unity自动添加VedioPlayer组件 播放一下,确实能实现效果,但是却出现一个问题,虽然可以调该物体Scale,但是并不能实现改变其大小 效果如下图: 那么,如何播放透明视频,且可以自由控制呢?接下来进入正题。 要播放透明视频,首先视频具有alpha通道。 1,第一种方式:通过Plane+shader 先创建一个Plane,把视频拖到Plane上面,通过控制Plane来控制视频的大小,但是却发现视频周边是黑色的,播放看看效果: 我们可以使用一个shader,剔除黑色 shader代码如下:
[C#]
纯文本查看
复制代码
再添加一个播放视频的脚本:
[C#]
纯文本查看
复制代码
效果图如下: ![]() |
| 总结: 这种方式需要视频格式为MOV、MP4等,视频的Importer Version改为 MovieTexTure。但是,使用MovieTexture播放视频的话,不能导入移动端,至于什么原因,呵呵,这个,在下也不知道啊。 2,第二种方式:Plane+使用Unity自带的shader,如下图 视频格式为:webm 添加组件:Vedio Player 效果图如下: 总结:这种方式比较简单,也可自由控制大小,但是有时会出现视频微卡现象。 3,第三种方式:通过UI:RawImage +Vedio Player 视频格式:webm 添加UI:RawImage 添加组件:Vedio Player Project面板添加:Render Texture Render Texture的size参数改为视频的长度和宽度,如下图: 将Render Texture拖入RawImage 和 Vedio Player,播放,效果图如下: 总结:这种方式也挺简单,效果也不错。 到此就结束了,以上为播放透明视频的三种方式,根据个人喜好自行选择吧,鄙人学习Unity也是纯属瞎摸索,有错误之处,还望众位大神不吝指出。 |





被折叠的 条评论
为什么被折叠?



