2016-04-28 10 views
1

Vuforiaでオブジェクトをレンダリングするときにサウンドクリップを再生しようとしています。私はこのためにVuforiaのフォーラムでsolutionを見つけましたが、実際にはUnity Crahesの私のために働いていません。VuforiaでUnity3D用にレンダリングされたオーディオを再生する

ソリューションはVuforiaのソースコードからDefaultTrackableEventHandler.cs \資産\ Vuforia \スクリプト\ファイルを変更することで構成されています

private void OnTrackingFound() 
{ 
    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true); 
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true); 

    // *** Additional Audio code 
    foreach (Transform child in transform) 
    { 
     child.audio.Play(); 
    } 

    // Enable rendering: 
    foreach (Renderer component in rendererComponents) 
    { 
     component.enabled = true; 
    } 

    // Enable colliders: 
    foreach (Collider component in colliderComponents) 
    { 
     component.enabled = true; 
    } 

    Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found"); 
} 


private void OnTrackingLost() 
{ 
    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true); 
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true); 

    // *** Additional Audio code 
    foreach (Transform child in transform) 
    { 
     child.audio.Stop(); 
    } 

    // Disable rendering: 
    foreach (Renderer component in rendererComponents) 
    { 
     component.enabled = false; 
    } 

    // Disable colliders: 
    foreach (Collider component in colliderComponents) 
    { 
     component.enabled = false; 
    } 

    Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost"); 
} 

は、それはちょうどchild.audio.Play()を追加します。が呼び出されるOnTrackingFound()およびchild.audio.Stop(); OnTrackingLost(で呼び出される

これは理論的には動作するはずです、私がイメージ・ターゲットの子としてのオーディオファイルを追加しましたが、「Component.audioは、」廃止されましたので、私はそれを変更しなければなりませんでした代わりにGetComponent<AudioSource>()になります。それが動作していないのはなぜ

// *** Additional Audio code 
    foreach (Transform child in transform) 
    { 
     child.GetComponent<AudioSource>().Play(); 
    } 

そして

// *** Additional Audio code 
    foreach (Transform child in transform) 
    { 
     child.GetComponent<AudioSource>().Stop(); 
    } 

:だからコードは次のように終わりましたか?

GetComponent<AudioSource>()が間違っていますか?

代替手段はありますか?

答えて

1

これに代わる非常に簡単な方法があります。オブジェクトにオーディオソースを追加し、目を覚ましてループがオンになっていることを確認します。

あなたのgameobjectを有効に設定すると、トラッキングが見つかりました。

0

私は以前の回答の助けを借りて問題を解決しました。 Play on Awakeをチェックして3Dオブジェクトにオーディオリソースを追加しました。次に、オーディオ再生をOnTrackingFound()にして、Image Targerの子にアクセスし、反対のOnTrackingLost()を実行します。コードは次のようになりました。

private void OnTrackingFound() 
{ 
    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true); 
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true); 

    // Enable rendering: 
    foreach (Renderer component in rendererComponents) 
    { 
      component.enabled = true; 
    } 

    // Enable colliders: 
    foreach (Collider component in colliderComponents) 
    { 
     component.enabled = true; 
    } 

    // SOLUTION 
    if (mTrackableBehaviour.gameObject.GetComponentInChildren<AudioSource>() != null) 
    { 
     mTrackableBehaviour.gameObject.GetComponentInChildren<AudioSource>().Play(); 
    } 
    Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found"); 
} 


private void OnTrackingLost() 
{ 
    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true); 
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true); 

    // Disable rendering: 
    foreach (Renderer component in rendererComponents) 
    { 
     component.enabled = false; 
    } 

    // Disable colliders: 
    foreach (Collider component in colliderComponents) 
    { 
     component.enabled = false; 
    } 

    // SOLUTION 
    if (mTrackableBehaviour.gameObject.GetComponentInChildren<AudioSource>() != null) 
    { 
     mTrackableBehaviour.gameObject.GetComponentInChildren<AudioSource>().Stop(); 
    } 
    Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost"); 
} 
関連する問題