为什么在 Unity 中将声音静音如此困难?

Why is it SO Hard to Just Mute a Sound in Unity?

我花了一整天的时间寻找这个问题的解决方案,但我就是找不到。在 Unity 3D 中使用 JavaScript,我有一个脚本,当玩家在 X 轴上的速度达到某个点时我想播放声音,如果不是那个点,那么声音将被静音。而且我相信我的所有结构都是正确的,只是代码行说要使音频静音是行不通的。我尝试了各种不同的组合,但每种组合都出现错误。

脚本如下所示:

#pragma strict

var playing = false;
var audioSource = GetComponent.<AudioSource>();

function Update () {
    if (transform.GetComponent.<Rigidbody>().velocity.x <= 2.5 && 
transform.GetComponent.<Rigidbody>().velocity.x >= -2.5)
    {
        Mute();
    } else {
        Unmute();
    }
}

function Mute () {
    audioSource.mute = true;
}

function Unmute () {
    audioSource.mute = false;
    Sound();
}

function Sound () {
    if (transform.GetComponent.<Rigidbody>().velocity.x >= 2.5 && playing == 
false)
    {
        playing = true;
        GetComponent.<AudioSource>().Play();
        yield WaitForSeconds(2);
        playing = false;
    }
        if (transform.GetComponent.<Rigidbody>().velocity.x <= -2.5 && 
playing == false)
    {
        playing = true;
        GetComponent.<AudioSource>().Play();
        yield WaitForSeconds(2);
        playing = false;
    }
}

我遇到过各种不同的错误,但我似乎遇到最多的错误是 "UnityException: GetComponentFastPath is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'motioncheck' on game object 'Ball'." 我不确定这是什么意思,因为我仍然有点想 JavaScript.

我觉得把声音静音不应该这么难。我会假设这个问题的答案真的很简单而且我真的很蠢。这似乎是经常发生的事情,哈哈。

与此同时,我将继续在互联网上横冲直撞,寻找这个问题的答案。

你的静音密码没问题。

"UnityException: GetComponentFastPath is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'motioncheck' on game object 'Ball'." I'm not sure what this means, since I'm still kinda a nub at JavaScript.

看到这个:

var audioSource = GetComponent.<AudioSource>();

那是 Unity API,您必须从函数内部调用它们的函数。 AwakeStart函数适用于初始化组件变量。

var audioSource : AudioSource;
function Start() 
{
    audioSource = GetComponent.<AudioSource>();
}

请注意 Unityscript/Javascript 现在是 。他们不再对此更新文档,并且您不能再从编辑器创建新脚本。它现在仍然有效,但编译器将很快被删除。请在 C# 的支持被完全移除之前学习并开始使用它。