c# - 创建声音管理器阵列以供多次使用
问题描述
我正在尝试创建音频管理器,这样我就可以轻松地将音频音效添加到我想要的任何脚本中。我有 3 个脚本,一个坐在空游戏对象 (SoundManager) 上,另一个是 unmono 脚本,它只有我想要更改的音频数据,第三个是我正在尝试应用的脚本AudioSource 到它(现在它只是我的角色攻击)我一直在尝试使用我在网上找到的一些教程。他们中的大多数使用“查找”组件,我知道这不是使用它们的最佳方式。我试图不让音频源组件显示在声音管理器游戏对象上,我试图在我想要使用 SoundManager Array ref 的特定字符上创建它。
SoundData 脚本
using UnityEngine.Audio;
using UnityEngine;
[System.Serializable]
public class Sound{
public string name;
public AudioClip clip;
[HideInInspector]
public AudioSource source;
public bool loop;
public bool playOnstart;
[Range(0f,1f)]
public int spatialBlend;
public int minDistance;
public int maxDistance;
public AudioRolloffMode audioMode;
}
SoundManager 脚本
using UnityEngine.Audio;
using UnityEngine;
using System;
public class SoundManager : MonoBehaviour
{
public Sound[] sounds;
// public AudioSource audioSource;
private void Awake()
{
foreach (Sound s in sounds)
{
// audioSource = gameObject.AddComponent<AudioSource>();
//s.source = gameObject.AddComponent<AudioSource>();
s.source.clip = s.clip;
s.source.playOnAwake = s.playOnstart;
s.source.loop = s.loop;
s.source.spatialBlend = s.spatialBlend;
s.source.minDistance = s.minDistance;
s.source.maxDistance = s.maxDistance;
s.source.rolloffMode = s.audioMode;
}
}
public void Play()
{
//right now i dont have anything that workd
}
}
在我试图引用 Soundmanager 并尝试 Getcommponent 音频脚本的第三个脚本中,但它在大多数情况下都给了我 NullArgumant
解决方案
您不需要在第二个脚本的开头引用 AudioSource 组件,我相信这里发生的是 Unity 找不到将 AudioSource 组件附加到的游戏对象。因此,要解决此问题,您可以使用:
在您的 SoundData 脚本中;
using UnityEngine.Audio;
using UnityEngine;
[System.Serializable]
public class Sound{
public string name;
public AudioClip clip;
[HideInInspector]
// Took out the AudioSource = source; instead...
// ...used a GameObject so we can add the component.
public GameObject sourceGameObject;
public bool loop;
public bool playOnstart;
[Range(0f,1f)]
public int spatialBlend;
public int minDistance;
public int maxDistance;
public AudioRolloffMode audioMode;
在您的 SoundManager 脚本中。
public Sound[] sounds;
void Awake(){
foreach (Sound s in sounds){
s.sourceGameObject = someGameObject;
AudioSource audioSource = s.sourceGameObject.AddComponent<AudioSource>();
// rest of your code.
}
}
您可以改用 audioSource 变量来编写其余代码。
希望这可以解决您的问题。
推荐阅读
- python - pyodbc 可以从表中读取列名,但是对表的查询会引发不存在错误
- ruby-on-rails - 如何在 best_in_place gem rails 6 中使用引导类?
- ios - 如何在 SwiftUI 中使用 Top(行标题/第一行)和 Side(第一列)创建固定视图
- c# - 如何在 Nlog 中将请求正文作为字符串 rlog
- django - 上索引似乎不适用于 iexact Django 字段查找
- python - 为什么数据类无法正常工作?
- scala - 使用 AspectJ 和 Scala 时出错
- amazon-web-services - 使用胶水存储在 s3 中的 aws sstables 到 athena
- selenium - WebDriverException:尝试关闭多个窗口时无法访问 chrome
- cmake - 如何在 Windows 上构建 Ammo.js?