【问题标题】:Create sound manager array for multiple use创建声音管理器阵列以供多次使用
【发布时间】:2021-07-21 23:06:45
【问题描述】:

我正在尝试创建音频管理器,以便可以轻松地将音频音效添加到我想要的任何脚本中。我有 3 个脚本,一个坐在空游戏对象 (SoundManager) 上,另一个是 unmono 脚本,它只有我想要更改的音频数据,第三个是我正在尝试应用的脚本AudioSource 给它(现在它只是我的角色攻击) 我一直在尝试使用我在网上找到的一些教程。他们中的大多数使用“查找”组件,我知道这不是使用它们的最佳方式。我试图不让音频源组件显示在声音管理器游戏对象上,我试图使用 SoundManager 数组参考在我想要的特定字符上创建它。

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

【问题讨论】:

    标签: c# unity3d audio


    【解决方案1】:

    您不需要在第二个脚本的开头引用 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 变量来编写其余代码。

    希望这能解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2015-04-30
      • 2022-10-20
      • 2011-12-08
      • 2013-10-28
      • 2020-11-03
      相关资源
      最近更新 更多