Помогите с рандомным звуком

Программирование на Юнити.

Помогите с рандомным звуком

Сообщение Nexalus 30 май 2019, 17:55

У меня есть 3 звуковых файла(1,2,3) и я хочу что-бы при прикосновении с препятствием они воспроизводились рандомно. Типа прикоснулся к препятствию и воспроизводится звуковой файл 3, потом опять прикоснулся воспроизводится 1. Ну и чтобы удалялись после проигрывания.
Nexalus
UNIт
 
Сообщения: 88
Зарегистрирован: 01 май 2019, 19:59
Откуда: Питер

Re: Помогите с рандомным звуком

Сообщение 1max1 30 май 2019, 18:40

В папке Resources/Sounds должны лежать звуки.

Синтаксис:
Используется csharp
using UnityEngine;

class NewBehaviourScript : MonoBehaviour
{
    static AudioClip[] clips;

    void Awake()
    {
        if (clips == null)
        {
            clips = Resources.LoadAll<AudioClip>("Sounds");
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        var go = new GameObject("Sound");
        var _as = go.AddComponent<AudioSource>();
        _as.clip = clips[Random.Range(0, clips.Length)];
        Destroy(go, _as.clip.length);
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Помогите с рандомным звуком

Сообщение Nexalus 30 май 2019, 19:18

1max1 писал(а):В папке Resources/Sounds должны лежать звуки.

Синтаксис:
Используется csharp
using UnityEngine;

class NewBehaviourScript : MonoBehaviour
{
    static AudioClip[] clips;

    void Awake()
    {
        if (clips == null)
        {
            clips = Resources.LoadAll<AudioClip>("Sounds");
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        var go = new GameObject("Sound");
        var _as = go.AddComponent<AudioSource>();
        _as.clip = clips[Random.Range(0, clips.Length)];
        Destroy(go, _as.clip.length);
    }
}


А можно сделать так что бы я мог префабы с музыкой вставлять как несколько элементов, и этот скрипт выбирал рандомно из всех вставленных префабов с музыкой рандомный префаб и воспроизводил?
Nexalus
UNIт
 
Сообщения: 88
Зарегистрирован: 01 май 2019, 19:59
Откуда: Питер

Re: Помогите с рандомным звуком

Сообщение 1max1 30 май 2019, 19:24

Можно, но тогда делай синглтон со своими префабами.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Помогите с рандомным звуком

Сообщение Nexalus 30 май 2019, 22:42

1max1 писал(а):Можно, но тогда делай синглтон со своими префабами.

А можешь показать скрипт, а то хз как его сделать
Nexalus
UNIт
 
Сообщения: 88
Зарегистрирован: 01 май 2019, 19:59
Откуда: Питер

Re: Помогите с рандомным звуком

Сообщение 1max1 30 май 2019, 22:48

Создаешь пустышку на сцене, на нее кидаешь скрипт:
Псевдокод:

Синтаксис:
Используется csharp
class singleton : monobeh
public static AudioClip[] clips;
[SerializeField] AudioClip[] _clips;
//awake
dontdestroyonload(gameObject);
clips = _clips;


Метод предыдущего скрипта будет такой:

Синтаксис:
Используется csharp
void OnCollisionEnter(Collision collision)
    {
        var go = new GameObject("Sound");
        var _as = go.AddComponent<AudioSource>();
        _as.clip = singleton.clips[Random.Range(0, singleton.clips.Length)]; // изменения тут
        Destroy(go, _as.clip.length);
    }
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Помогите с рандомным звуком

Сообщение Nexalus 30 май 2019, 22:59

1max1 писал(а):Создаешь пустышку на сцене, на нее кидаешь скрипт:
Псевдокод:

Синтаксис:
Используется csharp
class singleton : monobeh
public static AudioClip[] clips;
[SerializeField] AudioClip[] _clips;
//awake
dontdestroyonload(gameObject);
clips = _clips;


Метод предыдущего скрипта будет такой:

Синтаксис:
Используется csharp
void OnCollisionEnter(Collision collision)
    {
        var go = new GameObject("Sound");

        var _as = go.AddComponent<AudioSource>();
        _as.clip = singleton.clips[Random.Range(0, singleton.clips.Length)]; // изменения тут
        Destroy(go, _as.clip.length);
    }

Спасибо завтра попробую
Nexalus
UNIт
 
Сообщения: 88
Зарегистрирован: 01 май 2019, 19:59
Откуда: Питер

Re: Помогите с рандомным звуком

Сообщение Nexalus 31 май 2019, 13:08

1max1 писал(а):Создаешь пустышку на сцене, на нее кидаешь скрипт:
Псевдокод:

Синтаксис:
Используется csharp
class singleton : monobeh
public static AudioClip[] clips;
[SerializeField] AudioClip[] _clips;
//awake
dontdestroyonload(gameObject);
clips = _clips;


Метод предыдущего скрипта будет такой:

Синтаксис:
Используется csharp
void OnCollisionEnter(Collision collision)
    {
        var go = new GameObject("Sound");
        var _as = go.AddComponent<AudioSource>();
        _as.clip = singleton.clips[Random.Range(0, singleton.clips.Length)]; // изменения тут
        Destroy(go, _as.clip.length);
    }

Вот такой скрипт?
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

class singleton : MonoBehaviour {
    public static AudioClip[] clips;
    [SerializeField] AudioClip[] _clips;
    dontdestroyonload(gameObject) //Эта
    {
        clips = _clips;
    }
    void OnCollisionEnter(Collision collision)
    {
        var go = new GameObject("Sound");
        var _as = go.AddComponent<AudioSource>();
        _as.clip = singleton.clips[Random.Range(0, singleton.clips.Length)];
        Destroy(go, _as.clip.length);
    }
}

Просто вот эта часть не работает dontdestroyonload(gameObject)
Nexalus
UNIт
 
Сообщения: 88
Зарегистрирован: 01 май 2019, 19:59
Откуда: Питер

Re: Помогите с рандомным звуком

Сообщение Nexalus 31 май 2019, 14:45

Все уже решил!
Nexalus
UNIт
 
Сообщения: 88
Зарегистрирован: 01 май 2019, 19:59
Откуда: Питер


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13