Кнопка Unity3D UI требует многократного щелчка для воспроизведения или паузы аудио - PullRequest
0 голосов
/ 01 сентября 2018

Почему моей кнопке воспроизведения или паузы требуется несколько нажатий для воспроизведения или паузы звука? Если цель обнаружена, на ней будет отображаться кнопка пользовательского интерфейса, а при щелчке она будет воспроизводить звук, а при повторном нажатии - пауза, но для запуска кода мне нужно несколько раз щелкнуть мышью. какие-либо решения? это мой код.

void playSound(string ss)
{
    clipTarget = (AudioClip)Resources.Load(ss);
    soundTarget.clip = clipTarget;
    soundTarget.loop = false;
    soundTarget.playOnAwake = false;
    soundTarget.ignoreListenerPause = true;
}
if (name == "quezon")
{       
    if (Translate.GetComponent<Text>().text == "ENGLISH")
    {
        Narrator.gameObject.SetActive(true);
        myGirl.gameObject.SetActive(false);
        myBoy.enabled = false;
        ButtonAction.GetComponent<Button().onClick.AddListener(delegate {
            if (soundTarget.isPlaying)
            {
                soundTarget.Pause();
                btn.image.overrideSprite = Play;
                myBoy.enabled = false;
            }
            else if(!soundTarget.isPlaying)
            {
                soundTarget.Play();
                playSound("sounds/English");
                btn.image.overrideSprite = Pause;
                myBoy.enabled = true;
            }
        });
        TextDescription.GetComponent<Text>().text = "Manuel L. Quezon was born on August 19, 1878, and died on August 1, 1944. "
            + "He was a Filipino statesman, soldier, and politician who served as president of the Commonwealth of the " 
            + "Philippines from 1935 to 1944.";
        TextTargetName.GetComponent<Text>().text = name;
    }
}

1 Ответ

0 голосов
/ 04 сентября 2018

Вы должны определить поведение кнопки onClick только один раз. Как это:

void Awake ()
{
    ButtonAction.GetComponent<Button>().onClick.AddListener (() => ToggleSound ());
}

private void ToggleSound ()
{
    if (soundTarget.isPlaying)
    {
        soundTarget.Pause();
        btn.image.overrideSprite = Play;
        myBoy.enabled = false;
    }
    else
    {
        soundTarget.Play();
        playSound("sounds/English");
        btn.image.overrideSprite = Pause;
        myBoy.enabled = true;
    }
}

Я думаю, что происходит потому, что вы добавляете слушателей каждый раз, когда происходит рутина, она запускается сначала один раз, затем дважды, затем трижды и так далее.

Это тот синтаксис, который я обычно использую для добавления поведения к кнопкам пользовательского интерфейса, он прост, вы можете добавлять параметры и выглядеть чисто. Я рекомендую это.

Также, если у вас нет параметров, вы можете сделать это, и это проще.

ButtonAction.GetComponent<Button().onClick.AddListener (ToggleSound);
...