2015-06-19 47 views
1

我試圖在粒子碰撞牆壁時播放聲音。現在,它只是播放來自父對象(播放器)的聲音。Unity3D從粒子播放聲音

但是,我想從粒子播放聲音。這意味着當粒子離左邊很遠時,你隱約聽到從左邊傳來的聲音。

有沒有辦法從一個粒子播放聲音,當它碰撞?

回答

0

您可以使用OnParticleCollisionParticlePhysicsExtensions,並播放聲音與PlayClipAtPoint

using UnityEngine; 
using System.Collections; 

[RequireComponent(typeof(ParticleSystem))] 
public class CollidingParticles : MonoBehaviour { 

    public AudioClip collisionSFX; 

    ParticleSystem partSystem; 
    ParticleCollisionEvent[] collisionEvents; 

    void Awake() { 

     partSystem = GetComponent<ParticleSystem>(); 
     collisionEvents = new ParticleCollisionEvent[16]; 
    } 

    void OnParticleCollision (GameObject other) { 

     int safeLength = partSystem.GetSafeCollisionEventSize(); 
     if (collisionEvents.Length < safeLength) 
      collisionEvents = new ParticleCollisionEvent[safeLength]; 

     int totalCollisions = partSystem.GetCollisionEvents(other, collisionEvents); 
     for (int i = 0; i < totalCollisions; i++) 
      AudioSource.PlayClipAtPoint(collisionSFX, collisionEvents[i].intersection); 

     print (totalCollisions); 
    } 
} 

的問題是,由PlayClipAtPoint創建臨時的AudioSource不能被檢索(將其設置爲3D音效)。所以你最好創建自己的PlayClipAtPoint方法來實例化已經配置了3D AudioSource和你想要的剪輯的預製件,並運行Destroy(實例,秒)來標記它以進行定時銷燬。

+0

工程就像一個魅力!謝謝。 – Rudewit

0

我能想象的唯一方法是通過GetParticles/SetParticles覆蓋粒子系統的動畫。因此,您可以使用Physics.RaycastAll爲粒子提供自己的碰撞檢測,並在碰撞發生時播放聲音。