关于VideoPlayer以及使用VUforia播放视频的见解

Unity5.6.x以后新增了VideoPlayer,可以直接覆盖物体的Material播放视频,相比于以前的MovieTexture方便了很多。下边介绍一下VideoPlayer的一些属性。

  • Source 可以选择两种资源模式,一种就是本地导入的视频片段,另一种就是URL资源。
  • PlayOnAwake是否在激活脚本的时候播放。
  • WaitForFirstFrame 是否等待第一帧,也就是是不是等一帧再播放视频。
  • Loop 循环播放。
  • PlaybackSpeed 播放速度。
  • RenderMode 这里是渲染模式总共有五种,分别是:
    - MaterialOverride:通过重载Material来播放视频;
    - CameraFarPlane:视频渲染在相机的最远端;
    - CameraNearPlane:视频渲染在相机的最近端;
    - RendererTexture:用于MovieTexture;
    - APIOnly:——–

这里值得注意的是AudioOutputMode:
- AudioSource:从AudioSource播放音频,只需要把AudioSource拖进来就可以了,我昨天做一个Demo的时候无法播放声音,最后用了Premiere把视频声音剥离出来以后才播放成功。其实这里不用,只需要创建一个AudioSource然后放在这里就可以了。
- None:就是不播放声音咯。
- Direct:使用这个测试,但是没有声音,还需要测试。

VideoPlayer

之后就是比较有技术含量的了。如何在Vuforia中通过追踪来实现是否播放视频呢
首先,Vuforia控制追踪物体的脚本叫做:DefaultTrackableEventHandler。这里边有两个方法,分别叫做:OnTrackingFound()、OnTrackingLost()。这两个方法在 OnTrackableStateChanged()这个方法中调用。
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
}
else
{
OnTrackingLost();
}
}

所以我们需要在追踪到和失去追踪的时候搞点事情,就要在OnTrackingFound()、OnTrackingLost()这两个方法里做了。我们需要在状态改变调用这两个方法的时候告诉我们,就需要有事件能够通知到订阅者,所以我们在这个类里边定义了两个事件:

public static event Action<bool> Event_OnTrackingFound;
public static event Action<bool> Event_OnTrackingLost;

因为要判断是否播放,所以参数应该是bool类型,现在我们需要在TrackingFound和Lost的时候告诉事件的订阅者。

 if (Event_OnTrackingFound != null)
            {
                Event_OnTrackingFound(false);
            }

此时,我们就需要用拿到的参数来决定视频是否播放啦。我们需要一个新的类:VideoPlayerController因为DefaultTrackableEventHandler这个类在Vuforia的名空间下,所以在VideoPlayer中需要引用Vuforia的名空间。下边附上VideoPlayerController的代码片供大家参考。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
using System;
using Vuforia;
public class VideoPlayerController : MonoBehaviour {

    private VideoPlayer videoPlayer;

    void Awake()
    {
        videoPlayer = this.GetComponent<VideoPlayer>();
        DefaultTrackableEventHandler.Event_OnTrackingFound += HanleTrackFound;
        DefaultTrackableEventHandler.Event_OnTrackingLost += HanleTranckLost;
    }
    void Start()
    {

    }
    private void HanleTrackFound(bool isFound)
    {
        if (isFound)
        {
            videoPlayer.Play();
        }
        else
        {
           videoPlayer.Pause();
        }

    }
    private void HanleTranckLost(bool isLost)
    {
        if (isLost)
        {
            videoPlayer.Pause();
        }

    }
    void OnDestroy()
    {
        DefaultTrackableEventHandler.Event_OnTrackingFound -= HanleTrackFound;
        DefaultTrackableEventHandler.Event_OnTrackingLost -= HanleTranckLost;
    }
}

这样就实现了,使用Vuforia在扫描到识别物的时候播放视频,丢失识别物的时候暂停的效果。

Unity Vuforia是一个强大的增强现实(Augmented Reality, AR)开发平台,它允许开发者将AR内容融入到现实世界中。Vuforia提供了跟踪系统和图像识别功能,使得游戏或应用能在摄像头识别特定的标志(称为“目标”或“模板”)时,加载预设的3D模型、视频或交互元素。 "脱卡"通常是指防止应用程序在运行时因为硬件故障或资源不足而意外退出或暂停。在使用Unity Vuforia时,为了保证流畅体验并减少卡顿,你可以采取以下措施: 1. **优化性能**:检查场景中的物体是否过度渲染,尽量减少高复杂度或大体积模型。合理设置LOD(Level of Detail)和纹理压缩。 2. **使用异步加载**:对于较大的资源,如3D模型或音频,可以使用异步加载方式,避免阻塞主线程。 3. **碰撞检测优化**:如果存在复杂的碰撞检测,尝试优化碰撞器层级或使用更高效的碰撞解决方案。 4. **资源预加载**:在场景切换前预加载可能要用到的资源,减少加载时间。 5. **设备兼容性检查**:确保你的应用在各种设备上都能正常运行,并针对不同设备调整性能设置。 6. **使用Vuforia提供的工具**:Vuforia提供了性能分析工具,帮助你找出性能瓶颈。 相关问题-- 1. 如何在Unity中设置Vuforia的资源加载策略? 2. 在Vuforia中如何处理AR对象的碰撞检测优化? 3. 如何在Unity中利用Vuforia的性能分析工具进行调试?
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值