Страница 1 из 1

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

СообщениеДобавлено: 30 май 2019, 17:55
Nexalus
У меня есть 3 звуковых файла(1,2,3) и я хочу что-бы при прикосновении с препятствием они воспроизводились рандомно. Типа прикоснулся к препятствию и воспроизводится звуковой файл 3, потом опять прикоснулся воспроизводится 1. Ну и чтобы удалялись после проигрывания.

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

СообщениеДобавлено: 30 май 2019, 18:40
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);
    }
}

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

СообщениеДобавлено: 30 май 2019, 19:18
Nexalus
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);
    }
}


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

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

СообщениеДобавлено: 30 май 2019, 19:24
1max1
Можно, но тогда делай синглтон со своими префабами.

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

СообщениеДобавлено: 30 май 2019, 22:42
Nexalus
1max1 писал(а):Можно, но тогда делай синглтон со своими префабами.

А можешь показать скрипт, а то хз как его сделать

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

СообщениеДобавлено: 30 май 2019, 22:48
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);
    }

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

СообщениеДобавлено: 30 май 2019, 22:59
Nexalus
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);
    }

Спасибо завтра попробую

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

СообщениеДобавлено: 31 май 2019, 13:08
Nexalus
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)

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

СообщениеДобавлено: 31 май 2019, 14:45
Nexalus
Все уже решил!