在发生碰撞时如何播放音频剪辑?

时间:2018-11-07 19:10:09

标签: c# unity3d

我正在尝试播放播放器与特定障碍物碰撞时的声音片段。我在障碍物上创建了一个AudioSource,并编写了以下脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(AudioSource))]
 public class sound : MonoBehaviour {


    AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();

    }

    void OnCollisionEnter(Collision col)  
    {
    if (col.gameObject.CompareTag("Player"))
        Debug.Log("hit");

        GetComponent<AudioSource>().Play();

    }

}

我给玩家一个标签“ Player”,但是当它们碰撞时,即使它们都具有2Dcollider组件,也不会记录碰撞。我编写要检查的debug.log语句中没有声音,也没有说“命中”。

我查看了Unity文档,但看不到我做错了什么-我缺少什么?

2 个答案:

答案 0 :(得分:1)

在带有2D组件的2D环境中工作时,您需要使用2D结尾来使某些功能起作用。 就您而言,您使用

void OnCollisionEnter(Collision c)

但是您需要使用

void OnCollisionEnter2D(Collission2D c)

文档: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter2D.html

由于您已经在Start()中将变量设置为组件,因此您还可以使用audioSource.Play()。代替GetComponent()。Play();

答案 1 :(得分:0)

如果是3D,

void OnTriggerEnter(Collider other){
  if(other.tag == "Player"){

          this.GetComponent<AudioSource>().Play();
          Debug.Log("PLayed Sound!");

  }
}

简单。祝您一切顺利!