Unity3D 从粒子播放声音

Unity3D Play sound from particle

我正在尝试在粒子与墙壁碰撞时播放声音。现在,它只是播放来自父对象的声音,即播放器。

但是,我想让声音从粒子中播放。这意味着当一个粒子离左边很远时,你会隐约听到从左边传来的声音。

有没有办法在粒子碰撞时播放它的声音?

我能想到的唯一方法是通过 GetParticles/SetParticles 覆盖粒子系统的动画。因此,您可以使用 Physics.RaycastAll 为粒子提供自己的碰撞检测,并在发生碰撞时播放声音。

您可以使用 OnParticleCollision and the ParticlePhysicsExtensions, and play a sound with 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(instance, seconds) 将其标记为定时销毁。