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 () {
        
   }

效果图如下:

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

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

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


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


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

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

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



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

shader代码如下:

[C#] 纯文本查看 复制代码

?

扫描二维码关注公众号,回复: 3626383 查看本文章

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

猜你喜欢

转载自blog.csdn.net/alone_ws/article/details/82351128