我試圖在粒子碰撞牆壁時播放聲音。現在,它只是播放來自父對象(播放器)的聲音。Unity3D從粒子播放聲音
但是,我想從粒子播放聲音。這意味着當粒子離左邊很遠時,你隱約聽到從左邊傳來的聲音。
有沒有辦法從一個粒子播放聲音,當它碰撞?
我試圖在粒子碰撞牆壁時播放聲音。現在,它只是播放來自父對象(播放器)的聲音。Unity3D從粒子播放聲音
但是,我想從粒子播放聲音。這意味着當粒子離左邊很遠時,你隱約聽到從左邊傳來的聲音。
有沒有辦法從一個粒子播放聲音,當它碰撞?
您可以使用OnParticleCollision和ParticlePhysicsExtensions,並播放聲音與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(實例,秒)來標記它以進行定時銷燬。
我能想象的唯一方法是通過GetParticles/SetParticles覆蓋粒子系統的動畫。因此,您可以使用Physics.RaycastAll爲粒子提供自己的碰撞檢測,並在碰撞發生時播放聲音。
工程就像一個魅力!謝謝。 – Rudewit