Unity播放透明视频的三种方式

Unity支持播放众多格式视频,在这就不一一列举了,接下来说下如何播放透明视频,通过查阅资料与请教高手,总结了几种方式,与大家记录分享一下。
首先想到的是直接将视频拖入面板,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 () {
        
   }

效果图如下:

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号 

x
Unity支持播放众多格式视频,在这就不一一列举了,接下来说下如何播放透明视频,通过查阅资料与请教高手,总结了几种方式,与大家记录分享一下。
首先想到的是直接将视频拖入面板,Unity自动添加VedioPlayer组件


播放一下,确实能实现效果,但是却出现一个问题,虽然可以调该物体Scale,但是并不能实现改变其大小
效果如下图:
  


那么,如何播放透明视频,且可以自由控制呢?接下来进入正题。

要播放透明视频,首先视频具有alpha通道。

1,第一种方式:通过Plane+shader
先创建一个Plane,把视频拖到Plane上面,通过控制Plane来控制视频的大小,但是却发现视频周边是黑色的,播放看看效果:
 



我们可以使用一个shader,剔除黑色

shader代码如下:
[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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" 
}




再添加一个播放视频的脚本:
[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
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 () {
        
    }



效果图如下:
 
总结: 这种方式需要视频格式为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也是纯属瞎摸索,有错误之处,还望众位大神不吝指出。

4.png (48.35 KB, 下载次数: 1)

4.png

7.png (23.97 KB, 下载次数: 1)

7.png
转自: http://www.manew.com/thread-134897-1-1.html
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页