当前位置:   article > 正文

Unity视频播放以及控制按钮的交互_unity点击按钮播放视频

unity点击按钮播放视频

素材的导入:

需要的模型(主要是电视机或者电脑的模型来充当一个屏幕效果)可以从Unity自带的Asset Store中下载免费的模型,视频资源自己导入。

视频贴图:

目前Unity2017.X版本有两种方式播放视频:第一种是视频贴图的方式,第二种方式是Unity5.6以上的版本开始支持的Video Player组件方式。第一种需要插件比较麻烦,我选择的是第二种方法。

Video Player组件方式:

第一步:新建场景,将素材和资源导入场景,新建Plane,这个Plane用来放置视频,在Plane视图中添加Video Player组件,Video Player组件的Video Clip属性选择添加视频剪辑。Unity支持的视频格式有.mov、.mpg、.mpeg、.mp4、.avi、.asf等。

第二步:Video Player组件的“Renderer Model”属性选择“Material Override”选项,确认“Renderer”属性已经默认选择了“Plane”对象。

第三步:此时需要在Plane属性框中增加“Audio Source”组件,并且赋值给Video Player的“Audio Source”属性,这样视频就可以播放同步音频了。

第四步:在Video Player中的Video Clip拖入视频资源。

操作结果如下图:

制作UI:

首先我们要明确需要什么组件,我实现的是可以通过代码实现控制视频播放、暂停、关闭、还有一个滑动条来拖动视频,还需要一个Text来显示电影名字,一个Text显示时间和时间比,所以需要创建三个Button两个Text一个Slider,调整这几个组件的位置。

场景烘焙(选择操作):

将场景中不需要移动的物体进行静态烘焙,将不需要移动的物体设置为Static状态,打开Windows——Rendering——Lighting,新建一个New Lighting Settings取消勾选Realtime Lighting——Realtime Global IIIur,接着勾选Backed Global,最后点击左下角Clear Backed Data,然后Generate Lighting。这样烘焙就完成了,这样可以大大减少电脑的运行内存,图示如下:

                       

 

 

代码部分:

UI组件和时间显示以及时间转化的代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using UnityEngine.Video;
  6. public class VideoTimeController : MonoBehaviour
  7. {
  8. public Text videoTimeText; //视频的时间Text
  9. public Text videoNameText; //视频的名字Text
  10. public Slider videoTimeSlider; //视频的时间Slider
  11. //定义参数获取VideoPlayer和AudioSource组件
  12. internal VideoPlayer videoPlayer;
  13. internal AudioSource audioSource;
  14. //当前视频的总时间值和当前播放时间值的参数
  15. private int currentHour;
  16. private int currentMinute;
  17. private int currentSecond;
  18. private int clipHour;
  19. private int clipMinute;
  20. private int clipSecond;
  21. // Start is called before the first frame update
  22. void Start()
  23. {
  24. //获取场景中对应的组件
  25. videoPlayer = this.GetComponent<VideoPlayer>();
  26. audioSource = this.GetComponent<AudioSource>();
  27. videoNameText.text = videoPlayer.clip.name;
  28. }
  29. // Update is called once per frame
  30. void Update()
  31. {
  32. ShowVideoTime();
  33. }
  34. private void ShowVideoTime()
  35. {
  36. //当前视频总时间
  37. clipHour = (int)videoPlayer.clip.length / 3600;
  38. clipMinute = (int)(videoPlayer.clip.length - clipHour * 3600) / 60;
  39. clipSecond = (int)(videoPlayer.clip.length - clipHour * 3600 - clipMinute * 60);
  40. // 当前的视频播放时间
  41. currentHour = (int)videoPlayer.time / 3600;
  42. currentMinute = (int)(videoPlayer.time - currentHour * 3600) / 60;
  43. currentSecond = (int)(videoPlayer.time - currentHour * 3600 - currentMinute * 60);
  44. // 把当前视频播放的时间显示在 Text 上
  45. videoTimeText.text = string.Format("{0:D2}:{1:D2}:{2:D2} / {3:D2}:{4:D2}:{5:D2}",
  46. currentHour, currentMinute, currentSecond, clipHour, clipMinute, clipSecond);
  47. // 把当前视频播放的时间比例赋值到 Slider 上
  48. videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length);
  49. }
  50. /// <summary>
  51. /// 当前的 Slider 比例值转换为当前的视频播放时间
  52. /// </summary>
  53. private void SetVideoTimeValueChange()
  54. {
  55. videoPlayer.time = videoTimeSlider.value * videoPlayer.clip.length;
  56. audioSource.time = videoTimeSlider.value * audioSource.clip.length;
  57. }
  58. }

滑动条滑动代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.EventSystems;
  5. /// <summary>
  6. /// 继承 拖拽接口
  7. /// </summary>
  8. public class SliderEvent : MonoBehaviour, IDragHandler
  9. {
  10. [SerializeField]
  11. private VideoTimeController videotimecontroller; // 视频播放的脚本
  12. public void OnDrag(PointerEventData eventData)
  13. {
  14. SetVideoTimeValueChange();
  15. }
  16. /// <summary>
  17. /// 当前的 Slider 比例值转换为当前的视频播放时间
  18. /// </summary>
  19. private void SetVideoTimeValueChange()
  20. {
  21. //当拖拽进度条时视频和音频都需要跟随着变化
  22. videotimecontroller.videoPlayer.time = videotimecontroller.videoTimeSlider.value * videotimecontroller.videoPlayer.clip.length;
  23. videotimecontroller.audioSource.time = videotimecontroller.videoTimeSlider.value * videotimecontroller.audioSource.clip.length;
  24. }
  25. }

按钮交互事件:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using UnityEngine.Video;
  6. public class control : MonoBehaviour
  7. {
  8. private VideoPlayer videoPlayer;
  9. private AudioSource audioSource;
  10. private Plane plane;
  11. void Start()
  12. {
  13. //获取VideoPlayer和AudioSource组件
  14. videoPlayer = this.GetComponent<VideoPlayer>();
  15. audioSource = this.GetComponent<AudioSource>();
  16. }
  17. void PlayorPause()
  18. {
  19. if (videoPlayer.isPlaying==true)
  20. {
  21. videoPlayer.Pause();
  22. audioSource.Pause();
  23. }
  24. }
  25. void PlayorBegin()
  26. {
  27. if (videoPlayer.isPlaying==false)
  28. {
  29. videoPlayer.Play();
  30. audioSource.Play();
  31. }
  32. }
  33. void PlayorClose()
  34. {
  35. this.gameObject.SetActive(false);
  36. }
  37. }

 注:以上部分内容引用刘国柱老师《游戏研发系列Unity3D 2D游戏》

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/102334
推荐阅读
相关标签
  

闽ICP备14008679号