在Project新增Create→C# Script取名为TrackableEvent
撰写程序码
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删除
将刚刚所撰写的TrackableEvent拖曳给ImageTarget,打开ImageTarget的Inspector把Hierarchy的VideoPlayer拖曳到TrackableEvent的范例影片栏位
按下测试就可以看到影片拨放罗
下一章节会教导大家如何切换场景(需要撰写程序码)。
<<: DAY13:玉山人工智慧挑战赛-中文手写字辨识(资料前处理)
>>: Return到nexttextfield Day24
哈罗大家好~ 每天的工作日常,从吃早餐了吗?这类的问候问题开始,还有来自老板的工作进度提问,到回答客...
上篇 Day 09 跟大家介绍了 State 为何?所以今天就要来看看如何利用 setState(...
前几天写了一个错误的写法, 大致上的关系长的像是下面这样 出错的地方在於我在 .h 档里面定义了一个...
在简单谈完战略篇後,接下来要进行战行篇,也就是将 DDD 实际的应用到程序码中。 在 DDD 战术层...
针对个人资料的定义在个人资料保护法第2条就有做很详细的说明,欧洲的GDPR也有规定「个人资料」是指与...