Как я могу воспроизвести аудиофайл, если игровой объект активен? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть игра-викторина, в которой по 5 вопросов в каждой категории. Я хочу добавить аудио, когда пользователь нажал правильный или неправильный ответ. Как сделать так, чтобы при нажатии неправильного или правильного ответа воспроизводился аудиофайл?

Вот мой код levelcontrolscript2, который запускается в сценах вопроса.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelControlScript2 : MonoBehaviour 
{
    // Get references to game objects that should be disabled and enabled
    // at the start
    GameObject[] toEnable, toDisable;

    // References to game objects that should be enabled
    // when correct or incorrect answer is given
    private int triesLeft = 2;    // Set this to 1 (leave after second) or 
    whatever when a level starts 
    public GameObject correctSign, incorrectSign, incorrectSign2;

    // Variable to contain current scene build index
    int currentSceneIndex; 

    // Use this for initialization
    void Start () {

        // Getting current scene build index
        currentSceneIndex = SceneManager.GetActiveScene ().buildIndex;

        // Finding game objects with tags "ToEnable" and "ToDisable"
        toEnable = GameObject.FindGameObjectsWithTag ("ToEnable");
        toDisable = GameObject.FindGameObjectsWithTag ("ToDisable");

        // Disabling game objects with tag "ToEnable"
        foreach (GameObject element in toEnable)
        {
            element.gameObject.SetActive (false);
        }

    }

    // Method is invoked when correct answer is given
    public void RightAnswer()
    {
        // Disabling game objects that are no longer needed
        foreach (GameObject element in toDisable)
        {
            element.gameObject.SetActive (false);
        }

        // Turn on "correct" sign
        correctSign.gameObject.SetActive (true);

        // Invoke GotoMainMenu method in 1 second
        Invoke ("LoadNextLevel", 1f);

    }


    // Method is invoked if incorrect answer is given
    public void WrongAnswer()
    {
        // Disabling game objects that are no longer needed
        foreach (GameObject element in toDisable)
        {
            element.gameObject.SetActive (false);
        }

        // Turn on "incorrect" sign
        incorrectSign.SetActive (true);

        // Disabling game objects that are no longer needed
        foreach (GameObject element in toDisable)
        {
            element.gameObject.SetActive (true);

        }

        triesLeft--;
        if(triesLeft <= 0)
        {
            // Disabling game objects that are no longer needed
            foreach (GameObject element in toDisable)
            {
                element.gameObject.SetActive (false);
            }
            // Turn on "incorrect" sign
            incorrectSign2.SetActive (true);
            // Invoke GotoMainMenu method in 1 second
            Invoke ("GotoCategories", 1f);
        }
    }


    // Method loads next level depending on current scenes build index
    void LoadNextLevel()
    {
        SceneManager.LoadScene (currentSceneIndex + 1);
    }

    // Method loads Category scene
    void GotoCategories()
    {
        SceneManager.LoadScene ("Easy");
    }
}   

1 Ответ

0 голосов
/ 10 мая 2018

Для этого вам потребуется использовать AudioSource & AudioClips .Просто поместите эти переменные в скрипт и присвойте значения во время выполнения.

public class LevelControlScript2 : MonoBehaviour
{
    // Get references to game objects that should be disabled and enabled
    // at the start
    GameObject[] toEnable, toDisable;

    // References to game objects that should be enabled
    // when correct or incorrect answer is given
    private int triesLeft = 2;    // Set this to 1 (leave after second) or whatever when a level starts
    public GameObject correctSign, incorrectSign, incorrectSign2;

    public AudioSource _audioSource;

    public AudioClip _incorrect;
    public AudioClip _correct;

    // Variable to contain current scene build index
    int currentSceneIndex;

    // Use this for initialization
    void Start()
    {

        // Getting current scene build index
        currentSceneIndex = SceneManager.GetActiveScene().buildIndex;

        // Finding game objects with tags "ToEnable" and "ToDisable"
        toEnable = GameObject.FindGameObjectsWithTag("ToEnable");
        toDisable = GameObject.FindGameObjectsWithTag("ToDisable");

        // Disabling game objects with tag "ToEnable"
        foreach (GameObject element in toEnable)
        {
            element.gameObject.SetActive(false);
        }

    }

    // Method is invoked when correct answer is given
    public void RightAnswer()
    {
        // Disabling game objects that are no longer needed
        foreach (GameObject element in toDisable)
        {
            element.gameObject.SetActive(false);
        }

        // Turn on "correct" sign
        correctSign.gameObject.SetActive(true);
        _audioSource.clip = _correct;
        _audioSource.Play();


        // Invoke GotoMainMenu method in 1 second
        Invoke("LoadNextLevel", 1f);

    }


    // Method is invoked if incorrect answer is given
    public void WrongAnswer()
    {
        // Disabling game objects that are no longer needed
        foreach (GameObject element in toDisable)
        {
            element.gameObject.SetActive(false);
        }

        // Turn on "incorrect" sign
        incorrectSign.SetActive(true);

        // Disabling game objects that are no longer needed
        foreach (GameObject element in toDisable)
        {
            element.gameObject.SetActive(true);

        }

        triesLeft--;
        if (triesLeft <= 0)
        {
            // Disabling game objects that are no longer needed
            foreach (GameObject element in toDisable)
            {
                element.gameObject.SetActive(false);
            }
            // Turn on "incorrect" sign
            incorrectSign2.SetActive(true);

            _audioSource.clip = _incorrect;
            _audioSource.Play();

            // Invoke GotoMainMenu method in 1 second
            Invoke("GotoCategories", 1f);
        }
    }


    // Method loads next level depending on current scenes build index
    void LoadNextLevel()
    {
        SceneManager.LoadScene(currentSceneIndex + 1);
    }

    // Method loads Category scene
    void GotoCategories()
    {
        SceneManager.LoadScene("Easy");
    }
}

Таким образом, в основном назначьте правильный и неправильный аудиоклип для _incorrect & _correct этим переменным.Затем вам нужно будет прикрепить источник звука к игровому объекту на сцене и назначить его сценарию.А потом просто скажи _audioSource.Play().Это должно позволить вам воспроизводить необходимые клипы.Более подробная информация содержится в руководстве по единству настроек AudioSource & AudioClip .Ответ выше работает при условии, что вы просто проигрываете аудиоклип.

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

source.Play(clip);
StartCoroutine(MyCoroutine(clipLength));

и вот фрагмент сопрограммы:

private IEnumerator MyCoroutine(float clipLength)
{
    yield return new WaitForSeconds(clipLength);
    //activate your gameobject here
}

Обратный вызов для AudioClip завершен используйте эту ссылкуза это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...