【问题标题】:How can I assign audio sound from audioclip array to Gameobject array如何将 audioclip 数组中的音频声音分配给 Gameobject 数组
【发布时间】:2020-10-16 15:31:48
【问题描述】:

我创建了一个名为 DropObjects、大小为 12 的 Gameobjects 数组和其他大小为 12 的 AudioClips 数组,用于在其中存储声音剪辑。 每个 GameObject(在 DropObjects 中)都附加了 AudioSource 组件。 我希望 audioclip 数组中的音频声音将存储在 DropObjects 数组的元素中。 我已经尽力做到这一点,但直到那时我才能做到。 如果有人会帮我做。

【问题讨论】:

  • 为什么不用字典?
  • @AdrianEfford 可能是因为默认情况下 Dictionary 未序列化并在 Unity Inspector 中公开,因此您无法为其分配引用

标签: c# unity3d


【解决方案1】:

听起来你所拥有的是

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 ;)

【讨论】:

  • 非常感谢 Adrian Efford。这些信息对我很有帮助。
猜你喜欢
  • 2018-01-28
  • 2014-06-22
  • 1970-01-01
  • 2015-08-22
  • 2018-09-25
  • 1970-01-01
  • 2018-12-15
  • 2023-03-10
  • 2011-10-19
相关资源
最近更新 更多