Скрипт на проигрывание музыки

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

Скрипт на проигрывание музыки

Сообщение ВерховныйНоуНейм 16 мар 2017, 21:24

У меня есть объект с колайдером.
Мне нужно, чтобы при наведении на объект, способом OnMouseEnter, включался клип(переменной, или из хранилища, мне без разницы).
А при выведении мышки из объекта (OnMouseExit) клип останавливался.
Пробовал методом AudioSource.PlayClipAtPoint(блабла), но незнаю как его остановить и трек играет в 3d, а мне нужно 2d.
На приставку .Play и .Stop юнити ругается.
Гугл не помог.
Лучше на (c#) .
Зарание спасибо!
Вот пример с AudioSource.PlayClipAtPoint(блабла)
Синтаксис:
Используется csharp
 {
        public GameObject ButDeadF;
        public AudioClip DeadF;

        void OnMouseEnter ()
        {
                if (ButDeadF == true)
                        AudioSource.PlayClipAtPoint (DeadF, transform.position);
        }
}
Изображение
Аватара пользователя
ВерховныйНоуНейм
UNIт
 
Сообщения: 68
Зарегистрирован: 25 фев 2017, 19:56

Re: Скрипт на проигрывание музыки

Сообщение samana 16 мар 2017, 21:34

Для 2d звука посмотрите внимательно в инспектор AudioSource, там есть настойка. Конечно добавьте только сначала этот AudioSource на объект.
В старте получите ссылку на аудио с помощью GetComponent. А затем и Play и Stop будут работать.

https://docs.unity3d.com/ScriptReferenc ... .Play.html
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Скрипт на проигрывание музыки

Сообщение ВерховныйНоуНейм 16 мар 2017, 21:38

А если на сцене больше одного объекта с AS, то работать будет? Просто у меня этих объектов, по которым надо кликать 20+.
Изображение
Аватара пользователя
ВерховныйНоуНейм
UNIт
 
Сообщения: 68
Зарегистрирован: 25 фев 2017, 19:56

Re: Скрипт на проигрывание музыки

Сообщение samana 16 мар 2017, 21:41

Конечно, работать будет. Источников звука может быть сколько угодно.
Если ваши звуки короткие и они не будут перебивать друг друга, то можно просто отдельно создать в каком нибудь скрипте AudioSource, и создать статический метод, который запускает звук. И при клике по объектам вызвать этот статический метод.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Скрипт на проигрывание музыки

Сообщение ВерховныйНоуНейм 18 мар 2017, 12:50

звук запускается.
при нажатии на buttonmusic останавливается на пол секунды и опять играет.
Тоже самое и при нажатии на buttonexit.
Синтаксис:
Используется csharp
        public GameObject buttonexit;
        public GameObject buttonmusic;
        public AudioSource audio;

        void Start ()
        {
                AudioSource audio = GetComponent<AudioSource> ();
                audio.Play ();
    }
        void OnMouseUp(){
                if (buttonmusic == true){
                        audio.Stop ();
                }
                if (buttonexit == true) {
                        audio.Play ();
                }
        }
}

так тоже не робит
Синтаксис:
Используется csharp
        public GameObject buttonexit;
        public GameObject buttonmusic;
        public AudioSource audio;

        void Start ()
        {
                AudioSource audio = GetComponent<AudioSource> ();
                audio.Play ();
    }
        void OnMouseUp(){
                if (buttonmusic == true) {
                        audio.Stop ();
                }
                if (buttonmusic == false) {
                        audio.Stop ();
                }
                if (buttonexit == true) {
                        audio.Play ();
                }
                if (buttonexit == false) {
                        audio.Play ();
                }
        }
        void OnMouseDown(){
                if (buttonmusic == true) {
                        audio.Stop ();
                }
                if (buttonexit == true) {
                        audio.Play ();
                }
        }
}
       

:(
Изображение
Аватара пользователя
ВерховныйНоуНейм
UNIт
 
Сообщения: 68
Зарегистрирован: 25 фев 2017, 19:56

Re: Скрипт на проигрывание музыки

Сообщение samana 18 мар 2017, 12:57

Уже не первый раз замечаю у вас недопонимание в логике кода.
Почему вы вдруг подумали, что в методах мыши (OnMouseUp, OnMouseDown) нужно делать проверку каких-то объектов сравнивая их с true? Вы думаете что метод OnMouse... один на всё приложение и проверка (объект == true) будет означать, что по данному объекту было событие мыши? Кто вам такое сказал!? Это совершенно не работает так.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Скрипт на проигрывание музыки

Сообщение ВерховныйНоуНейм 20 мар 2017, 12:41

я все сократил до
Синтаксис:
Используется csharp
        public GameObject buttonexit;
        public GameObject buttonmusic;
        public AudioSource audio;


        void Start ()
        {
                AudioSource audio = GetComponent<AudioSource> ();
                audio.Play ();
    }
        void OnMouseUp(){
                audio.Pause ();
        }
}
                       

но как мне сделать чтобы при нажатии на buttonmusic музыка останавливалась,а при нажатии на buttonexit продолжалась? :ympray:
Изображение
Аватара пользователя
ВерховныйНоуНейм
UNIт
 
Сообщения: 68
Зарегистрирован: 25 фев 2017, 19:56

Re: Скрипт на проигрывание музыки

Сообщение samana 20 мар 2017, 12:50

Всё просто. У вас должен быть один объект с AudioSource и сколько угодно объектов, которые могут его контролировать. Для этого, любому объекту достаточно иметь ссылку на этот AudioSource.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Скрипт на проигрывание музыки

Сообщение ВерховныйНоуНейм 20 мар 2017, 13:19

в общем я зделал так:
* - buttonmusic
** - buttonexit
У меня есть объекты BM* и BE**.
на BM весит скрипт
Синтаксис:
Используется csharp
public class musicmenuplay : MonoBehaviour {
        public AudioSource audio;

        void Start ()
        {
                AudioSource audio = GetComponent<AudioSource> ();
                audio.Play ();
    }
        void OnMouseUp(){
                audio.Pause ();
        }
}

скрипт вызывает AudioSourсe(который весит также на BM)
и начитает играть музыку[audio.Play()]
и при нажатии на BM музыка останавливается.
А на BE весит 2-ой скрипт
Синтаксис:
Используется csharp
public class musicplaymenu2 : MonoBehaviour {
        public AudioSource audio;

        void Start ()
        {
                AudioSource audio = GetComponent<AudioSource> ();
        }
        void OnMouseUp(){
                audio.Play ();
        }
}

который продолжает проигрывание музыки при нажатии на BE.
НО!
у меня есть еще один вопрос: музыка резко останавливается...
Как сделать так, чтобы она плавно затихала(и на оборот)?
Изображение
Аватара пользователя
ВерховныйНоуНейм
UNIт
 
Сообщения: 68
Зарегистрирован: 25 фев 2017, 19:56

Re: Скрипт на проигрывание музыки

Сообщение samana 20 мар 2017, 15:32

Синтаксис:
Используется csharp
AudioSource audio = GetComponent<AudioSource> ();

Очень странно, что у вас это всё работает, так как вы не назначаете ничего вашему public свойству audio, а в старте каждого скрипта создаёте локальную переменную с именем audio, которая за пределами метода старт уже не существует, поэтому в методах OnMouseUp ваша audio не имеет ссылку ни на какой компонент и это должно вызвать ошибку (если вы конечно вручную в инспекторе не назначили этой public audio значение).

Жаль, что вы не воспользовались советом

samana писал(а): У вас должен быть один объект с AudioSource и сколько угодно объектов, которые могут его контролировать. Для этого, любому объекту достаточно иметь ссылку на этот AudioSource.


так было бы проще.

ВерховныйНоуНейм писал(а):Как сделать так, чтобы она плавно затихала(и на оборот)?


Писать код, который в Update или корутине, или Invoke будет постепенно уменьшать/увеличивать громкость.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Скрипт на проигрывание музыки

Сообщение ВерховныйНоуНейм 20 мар 2017, 22:27

Ладно, спасибо, выручил (popcorn) [curved_hands]
Изображение
Аватара пользователя
ВерховныйНоуНейм
UNIт
 
Сообщения: 68
Зарегистрирован: 25 фев 2017, 19:56


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

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

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