質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vuforia Engine

Vuforia Engineは、スマートフォンやタブレット端末、ウェアラブルデバイスに対応したAR開発用ソフトウェアです。物体形状を認識しARを作成できる機能があり、多彩で精度の高い対象認識技術が特徴。デバイスのカメラを利用できる外部カメラ機能や、水平面を認識してARを表示する機能も備えています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1461閲覧

VuforiaでARマーカーを認識時に映像をランダムで再生する方法

X_V

総合スコア2

Vuforia Engine

Vuforia Engineは、スマートフォンやタブレット端末、ウェアラブルデバイスに対応したAR開発用ソフトウェアです。物体形状を認識しARを作成できる機能があり、多彩で精度の高い対象認識技術が特徴。デバイスのカメラを利用できる外部カメラ機能や、水平面を認識してARを表示する機能も備えています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/07/08 10:03

前提・実現したいこと

初めまして。
Unity2018.4.36のvuforiaでARでランダムで映像を再生するscriptを書いています。

発生している問題・エラーメッセージ

ARのマーカーを認識時に映像をランダムで一つ再生するところが上手く行かず困っています。ご助力いただけないでしょうか。

該当のソースコード

/*==============================================================================
Copyright (c) 2019 PTC Inc. All Rights Reserved.

Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.
All Rights Reserved.
Confidential and Proprietary - Protected under copyright and other laws.
==============================================================================*/

using UnityEngine;
using Vuforia;
using UnityEngine.Video;

/// <summary>
/// A custom handler that implements the ITrackableEventHandler interface.
///
/// Changes made to this file could be overwritten when upgrading the Vuforia version.
/// When implementing custom event handler behavior, consider inheriting from this class instead.
/// </summary>
public class DefaultTrackableEventHandler2 : MonoBehaviour, ITrackableEventHandler
{
#region PROTECTED_MEMBER_VARIABLES

protected TrackableBehaviour mTrackableBehaviour; protected TrackableBehaviour.Status m_PreviousStatus; protected TrackableBehaviour.Status m_NewStatus; [SerializeField] VideoPlayer videoPlayer; [SerializeField] VideoClip[] videoClips; private int number; #endregion // PROTECTED_MEMBER_VARIABLES #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 /// <summary> /// Implementation of the ITrackableEventHandler function called when the /// tracking state changes. /// </summary> public void OnTrackableStateChanged( TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { m_PreviousStatus = previousStatus; m_NewStatus = newStatus; Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " " + mTrackableBehaviour.CurrentStatus + " -- " + mTrackableBehaviour.CurrentStatusInfo); if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { OnTrackingFound(); } else if (previousStatus == TrackableBehaviour.Status.TRACKED && newStatus == TrackableBehaviour.Status.NO_POSE) { 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 void SelectClipRandomly(VideoPlayer v) { v.Stop(); // 再生を停止 v.clip = videoClips[Random.Range(0, videoClips.Length)]; // 動画をランダムに選ぶ v.Prepare(); // 事前に読み込む } protected virtual void OnTrackingFound() { if (mTrackableBehaviour) { var rendererComponents = mTrackableBehaviour.GetComponentsInChildren<Renderer>(true); var colliderComponents = mTrackableBehaviour.GetComponentsInChildren<Collider>(true); var canvasComponents = mTrackableBehaviour.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; } // ARマーカーが認識されたら動画が再生されるようにします number = Random.Range(0, 2); videoPlayer.frame = 0; videoPlayer.Play(); } protected virtual void OnTrackingLost() { // ついでにARマーカーの認識が外れたら停止するようにしておきます videoPlayer.frame = 0; videoPlayer.Pause(); if (mTrackableBehaviour) { var rendererComponents = mTrackableBehaviour.GetComponentsInChildren<Renderer>(true); var colliderComponents = mTrackableBehaviour.GetComponentsInChildren<Collider>(true); var canvasComponents = mTrackableBehaviour.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; } } public override bool Equals(object obj) { return obj is DefaultTrackableEventHandler2 handler && base.Equals(obj) && number == handler.number; } public override int GetHashCode() { return base.GetHashCode(); } public override string ToString() { return base.ToString(); } #endregion // PROTECTED_METHODS

}

補足情報(FW/ツールのバージョンなど)

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問