0 / 0 / 0
Регистрация: 16.01.2018
Сообщений: 38
|
||||||
1 | ||||||
DontDestrouOnLoad09.02.2018, 17:26. Показов 1800. Ответов 22
Метки нет (Все метки)
Привет
Есть объект 1 на котором висит AudioSourse. Она Play On Awake=true; Есть объект 2 на котором висит скрипт Sounds с публичным экземпляром этой AudioSourse(ну типа public AudioSourse griby_mejdy_namy_taet_led. Сюда я перетащил объект 1. Работает. Музыка играет при старте сцены. Когда я жму "replay" музыка начинает играть заново, т.е объект 2 пересоздается Код кнопки "replay": "SceneManager.LoadScene(1);" Я хочу, чтобы музыка играла независимо от того нажимаю ли я кнопку Для этого я создал скрипт DontDestroyOnLoad и повесил его на объект 2 Код DontDestroyOnLoad:
Подскажите пожалуйста что я делаю не так?
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
||||||
09.02.2018, 21:23 | 2 | |||||
1.Создать пустой геймобьект, назвать SoundPlayer.
2.Добавить на геймобьект AudioSource. 3.Повесить на AudioSource нужный клип. 4.Добавить на геймобьект скрипт SoundPlayer (скопировать с поста) 5.Перетащить геймобьект в папку Assets/Resources 6.Удалить геймобьект SoundPlayer из сцены. 7. В любом скрипте в методе Start вызвать метод SoundPlayer.CreateSoundPlayer();
0
|
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 237
|
|
11.02.2018, 19:11 | 3 |
ASDFD12, На СинглТоун не похоже чо-то. А если я где-то ещё вызову этот метод?? Или я чо-то не заметил
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
11.02.2018, 23:04 | 4 |
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
12.02.2018, 07:06 | 5 |
ASDFD12, а чего без самоудаления при дублировании?
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
12.02.2018, 11:00 | 6 |
0
|
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 237
|
|
12.02.2018, 17:31 | 7 |
ASDFD12, ну типа если их два на сцене будет-то сё - фиаска
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
12.02.2018, 20:07 | 8 |
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
12.02.2018, 21:46 | 9 |
ASDFD12, но экземпляров останется два
Добавлено через 35 секунд и при каждом запуске сцены они будут добавляться. Действительно, какие мелочи )))
0
|
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 237
|
|
12.02.2018, 22:49 | 10 |
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
12.02.2018, 23:29 | 11 |
0
|
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 237
|
|
12.02.2018, 23:32 | 12 |
ASDFD12, На старте стоит ДонДестройОнЛоад , то есть если в другой сцене я его вставлю - там их будет два. В Эвёйке ж нет проверки на индивидуальность. Или почему я не прав?
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
||||||
13.02.2018, 00:00 | 13 | |||||
ASDFD12, чего это нет? Там в старте сразу DontDestroyOnLoad(this) и нет такого, чтобы
0
|
0 / 0 / 0
Регистрация: 16.01.2018
Сообщений: 38
|
|
13.02.2018, 01:00 [ТС] | 14 |
Интересно. Вот что мне "пишут", указывая при этом на "var player = GameObject.Instantiate(Resources.Load<GameObject>("SoundPlayer"));"
ArgumentException: объект, который вы хотите создать, равен null. UnityEngine.Object.CheckNullArgument (System.Object arg, System.String message) (at C:/buildslave/unity/build/Runtime/Export/UnityEngineObject.cs:239) UnityEngine.Object.Instantiate[GameObject] (UnityEngine.GameObject original) (at C:/buildslave/unity/build/Runtime/Export/UnityEngineObject.cs:200) SoundPlayer.CreateSoundPlayer () (at Assets/Scripts/SoundPlayer.cs:22) Destroy.Start () (at Assets/Scripts/Destroy.cs:12) То есть, из префаба не создается первичный объект? Точнее, он действительно не создается - в инспекторе его нет
0
|
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 237
|
|
13.02.2018, 01:03 | 15 |
GRAKGD, Resources.Load<GameObject>("SoundPlayer") тут во-первых может быть такая проблема, что обёект не успеет загрузиться и пока он не загрузился он null. Сначала загрузи, потом инстантиеэть его
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
13.02.2018, 09:54 | 16 |
видимо вы пропустили пункт 6.
Добавлено через 7 минут тут или вы вообще не создали префаб (пункт 5) или имя префаба != SoundPlayer
0
|
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
|
||||||
13.02.2018, 18:00 | 17 | |||||
Ну мало ли, забудет человек удалить. В другой сцене добавит...
Проще ведь добавить 1 - 2 строки)
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
13.02.2018, 18:37 | 18 |
Serj190492, вот от DestroyImmediate лучше воздержаться, а то можно в один прекрасный момент физически удалить файл объекта с диска ))
0
|
0 / 0 / 0
Регистрация: 16.01.2018
Сообщений: 38
|
|
14.02.2018, 04:19 [ТС] | 19 |
В итоге использовал эту конструкцию. Все работает
void Awake() { GameObject[] objs = GameObject.FindGameObjectsWithTag("GameplaySong"); if (objs.Length > 1) Destroy(this.gameObject); DontDestroyOnLoad(this.gameObject); } Появилась новая проблема которая до этого момента даже в голову не приходила Суть. Есть сцена стартового меню, в ней играет музыка стартового меню. Есть сцена игры, в ней играет собственно AudioSourse из "("GameplaySong");". Так вот если я нажимаю кнопку "replay" (ее код: "SceneManager.LoadScene(2);", то есть игровая сцена), то музыка продолжает играть, все как надо. Но если я нажму кнопку "back" (ее код: "SceneManager.LoadScene(1);", то есть стартовая сцена), то музыка тоже! продолжает играть, но там уже играет музыка стартового меню и они накладываются
0
|
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
|
|
14.02.2018, 06:11 | 20 |
Cr0c, Понял, исправлюсь)
0
|
14.02.2018, 06:11 | |