EasyAR尝鲜系列教程之视频播放功能代码
2016-05-19 11:52
330 查看
这个增强ImageTarget是指在ImageTarget的基础上融入VideoPlayerBehaviour的功能,因为按照官方的示例来考虑,这两部分功能是独立的,博主希望让大家在制作识别图的时候完全忘记区别ImageTarget和VideoTarget,这样我们可以更为专注地制作识别图,因为视频组件就只是设置参数这一件事情,完全可以一次性搞定,所以我们首先来定义一个VideoTargetBaseBehaviour类,一起来看代码:
在这段代码中博主采用了动态创建视频组件的方法,这样我们在制作VideoTarget的时候只需要按照以下步骤即可:
* 在Assets/EasyAR/Prefabs目录下找到EasyAR这个预制体,添加EasyARConfig组件,然后填写KEY。
* 在Assets/EasyAR/Prefabs目录中找到ImageTarget这个预制体,然后使用VideoTargetBaseBehaviour组件替换默认的ImageTargetBehaviour组件。
[align=left]{[/align] [align=left] /// <summary>[/align] [align=left] /// 视频播放模块[/align] [align=left] /// </summary>[/align] private VideoPlayerBehaviour videoPlayer; [align=left] /// <summary>[/align] [align=left] /// 视频文件路径[/align] [align=left] /// </summary>[/align] [align=left] public string VideoPath;[/align] [align=left] /// <summary>[/align] [align=left] /// 是否自动播放视频[/align] [align=left] /// </summary>[/align] public bool VideoEnableAutoPlay = true; [align=left] /// <summary>[/align] [align=left] /// 是否允许视频循环[/align] [align=left] /// </summary>[/align] public bool VideoEnableLoop = true; [align=left] /// <summary>[/align] [align=left] /// 视频类型[/align] [align=left] /// </summary>[/align] public VideoPlayer.VideoType VideoType = VideoPlayer.VideoType.TransparentSideBySide; [align=left] /// <summary>[/align] [align=left] /// 视频资源类型[/align] [align=left] /// </summary>[/align] public StorageType VideoStorage = StorageType.Assets; [align=left] /// <summary>[/align] [align=left] /// 视频是否加载[/align] [align=left] /// </summary>[/align] [align=left] private bool isVideoLoaded;[/align] [align=left] protected override void Start()[/align] [align=left] {[/align] [align=left] //在Start方法中加载视频、隐藏模型[/align] [align=left] base.Start();[/align] [align=left] LoadVideo();[/align] [align=left] HideObjects(transform);[/align] [align=left] }[/align] [align=left] /// <summary>[/align] [align=left] /// 加载视频[/align] [align=left] /// </summary>[/align] [align=left] private void LoadVideo()[/align] [align=left] {[/align] [align=left] //创建子物体VideoObject并为其添加视频组件[/align] [align=left] GameObject VideoObject = new GameObject("VideoObject");[/align] [align=left] videoPlayer = VideoObject.AddComponent<VideoPlayerBehaviour>();[/align] [align=left] VideoObject.transform.SetParent(transform);[/align] [align=left] VideoObject.transform.localPosition = Vector3.zero;[/align] [align=left] VideoObject.transform.localRotation = Quaternion.identity;[/align] [align=left] VideoObject.transform.localScale = Vector3.one;[/align] [align=left] //设置视频组件相关参数[/align] [align=left] videoPlayer.Storage = VideoStorage;[/align] [align=left] videoPlayer.Path = VideoPath;[/align] [align=left] videoPlayer.EnableAutoPlay = VideoEnableAutoPlay;[/align] [align=left] videoPlayer.EnableLoop = VideoEnableLoop;[/align] [align=left] videoPlayer.Type = VideoType;[/align] [align=left] videoPlayer.VideoReadyEvent+=videoPlayer_VideoReadyEvent;[/align] [align=left] videoPlayer.VideoReachEndEvent+=videoPlayer_VideoReachEndEvent;[/align] [align=left] videoPlayer.VideoErrorEvent+=videoPlayer_VideoErrorEvent;[/align] [align=left] videoPlayer.Open();[/align] [align=left] videoPlayer.Play();[/align] [align=left] }[/align] [align=left] #region 视频组件相关事件定义[/align] public virtual void videoPlayer_VideoErrorEvent(object sender, System.EventArgs e) [align=left] {[/align] [align=left] }[/align] public virtual void videoPlayer_VideoReachEndEvent(object sender, System.EventArgs e) [align=left] {[/align] [align=left] }[/align] public virtual void videoPlayer_VideoReadyEvent(object sender, System.EventArgs e) [align=left] {[/align] [align=left] }[/align] [align=left] #endregion[/align] [align=left] /// <summary>[/align] [align=left] /// 隐藏模型的方法[/align] [align=left] /// </summary>[/align] [align=left] /// <param name="trans">要隐藏的Transform</param>[/align] void HideObjects(Transform trans) [align=left] {[/align] for (int i = 0; i < trans.childCount; ++i) [align=left] HideObjects(trans.GetChild(i));[/align] if (transform != trans) [align=left] gameObject.SetActive(false);[/align] [align=left] }[/align] [align=left] /// <summary>[/align] [align=left] /// 显示模型的方法[/align] [align=left] /// </summary>[/align] [align=left] /// <param name="trans">要显示的Transform</param>[/align] public void ShowObjects(Transform trans) [align=left] {[/align] for (int i = 0; i < trans.childCount; ++i) [align=left] ShowObjects(trans.GetChild(i));[/align] if (transform != trans) [align=left] gameObject.SetActive(true);[/align] [align=left] }[/align] [align=left] /// <summary>[/align] [align=left] /// 实现ITargetEventHandler接口中的OnTargetFound方法[/align] [align=left] /// </summary>[/align] [align=left] /// <param name="target">识别目标</param>[/align] void ITargetEventHandler.OnTargetFound(Target target) [align=left] {[/align] [align=left] if (videoPlayer)[/align] [align=left] videoPlayer.Play();[/align] [align=left] ShowObjects(transform);[/align] [align=left] }[/align] [align=left] /// <summary>[/align] [align=left] /// 实现ITargetEventHandler接口中的OnTargetLost方法[/align] [align=left] /// </summary>[/align] [align=left] /// <param name="target">识别目标</param>[/align] void ITargetEventHandler.OnTargetLost(Target target) [align=left] {[/align] [align=left] if (videoPlayer)[/align] [align=left] videoPlayer.Pause();[/align] [align=left] HideObjects(transform);[/align] [align=left] }[/align] [align=left] /// <summary>[/align] [align=left] /// 实现ITargetEventHandler接口中的OnTargetLoad方法[/align] [align=left] /// </summary>[/align] [align=left] /// <param name="target">识别目标</param>[/align] void ITargetEventHandler.OnTargetLoad(Target target, bool status) [align=left] {[/align] [align=left] }[/align] [align=left] /// <summary>[/align] [align=left] /// 实现ITargetEventHandler接口中的OnTargetUnload方法[/align] [align=left] /// </summary>[/align] [align=left] /// <param name="target">识别目标</param>[/align] void ITargetEventHandler.OnTargetUnload(Target target, bool status) [align=left] {[/align] [align=left] }[/align] [align=left]}[/align] |
* 在Assets/EasyAR/Prefabs目录下找到EasyAR这个预制体,添加EasyARConfig组件,然后填写KEY。
* 在Assets/EasyAR/Prefabs目录中找到ImageTarget这个预制体,然后使用VideoTargetBaseBehaviour组件替换默认的ImageTargetBehaviour组件。
相关文章推荐
- C++第六次实验——数组的操作。
- thinkphp3.x自定义Action、Model及View的简单实现方法
- spring boot 事件发布与接收
- C++ 文件输入输出(三)
- JAVA的精华就在面向对象思想
- C++第六次上机作业-矩阵求和
- spring mvc 使用kaptcha生成验证码
- ASP.NET MVC 4 异步加载控制器
- Java学习之反射机制笔记--4
- c++第6次实验-项目2-数组合并
- 349. Intersection of Two Arrays [easy] (Python)
- c++第六次实验
- Spring mvc 自定义拦截器【详解】
- 使用maven搭建Java Web的spring MVC项目
- Execution failed for task ':xxx:packageAllDebugClassesForMul tiDex'. > java.util
- 在ASP.NET 2.0中操作数据之七十二:调试存储过程
- struts2 开发
- ASP.NET 用户控件实现后台确认提醒框
- String的hashcode(java)
- c++第6次试验