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

时间:2018-08-01 17:06:00

标签: javascript unity3d audio scripting unityscript

我整天都在寻找解决此问题的方法,但我根本找不到。使用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:不允许从MonoBehaviour构造函数(或实例字段初始化程序)中调用GetComponentFastPath,请在Awake或相反,从游戏对象“球”上的MonoBehaviour的“ motioncheck”调用。”我不确定这意味着什么,因为我对JavaScript还是有点不了解。

我觉得只是静音就不难了。我将假定答案很简单,而且我只是傻瓜。这就是通常发生的情况,大声笑。

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

1 个答案:

答案 0 :(得分:1)

您的静音代码很好。

  

“ UnityException:不允许从中调用GetComponentFastPath   一个MonoBehaviour构造函数(或实例字段初始化程序),将其调用   在“唤醒”或“开始”中。从MonoBehaviour的“ motioncheck”调用   游戏对象“球”。”我不确定这是什么意思,因为我仍然   有点像JavaScript。

看到这个:

var audioSource = GetComponent.<AudioSource>();

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

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

请注意,Unityscript / Javascript现在为discontinued。他们不再为此更新文档,并且您无法再通过编辑器创建新脚本。现在仍然可以使用,但是很快将删除编译器。在完全取消对C#的支持之前,请学习并开始使用C#。