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

这个增强 ImageTarget 是指在 ImageTarget 的基础上融入 VideoPlayerBehaviour 的功能,因为按照官方的示例来考虑,这两部分功能是独立的,博主希望让大家在制作识别图的时候完全忘记区别 ImageTarget VideoTarget ,这样我们可以更为专注地制作识别图,因为视频组件就只是设置参数这一件事情,完全可以一次性搞定,所以我们首先来定义一个 VideoTargetBaseBehaviour 类,一起来看代码:
  
  
  
{
  
    ///  <summary>
  
    ///  视频播放模块
  
    ///  </summary>
  
    private   VideoPlayerBehaviour videoPlayer;
  
    ///  <summary>
  
    ///  视频文件路径
  
    ///  </summary>
  
    public   string   VideoPath;
  
    ///  <summary>
  
    ///  是否自动播放视频
  
    ///  </summary>
  
    public   bool   VideoEnableAutoPlay = true;
  
    ///  <summary>
  
    ///  是否允许视频循环
  
    ///  </summary>
  
    public   bool   VideoEnableLoop = true;
  
    ///  <summary>
  
    ///  视频类型
  
    ///  </summary>
  
    public   VideoPlayer.VideoType VideoType =  VideoPlayer.VideoType.TransparentSideBySide;
  
    ///  <summary>
  
    ///  视频资源类型
  
    ///  </summary>
  
    public   StorageType VideoStorage = StorageType.Assets;
  
    ///  <summary>
  
    ///  视频是否加载
  
    ///  </summary>
  
    private   bool   isVideoLoaded;
  
    protected   override   void   Start()
  
    {
  
        // 在Start方法中加载视频、隐藏模型
  
        base.Start();
  
        LoadVideo();
  
        HideObjects(transform);
  
    }
  
    ///  <summary>
  
    ///  加载视频
  
    ///  </summary>
  
    private   void   LoadVideo()
  
    {
  
        // 创建子物体VideoObject并为其添加视频组件
  
        GameObject  VideoObject = new   GameObject("VideoObject");
  
        videoPlayer  = VideoObject.AddComponent<VideoPlayerBehaviour>();
  
        VideoObject.transform.SetParent(transform);
  
        VideoObject.transform.localPosition  = Vector3.zero;
  
        VideoObject.transform.localRotation  = Quaternion.identity;
  
        VideoObject.transform.localScale  = Vector3.one;
  
        // 设置视频组件相关参数
  
        videoPlayer.Storage  = VideoStorage;
  
        videoPlayer.Path  = VideoPath;
  
        videoPlayer.EnableAutoPlay  = VideoEnableAutoPlay;
  
        videoPlayer.EnableLoop  = VideoEnableLoop;
  
        videoPlayer.Type  = VideoType;
  
        videoPlayer.VideoReadyEvent+=videoPlayer_VideoReadyEvent;
  
        videoPlayer.VideoReachEndEvent+=videoPlayer_VideoReachEndEvent;
  
        videoPlayer.VideoErrorEvent+=videoPlayer_VideoErrorEvent;
  
        videoPlayer.Open();
  
        videoPlayer.Play();
  
    }
  
    #region   视频组件相关事件定义
  
    public   virtual   void   videoPlayer_VideoErrorEvent(object   sender, System.EventArgs e)
  
    {
  
    }
  
    public   virtual   void   videoPlayer_VideoReachEndEvent(object   sender, System.EventArgs e)
  
    {
  
    }
  
    public   virtual   void   videoPlayer_VideoReadyEvent(object   sender, System.EventArgs e)
  
    {
  
    }
  
    #endregion
  
    ///  <summary>
  
    ///  隐藏模型的方法
  
    ///  </summary>
  
    ///  <param name="trans"> 要隐藏的Transform</param>
  
    void   HideObjects(Transform trans)
  
    {
  
        for   (int   i = 0; i < trans.childCount; ++i)
  
            HideObjects(trans.GetChild(i));
  
        if   (transform != trans)
  
            gameObject.SetActive(false);
  
    }
  
    ///  <summary>
  
    ///  显示模型的方法
  
    ///  </summary>
  
    ///  <param name="trans"> 要显示的Transform</param>
  
    public   void   ShowObjects(Transform trans)
  
    {
  
        for   (int   i = 0; i < trans.childCount; ++i)
  
            ShowObjects(trans.GetChild(i));
  
        if   (transform != trans)
  
            gameObject.SetActive(true);
  
    }
  
    ///  <summary>
  
    ///  实现ITargetEventHandler接口中的OnTargetFound方法
  
    ///  </summary>
  
    ///  <param name="target"> 识别目标</param>
  
    void   ITargetEventHandler.OnTargetFound(Target target)
  
    {
  
        if   (videoPlayer)
  
        videoPlayer.Play();
  
        ShowObjects(transform);
  
    }
  
    ///  <summary>
  
    ///  实现ITargetEventHandler接口中的OnTargetLost方法
  
    ///  </summary>
  
    ///  <param name="target"> 识别目标</param>
  
    void   ITargetEventHandler.OnTargetLost(Target target)
  
    {
  
        if   (videoPlayer)
  
            videoPlayer.Pause();
  
        HideObjects(transform);
  
    }
  
    ///  <summary>
  
    ///  实现ITargetEventHandler接口中的OnTargetLoad方法
  
    ///  </summary>
  
    ///  <param name="target"> 识别目标</param>
  
    void   ITargetEventHandler.OnTargetLoad(Target target, bool   status)
  
    {
  
    }
   ///  <summary>
  
    ///  实现ITargetEventHandler接口中的OnTargetUnload方法
  
    ///  </summary>
  
    ///  <param name="target"> 识别目标</param>
  
    void   ITargetEventHandler.OnTargetUnload(Target target, bool   status)
  
    {
  
    }
  
}
在这段代码中博主采用了动态创建视频组件的方法,这样我们在制作 VideoTarget 的时候只需要按照以下步骤即可:  
Assets/EasyAR/Prefabs 目录下找到 EasyAR 这个预制体,添加 EasyARConfig 组件,然后填写 KEY
Assets/EasyAR/Prefabs 目录中找到 ImageTarget 这个预制体,然后使用 VideoTargetBaseBehaviour 组件替换默认的 ImageTargetBehaviour 组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值