我正在尝试从资源文件夹加载 MP3 文件数组,然后将每个 MP3 文件分配给游戏对象的音频剪辑值。
此游戏对象列表(称为"注释")已排序,并且 MP3 文件已手动排序(其名称按数字顺序排列)。
下面是我的尝试,我删除了排序方法 SortNotes() 以节省空间(它工作得很好,不是问题)。
// An array of Notes
public GameObject[] NotesArray;
AudioClip[] pickupMP3s;
// Use this for initialization
void Start () {
// Grab and sort array of Notes
NotesArray = GameObject.FindGameObjectsWithTag("Note");
SortNotes();
// Grab a list of pick-up mp3 files
pickupMP3s = Resources.LoadAll("..\Level 4\Level 4 Pickup Tracks") as AudioClip[];
}
// Assign each mp3 file to a Note
void AssignNotes(){
for (int i = 0; i < NotesArray.Length; i++){
foreach (GameObject note in NotesArray){
try{
note.audio.clip = pickupMP3s[i];
Debug.Log(pickupMP3s[i]);
Debug.Log(note.audio.clip.name);
}catch(Exception e){
Debug.Log(e.ToString());
}
}
}
}
我得到了大量的 NullReferenceException:对象引用未设置为对象错误的实例。它们似乎源于这一行:note.audio.clip = pickupMP3s[i];但我不知道是什么。
对象已附加音频源。
NotesArray 和 pickupMP3 的长度是一样的吗? 我会在你的 for 循环上做一个断点,看看什么时候发生异常。 发生这种情况时,请检查您是否超出了 pickupMP3s 数组的索引范围。
另一个错误可能是您的 note.audio 对象未实例化,因此当您尝试设置其 clip 属性时,它会引发错误。通过设置断点来执行调试器将让您知道哪个对象为 null。 我不确定上面的代码,但我想你有一个音符对象,它有一个音频对象作为其属性之一,它有一个 clip 属性。您没有显示任何显示 note.audio 是否正在实例化(甚至注释)的代码,因此很难说。 确保实例化所有这些。
在这里解决。
问题是拾音MP3分配的类型转换。它应该是:
pickupMP3s = Resources.LoadAll<AudioClip>("Level4/Level4_Pickup_Tracks");
此外,麻烦的线路应该是
NotesArray[i].audio.clip = pickupMP3s[i];
而不是
note.audio.clip - pickupMP3s[i];