听起来你所拥有的是
public GameObject[] DropObjects; // 12 elements
public AudioClip[] AudioClips; // 12 elements
那么为什么不干脆呢
for(var i = 0; i < 12; i++)
{
DropObjects[i].GetComponent<AudioSource>().clip = AudioClips[i];
}
如果你直接使用正确的类型,你可以跳过GetComponent:
public AudioSource[] DropObjects; // 12 elements
和
for(var i = 0; i < 12; i++)
{
DropObjects[i].clip = AudioClips[i];
}
在我看来,作为更好的选择,有一些花哨的资产,例如SerializableDictionary 允许您使用正确的字典来引用 GameObject 和根据 AudioClip 耦合在一起的对,因此您可以执行类似的操作,例如
[Serializable]
public class GameObjectToAudioClipDictionary : SerializableDictionary<GameObject, AudioClip> {}
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(GameObjectToAudioClipDictionary))]
public class GameObjectToAudioClipDictionaryDrawer : SerializableDictionaryPropertyDrawer {}
#endif
然后在你的脚本中
public GameObjectToAudioClipDictionary dropObjectToAudioClip;
private void Awake ()
{
foreach(var kvp in dropObjectToAudioClip)
{
kvp.Key.GetComponent<AudioSource>().clip = kvp.Value;
}
}
或再次直接使用AudioSource 而不是GameObject ;)