forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Динамическое создание AudioClip (http://forum.boolean.name/showthread.php?t=16995)

ShadowCoder 02.07.2012 11:05

Динамическое создание AudioClip
 
Уважаемые знатоки, помогите начинающему разобраться, как на Unity реализовать такую задачу:

1) В проекте имеется несколько звуков, их количество может быть очень большим.

2) В целях оптимизации хочу использовать одну функцию, доступную для всех скриптов движка. Условно назовем ее PlaySound, в качестве параметров передаются два значения, а рабочий код выглядит следующим образом:
PHP код:

(JavaScript)
/*
    fname - название звука, который должен быть проигран,
    pos - координаты, в которых он воспроизводится (пока не используется)
*/

var soundAudioClip// этой переменной назначаем звук через Inspector

function PlaySound(fnameStringposVector3) {
    var 
goGameObject = new GameObject("tmp_" fname);
    var 
audioAudioSource go.AddComponent(AudioSource);
    
audio.clip sound;
    
audio.PlayClipAtPoint(audio.clipgo.transform.position);
    
    yield 
WaitForSeconds(sound.length);
    
Destroy(go);


Работа скрипта: создается временный объект "go", ему быстренько назначается AudioSource + AudioClip, после проигрывания звука объект удаляется (это эксперимент, поэтому всё так "сложно" :-D ).

3) А теперь собсно проблема.

Все звуки доступны в Assets, их нужно лишь найти по заданному имени - "fname", назначить в качестве "audio.clip" и воспроизвести в нужной точке. Как-то так:
PHP код:

PlaySound("Welcome"transform.position); 

Как же это сделать? :SOS:
Важно, чтобы переменная "sound" получала указатель на клип именно через работу скрипта, а не путем переноса файла в Inspector'е!

Пробовал "AudioClip.Create":
PHP код:

var soundAudioClip AudioClip.Create(fname44100244100truefalse); 

Здесь sound создается, но пустой. Вероятно, после этого нужно загрузить данные, но как?

В варианте с Resources.Load(fname) функция вообще возвращает NULL. Почему?

С Find тоже не ладится:
PHP код:

var sound GameObject.Find("Welcome"); 

Видимо несоответствие типов...

Вот сколько вопросов! Так как начал осваивать Юнити недавно, сейчас для меня очень важно разобраться в этих особенностях, почему скрипт не работает. Хожу вокруг да около, но не понимаю, где ошибка. Синтаксически вроде бы верно, компилятор не ругается, что еще больше усложняет отладку. Хэлп!

pax 02.07.2012 11:15

Ответ: Динамическое создание AudioClip
 
Цитата:

Сообщение от ShadowCoder (Сообщение 232123)
В варианте с Resources.Load(fname) функция вообще возвращает NULL. Почему?

Чтобы загружать ресурсы, надо предварительно положить их в папку с названием Resources. Иначе они не попадут в билд.

Find ищет GameObject, а тебе нуден клип, какая связь вообще его использовать?

ShadowCoder 02.07.2012 11:38

Ответ: Динамическое создание AudioClip
 
Цитата:

Сообщение от pax (Сообщение 232124)
Чтобы загружать ресурсы, надо предварительно положить их в папку с названием Resources. Иначе они не попадут в билд.

Вот! Этого я и не знал! Когда создал папку и переместил звуковой файл в нее (Resources/Audio/Welcome.mp3), то функция заработала именно так как мне и нужно. А я то пляски с бубном устраивал, думал, чего ей надо! :-D

Спасибо!

Цитата:

Сообщение от pax (Сообщение 232124)
Find ищет GameObject, а тебе нуден клип, какая связь вообще его использовать?

- да это уже от отчаяния :''(( Пробовал различные варианты, все что под руку попадались. :-D

pax 02.07.2012 15:05

Ответ: Динамическое создание AudioClip
 
Ну вообще в справке в секции Description это написано:

Цитата:

Description
Loads an asset stored at path in a Resources folder.

Returns the asset at path if it can be found otherwise returns null. The path is relative to any Resources folder inside the Assets folder of your project, extensions must be omitted.

ShadowCoder 03.07.2012 01:58

Ответ: Динамическое создание AudioClip
 
Написано, да. Но я со своим английским неправильно интерпретировал: посчитал, что "Resources" относится к папке "Assets" и потому запутался. :)

GiORg1 23.09.2012 22:56

Ответ: Динамическое создание AudioClip
 
daa oshibki tam gde nikogda ne dumaesh

pax 23.09.2012 23:25

Ответ: Динамическое создание AudioClip
 
Цитата:

Сообщение от GiORg1 (Сообщение 238998)
daa oshibki tam gde nikogda ne dumaesh

2GiORg1 пишите пожалуйста по русски, а не транслитом.


Часовой пояс GMT +4, время: 00:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot