您的位置:首页 > 编程语言

EasyAR尝鲜系列教程之视频播放功能代码

2016-05-19 11:52 330 查看
这个增强ImageTarget是指在ImageTarget的基础上融入VideoPlayerBehaviour的功能,因为按照官方的示例来考虑,这两部分功能是独立的,博主希望让大家在制作识别图的时候完全忘记区别ImageTarget和VideoTarget,这样我们可以更为专注地制作识别图,因为视频组件就只是设置参数这一件事情,完全可以一次性搞定,所以我们首先来定义一个VideoTargetBaseBehaviour类,一起来看代码:

[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]
在这段代码中博主采用了动态创建视频组件的方法,这样我们在制作VideoTarget的时候只需要按照以下步骤即可:

* 在Assets/EasyAR/Prefabs目录下找到EasyAR这个预制体,添加EasyARConfig组件,然后填写KEY。

* 在Assets/EasyAR/Prefabs目录中找到ImageTarget这个预制体,然后使用VideoTargetBaseBehaviour组件替换默认的ImageTargetBehaviour组件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: