1

单击时,我正在运行时更新 Unity3D 中的 AudioSource。

我创建了一个立方体游戏对象。

当我单击多维数据集时,我将属性发送到我的 AudioSource。

注意:这是为了最终播放许多其他 wav 文件,这些文件是通过管道分隔的 wav 文件的字符串数组(存在于 Assets Audio 文件夹中)传入的。

因此,我需要使用每个 CLICK EVENT 更新 AudioSource,从而每次它都会加载从数组中选择的新文件。

好的,Unity3D 编辑器从脚本中显示我的公共变量,并在运行时填充它们(单击多维数据集时)。

我的路径变量在 Unity3D 编辑器中完美显示。

但问题是,尽管编辑器中的Audio Clip 属性显示了橙色的小音频徽标(好像那里/加载了某些东西),但我从 Assets/Audio 文件夹中抓取的文件的名称始终为空。

什么都没有播放,但我没有错误

以及playOnAwakevolume等属性。所有这些都向我展示了我通过我的脚本表达他们要做什么。

注意:在第一张图片中,路径 变量正确指向 .wav 文件。

为什么我的 .wav 没有播放?

为什么 .wav 文件名没有出现在音频剪辑文本框区域中?

我在脚本中公开声明的变量。

我创建的音频源。

public Color clickColor;
public Color releaseColor;
public int clickcount = 0;    
public WWW www;
public AudioClip myAudioClip;
public string path;

void CubeClicked(GameObject tmpGameObject)
{
    // CLICK COUNT
    clickcount++;

    // CLICK COLOR
    tmpGameObject.GetComponent<Renderer>().materials[0].color = clickColor; 

    // IS TRIGGER
    tmpGameObject.GetComponent<Collider>().isTrigger = true; 

    //AUDIO
    path = "file://" + Application.dataPath.Substring(0, Application.dataPath.LastIndexOf("/")) + "/Assets/Audio/JetEngine.wav";
    www = new WWW(path);
    myAudioClip = www.audioClip;

    tmpGameObject.GetComponent<AudioSource>().clip = myAudioClip;
    tmpGameObject.GetComponent<AudioSource>().playOnAwake = false;
    tmpGameObject.GetComponent<AudioSource>().volume = 0.999f;
    tmpGameObject.GetComponent<AudioSource>().Play();

}
4

1 回答 1

2

Cabbra 的建议正是我所需要的。添加“收益回报www;” 强迫我使用 IEnumerator 并且神奇地,它开始工作了!

StartCoroutine(playMusic(tmpGameObject));  

public IEnumerator playMusic(GameObject tmpGameObject){
    /*Same code from before goes here!*/
}
于 2016-07-07T20:00:14.843 回答