[第十四天]从0开始的UnityAR手机游戏开发-如何在辨识图卡时拨放影片03

在Project新增Create→C# Script取名为TrackableEvent
https://ithelp.ithome.com.tw/upload/images/20210928/20140569D8L8Q6iiyc.png

撰写程序码

using UnityEngine;
using UnityEngine.Video;
using Vuforia;

public class TrackableEvent : MonoBehaviour, ITrackableEventHandler
{
    #region PROTECTED_MEMBER_VARIABLES

    protected TrackableBehaviour mTrackableBehaviour;
    protected TrackableBehaviour.Status m_PreviousStatus;
    protected TrackableBehaviour.Status m_NewStatus;

    #endregion // PROTECTED_MEMBER_VARIABLES
    //这里放入要拨放的影片
    [Header("范例影片")]
    public VideoPlayer VideoPlayer;

    #region UNITY_MONOBEHAVIOUR_METHODS

    protected virtual void Start()
    {
        mTrackableBehaviour = GetComponent<TrackableBehaviour>();
        if (mTrackableBehaviour)
            mTrackableBehaviour.RegisterTrackableEventHandler(this);
    }

    protected virtual void OnDestroy()
    {
        if (mTrackableBehaviour)
            mTrackableBehaviour.UnregisterTrackableEventHandler(this);
    }

    #endregion // UNITY_MONOBEHAVIOUR_METHODS

    #region PUBLIC_METHODS
    public void OnTrackableStateChanged(
        TrackableBehaviour.Status previousStatus,
        TrackableBehaviour.Status newStatus)
    {
        m_PreviousStatus = previousStatus;
        m_NewStatus = newStatus;

        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED ||
            newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
            OnTrackingFound();
        }
        else if (previousStatus == TrackableBehaviour.Status.TRACKED &&
                 newStatus == TrackableBehaviour.Status.NO_POSE)
        {
            Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
            OnTrackingLost();
        }
        else
        {
            // For combo of previousStatus=UNKNOWN + newStatus=UNKNOWN|NOT_FOUND
            // Vuforia is starting, but tracking has not been lost or found yet
            // Call OnTrackingLost() to hide the augmentations
            OnTrackingLost();
        }
    }

    #endregion // PUBLIC_METHODS

    #region PROTECTED_METHODS
    //OnTrackingFound是照到辨识图所触发的事件
    protected virtual void OnTrackingFound()
    {
        var rendererComponents = GetComponentsInChildren<Renderer>(true);
        var colliderComponents = GetComponentsInChildren<Collider>(true);
        var canvasComponents = GetComponentsInChildren<Canvas>(true);

        // Enable rendering:
        foreach (var component in rendererComponents)
            component.enabled = true;

        // Enable colliders:
        foreach (var component in colliderComponents)
            component.enabled = true;

        // Enable canvas':
        foreach (var component in canvasComponents)
            component.enabled = true;
       //影片拨放
        VideoPlayer.Play();
    }

    //OnTrackingLost是没照到辨识图所触发的事件
    protected virtual void OnTrackingLost()
    {
        var rendererComponents = GetComponentsInChildren<Renderer>(true);
        var colliderComponents = GetComponentsInChildren<Collider>(true);
        var canvasComponents = GetComponentsInChildren<Canvas>(true);

        // Disable rendering:
        foreach (var component in rendererComponents)
            component.enabled = false;

        // Disable colliders:
        foreach (var component in colliderComponents)
            component.enabled = false;

        // Disable canvas':
        foreach (var component in canvasComponents)
            component.enabled = false;
       //影片停止拨放
        VideoPlayer.Stop();
    }

    #endregion // PROTECTED_METHODS
}

在DefaultTrackableEventHandler点击右键Remove Component删除
https://ithelp.ithome.com.tw/upload/images/20210928/20140569mb1tv7sNc6.png

将刚刚所撰写的TrackableEvent拖曳给ImageTarget,打开ImageTarget的Inspector把Hierarchy的VideoPlayer拖曳到TrackableEvent的范例影片栏位
https://ithelp.ithome.com.tw/upload/images/20210928/20140569H28UrKVUF3.png

按下测试就可以看到影片拨放罗
https://ithelp.ithome.com.tw/upload/images/20210928/20140569knoLyaLSmy.png


下一章节会教导大家如何切换场景(需要撰写程序码)。


<<:  DAY13:玉山人工智慧挑战赛-中文手写字辨识(资料前处理)

>>:  Return到nexttextfield Day24

【DAY 21】为什麽每天可以有这麽多问题?如果有机器人可以帮帮我就好了!— Microsoft Power Virtual Agents 智慧虚拟助理来罗~

哈罗大家好~ 每天的工作日常,从吃早餐了吗?这类的问候问题开始,还有来自老板的工作进度提问,到回答客...

[ Day 10 ] setState() 的用法

上篇 Day 09 跟大家介绍了 State 为何?所以今天就要来看看如何利用 setState(...

[C 语言笔记--Day16] 纪录前几天写错的东西

前几天写了一个错误的写法, 大致上的关系长的像是下面这样 出错的地方在於我在 .h 档里面定义了一个...

30-28 之 DDD 战术篇1 - Entity 与 Value Object

在简单谈完战略篇後,接下来要进行战行篇,也就是将 DDD 实际的应用到程序码中。 在 DDD 战术层...

Day 19 规划隐私资料敏感度分级

针对个人资料的定义在个人资料保护法第2条就有做很详细的说明,欧洲的GDPR也有规定「个人资料」是指与...