当一个粒子与墙碰撞时,我正试图发出声音。现在,它只播放来自父对象的声音,即播放器。
但是,我希望从粒子中播放声音。这意味着当一个粒子远离左边时,你会模糊地听到左边的声音。
有没有办法在粒子发生碰撞时播放声音?
答案 0 :(得分:0)
我能想象的唯一方法是通过GetParticles / SetParticles覆盖粒子系统的动画。因此,您可以使用Physics.RaycastAll为粒子提供自己的碰撞检测,并在发生碰撞时播放声音。
答案 1 :(得分:0)
您可以使用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(实例,秒)将其标记为定时销毁。