Unity 代码控制音频播放

1.通过访问目标位置,调用音频文件

public class Sound : MonoBehaviour {

    public AudioSource audiosource;

    public static Sound _instance;
    void Awake () {
        audiosource = gameObject.AddComponent<AudioSource>();
        
        audiosource.playOnAwake = false;  //playOnAwake设为false时,通过调用play()方法启用

        _instance = this; //通过Sound._instance.方法调用
	}
	
    //在指定位置播放音频 PlayClipAtPoint()
    public void PlayAudioByName(string name)
    {
        //这里目标文件处在 Resources/Sounds/目标文件name
        AudioClip clip = Resources.Load<AudioClip>("Sounds/"+name);
        AudioSource.PlayClipAtPoint(clip, Camera.main.transform.position);
    }

    //如果当前有其他音频正在播放,停止当前音频,播放下一个
    public void PlayMusicByName(string name)
    {
        AudioClip clip = Resources.Load<AudioClip>("Sounds/" + name);

        if (audiosource.isPlaying)
        {
            audiosource.Stop();
        }

        audiosource.clip = clip;
        audiosource.Play();
    }
}

2.碰撞触发音效

public AudioClip AC;  
public void OnCollisionEnter(Collision collision)  
//或者OnTriggerEnter(Collider collider)  
{  
    //被撞得物体原点发出声音(第二个参数用来设置发出声音的世界坐标,不要离AudioListener太远)  
    AudioSource.PlayClipAtPoint(AC, transform.localPosition);  
}  

3.Animation动作回调的音效

public class AnimationCallSound : MonoBehaviour 
{
    //防止同一个动作多次注册回调
    public static List<string> isHaveevent = new List<string>();
 
    //调用事件
    public float EventTime;
    //要播放的音效(必须绑定一个AudioSource组件)
    public AudioSource AS;
 
	void Start () 
    {
        if (AS == null)
            Debug.LogError("没有绑定音效");
        AddEvent();
        //防止场景内动作相同的物体动作同步
        Invoke("PlayAnim",Random.Range(0.1f,5.5f));
	}
    void PlayAnim()
    {
        animation.Play();
    }
 
	
    //给Animation动画注册回调事件
    void AddEvent()
    {
        foreach (string name in isHaveevent)
        {
            if (animation.clip.name == name)
                return;
        }
        
        AnimationEvent auidoEvent = new AnimationEvent();
        auidoEvent.time = EventTime;
        auidoEvent.functionName = "PlayAudio";
 
        animation.clip.AddEvent(auidoEvent);
        isHaveevent.Add(animation.clip.name);
        Debug.Log("add " + animation.clip.name + " Event!");
    }
 
    public void PlayAudio()
    {
        AS.Play();
    }
}

猜你喜欢

转载自blog.csdn.net/A2689863090/article/details/82783331