【问题标题】:Cannot generate sound when moving method to another class将方法移动到另一个类时无法产生声音
【发布时间】:2016-07-12 22:54:34
【问题描述】:

所以对于初学者,我想说下面的代码有效。但它的结构不是我想要的:

public AudioClip pickup;

void OnTriggerEnter(Collider collider)
{
    //Trigger for pickups
    if (collider.gameObject.CompareTag("Pickup"))
    {
        AudioSource audio = GetComponent<AudioSource>();
        audio.PlayOneShot(pickup);
    }
}

但我想将这个类一分为二,并使用播放器控制器(上面写的一部分)从一个名为“LevelClass”的新类中调用一个函数,该类将容纳拾取方法,如下所示:

public void collidePickup(Collider collider)
{
    collider.gameObject.SetActive(false);
    AudioSource audio = GetComponent<AudioSource>();
    audio.PlayOneShot(pickup);
}

让播放器控制器像这样调用函数:

 level.collidePickup(collider);

我还将声音文件与脚本链接起来,这样它就可以播放声音了。通过测试,我确定问题是在 AudioSource 部分引起的,因为它没有找到可以使用的音频源。有什么我可以做的,这样我就可以在 levelclass 中而不是在 playercontroller 中使用 audiosource 的实例吗?

【问题讨论】:

    标签: c# audio unity3d


    【解决方案1】:

    您应该能够像这样将对音频源的引用传递给函数。

    public void collidePickup(Collider collider,ref AudioSource audio)
    {
        collider.gameObject.SetActive(false)
        audio.PlayOneShot(pickup);
    }
    

    那么你只需要在调用的时候把AudioSource传给he函数即可。

    【讨论】:

    • 尝试初始化音频源时遇到问题。尝试在类开始时执行“AudioSource 音频”,然后在开始时将其初始化为 audio = GetComponent();它不会给出错误但声音不会播放
    【解决方案2】:

    您应该知道,每个 AudioSource 都会根据其位置发出声音,并使用多普勒效应参数及其刚体相对速度。
    另请注意,每个 AudioSource 一次只能播放一个剪辑。

    其中一个解决方案是为您想要在游戏中播放的每个声音创建一个带有 AudioSource 的新 GameObject(来自音频管理器对象上的预制件或代码),并立即在超时时间相等的情况下将其销毁到音频长度。

    public void collidePickup(Collider collider) 
    {
        collider.gameObject.SetActive(false);
        PlaySoundAt(pickup, collider.transform.position);
    }
    
    private static void PlaySoundAt(AudioClip sound, Vector3 position) 
    {
        var go = new GameObject("PickupSound");
        go.transform.position = position;
        var source = go.AddComponent<AudioSource>();
        source.PlayOneShot(sound);
        Destroy(source, sound.length);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 2016-08-25
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多