2017-02-01 3 views
2

免責事項:この問題は、このバグのために終了していない学校プロジェクトでした。プロジェクトが終わって、将来の開発者のための命題はできますが、私はもうソースコードにアクセスできないので、答えを検証することはできません。HTC Vive Controllerが触れている限り、サウンドはBoxColliderになります。[古い]

私は現在、HTC ViveとUnity 3Dを使用して学校プロジェクトのドラムシミュレーションを作成しています。

ことを行うために、私はタムと方法にBoxColliderを使用:

void OnCollisionEnter(Collision col) 
{ 
    GetComponent<AudioSource>().Play();   
} 

HTC Viveのリモコンはトムに触れたときに音が再生されるようにします。 問題は、リモコンが衝突したときに1回再生するのではなく、リモコンがトムに触れる限り、音が再生され続けることです。

また、同じ結果を得てOnTriggerEnter()メソッドを試しました。

+0

オーディオソースで[ループ]オプションが選択されていることを確認してください。チェックを外してください。あなたは大丈夫です。また、オーディオファイル自体が大きくても小さくても何度も何度も繰り返しループしているかどうかを確認してください。 –

+0

@PrathamSehgalコメントをいただきありがとうございますが、私が作業していたプロジェクトは終了しましたので、この質問を締め切ります。 – sh5164

答えて

0

bool変数を作成し、これを使用して1回だけ再生を制御します。

+0

私はそれについて考えましたが、適切なタイミングで「偽」に戻す方法がある場合を除いて、衝突時に一度ではなく、すべてのシミュレーションで音を一度再生することができます。 – sh5164

+0

コントローラがトムを離れると、それをfalseに戻すことがあります – navylover

0

コルーチンを使用して、サウンドクリップの持続時間中にサウンドが繰り返されないようにすることができます。

void OnCollisionEnter(Collision col) 
{ 
    if(!isPlaying) 
    { 
     AudioSource audio = GetComponent<AudioSource>(); 
     audio.Play(); 
     StartCoroutine(FinishSound(audio.clip.length)); 
    } 
} 

void OnCollisionExit(Collision col) 
{ 
    isPlaying = false; 
} 

IEnumerator FinishSound(float l) 
{ 
    yield return new WaitForSeconds(l);   
    isPlaying = false;   
} 
関連する問題