Результаты поиска
| |
BorsheC | Дата: Вторник, 03 Июля 2018, 18:28 | Сообщение # 1 | Тема: Странное поведение коллайдеров |
был не раз
Сейчас нет на сайте
| Цитата drcrack ( ) Я бы удивился если бы с таким кодом оно еще и работало как задумано
А с каким лучше?)Добавлено (03 Июля 2018, 18:28) ---------------------------------------------
Цитата FrozenSkeleton ( ) Как не странно, на дефолтной сцене все работает согласно условию, возможно что то не так в сцене: названия, колайдеры не там где надо и тд, но способ конечно извращенский.
Подскажите как не по извращенски? может с вашим кодом у меня нормально будет работать. Я тоже делал в дефолтной сцене и все равно улетают на 5ю(
|
|
| |
BorsheC | Дата: Четверг, 28 Июня 2018, 18:26 | Сообщение # 2 | Тема: Странное поведение коллайдеров |
был не раз
Сейчас нет на сайте
| Доброго времени суток! Проблема с коллайдерами, постараюсь объяснить максимально подробно и ясно.
Имеется 5 панелей с EdgeCollider2D (выполнен в виде линии, не спрашивайте зачем просто так надо ) (Panel_1, Panel_2, Panel_3, Panel_4, Panel_5) и 3 кубика с BoxCollider2D (Cub_1, Cub_2, Cub_3). На панелях включен триггер а на кубиках повешен ригибоди и триггер отключен. По задумке при перетаскивании Cub_1 на Panel_1 или Panel_2 или Panel_3 или Panel_4 или Panel_5 (при пересечении их коллайдеров) кубик должен получить позицию панели и встать на нее (аналогично с кубиком 2 ,3, 4, 5).
Но по факту получается что на панель 1 и 2 встают нормально, а при пересечении кубиков с панелями 3, 4, 5 они улетают сразу на 5ю панель.
Прикрепляю код:
Код GameObject Panel_1; GameObject Panel_2; GameObject Panel_3; GameObject Panel_4; GameObject Panel_5; int pos_col = 0; // с каким коллайдером пересечение колайдера // Use this for initialization void Start () {
Panel_1 = GameObject.Find ("Panel_1"); Panel_2 = GameObject.Find ("Panel_2"); Panel_3 = GameObject.Find ("Panel_3"); Panel_4 = GameObject.Find ("Panel_4"); Panel_5 = GameObject.Find ("Panel_5");
}
void OnTriggerEnter2D(Collider2D col) { if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_1.GetComponent<Collider2D> ().bounds) ) { transform.rotation = Quaternion.Euler (0, 0, -45f); pos_col = 1; } if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_2.GetComponent<Collider2D> ().bounds) ) { transform.rotation = Quaternion.Euler (0, 0, 45f); pos_col = 2; } if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_3.GetComponent<Collider2D> ().bounds) ) { transform.rotation = Quaternion.Euler (0, 0, -45f); pos_col = 3; } if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_4.GetComponent<Collider2D> ().bounds) ) { transform.rotation = Quaternion.Euler (0, 0, 0); pos_col = 4; } if (col.gameObject.GetComponent<Collider2D> ().bounds.Intersects (Panel_5.GetComponent<Collider2D> ().bounds) ) { transform.rotation = Quaternion.Euler (0, 0, 45f); pos_col = 5; } }
void Update(){ if ((Input.GetMouseButtonUp (0)) && pos_col == 1) { gameObject.transform.position = Panel_1.transform.position; } if ((Input.GetMouseButtonUp (0)) && pos_col == 2) { gameObject.transform.position = Panel_2.transform.position; } if ((Input.GetMouseButtonUp (0)) && pos_col == 3) { gameObject.transform.position = Panel_3.transform.position; } if ((Input.GetMouseButtonUp (0)) && pos_col == 4) { gameObject.transform.position = Panel_4.transform.position; } if ((Input.GetMouseButtonUp (0)) && pos_col == 5) { gameObject.transform.position = Panel_5.transform.position; } Debug.Log (pos_col); }
void OnMouseDrag() { gameObject.transform.SetAsLastSibling ();// не помню что за хня, но она нужна. Vector2 p = Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y)); gameObject.transform.position = p; }
Еще делал на OnMouseUp (без OnTriggerEnter2D) и поведение кубиков точно такое же.
Сообщение отредактировал BorsheC - Четверг, 28 Июня 2018, 18:29 |
|
| |
BorsheC | Дата: Вторник, 08 Мая 2018, 16:26 | Сообщение # 3 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| А нет.... пардон.... при старте главной сцены в консоле ошибка argumentexception the object you want to instantiate is null Добавлено (08 Мая 2018, 16:02) ---------------------------------------------
Код main_theme = Instantiate(main_theme);
видать как-то не правильно создаю объект. То есть есть переменная main_theme и префаб с таким же именем сохранил.Добавлено (08 Мая 2018, 16:17) --------------------------------------------- Победил. создал папку Resourcec и запихал туда префаб и загрузил его
Код main_theme = Instantiate(Resources.Load("main_theme")) as GameObject;
Спасибо огромное!!!!!!! Очень помогли!!!!!Добавлено (08 Мая 2018, 16:26) --------------------------------------------- Ах и да клик по кнопке забыл указать как сделал) для потомков)
Код case "music": main_theme = GameObject.Find("main_theme(Clone)"); if (main_theme.GetComponent<AudioSource>().isPlaying == true){ PlayerPrefs.SetInt ("main_theme_play", 1); Music.GetComponent<Image> ().sprite = Music_on_off [0]; main_theme.GetComponent<AudioSource>().Pause (); } else { PlayerPrefs.SetInt ("main_theme_play", 0); Music.GetComponent<Image> ().sprite = Music_on_off [1]; main_theme.GetComponent<AudioSource>().Play (); }
|
|
| |
BorsheC | Дата: Вторник, 08 Мая 2018, 15:53 | Сообщение # 4 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| pixeye, вообщем смотри как сделал:
Код public GameObject main_theme;
void BackgroundMusic() { // проверяем существует ли статичный геймобджект с музыкой. Если существует то выходим из метода if (main_theme != null) return; // проверка неудачна, музыки нет. Делаем из префаба или откуда захочешь и назначаем в статичный main_theme main_theme = Instantiate(main_theme); main_theme.AddComponent<AudioSource>(); // делаем чтобы он не удалялся DontDestroyOnLoad(main_theme); }
void Start(){ BackgroundMusic(); //Звук и музыка if (PlayerPrefs.GetInt ("main_theme_play") == 0) { Music.GetComponent<Image> ().sprite = Music_on_off [1]; main_theme.GetComponent<AudioSource>().Play(); } else { Music.GetComponent<Image> ().sprite = Music_on_off [0]; main_theme.GetComponent<AudioSource>().Pause (); }
а это уже кнопка
Код case "music": if ((main_theme.isPlaying == true) && (main_theme != null)){ PlayerPrefs.SetInt ("main_theme_play", 1); Music.GetComponent<Image> ().sprite = Music_on_off [0]; main_theme.Pause (); } else { PlayerPrefs.SetInt ("main_theme_play", 0); Music.GetComponent<Image> ().sprite = Music_on_off [1]; main_theme.Play (); } break;
Музыка работает, вкл\выкл по кнопке происходит, НО при переходе на новую сцену музыка вырубается. Чего я не так сделал?Добавлено (08 Мая 2018, 15:46) --------------------------------------------- заменил public GameObject main_theme на public static GameObject main_theme;
и теперь ошибка argumentexception the object you want to instantiate is null Добавлено (08 Мая 2018, 15:53) --------------------------------------------- все разобрался. сохранил префаб
Код void BackgroundMusic() { // проверяем существует ли статичный геймобджект с музыкой. Если существует то выходим из метода if (main_theme != null) return; // проверка неудачна, музыки нет. Делаем из префаба или откуда захочешь и назначаем в статичный main_theme main_theme = Instantiate(main_theme); // делаем чтобы он не удалялся DontDestroyOnLoad(main_theme); }
но теперь сцены другие не запускаются)))
|
|
| |
BorsheC | Дата: Вторник, 08 Мая 2018, 15:04 | Сообщение # 5 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| Цитата pixeye ( ) pixeye То что вы написали и есть же синглтон?! вроде ясно и понятно, попробую сделать так. Спасибо. Так же Спасибо DivES. Вопрос закрыт.
|
|
| |
BorsheC | Дата: Вторник, 08 Мая 2018, 12:49 | Сообщение # 6 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| Цитата DivES ( ) Покажи код того, как создаётся экземпляр main_theme!
Да просто на сцене в дереве объектов висит, создается при создании сцены.
Цитата pixeye ( ) Если хочешь максимально просто, лениво и не удобно то делай пустую сцену. В ней делай все свои don't destroy on load - из этой сцены уже переходи в свое меню или игру. Тоесть эта такая загрузочная сцена которая появится один раз за игру.
Это конечно мысль, и я уже думал об этом, но хотелось бы просто уничтожить копию и оставить только первый объект который был изначально, а как реализовать не могу сообразить(
|
|
| |
BorsheC | Дата: Понедельник, 07 Мая 2018, 21:28 | Сообщение # 7 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| Это чудо Он же не дестроится. При возвращении на главную сцену в дереве объектов DontDestroyOnLoad main_theme 1 экземпляр , но debug показывает что там null . Добавлено (07 Мая 2018, 21:28) --------------------------------------------- Есть еще идеи? ну или как вы реализовываете данную функцию? () тока без синглтона... я их пока не понимаю
|
|
| |
BorsheC | Дата: Понедельник, 07 Мая 2018, 19:22 | Сообщение # 8 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| Я уже прописывал так. Сейчас ради интереса прописал сново Код ((main_theme.isPlaying == true) && (main_theme != null)) и все равно таже ошибка(((
|
|
| |
BorsheC | Дата: Понедельник, 07 Мая 2018, 19:03 | Сообщение # 9 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| При переходе на другую сцену музыка продолжает работать, ибо main_theme DontDestroyOnLoad. А включение/выключение работает до перехода на другую сцену, а по возврату на главную и клику по кнопке вылезает ошибка .
Цитата DivES ( ) Цитата BorsheC () Дублирование или вообще вся музыка?
Только дублирование, то есть играет 1 трек
Сообщение отредактировал BorsheC - Понедельник, 07 Мая 2018, 19:03 |
|
| |
BorsheC | Дата: Понедельник, 07 Мая 2018, 18:49 | Сообщение # 10 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| Цитата DivES ( ) Цитата BorsheC () Destroy (main_theme);
BorsheC, так ты же уничтожаешь main_theme на данном участке? А потом пытаешься её воспроизвести. Вот он и ругается) В методе Start ошибка закралась
Ранее у меня было, что при переходе с другой сцены на главную дублировалась музыка( то есть 2 трека играть начало) и именно этим дестроем у меня дублирование исчезло. А как сейчас прописать чтобы только один экземпляр оставался не могу сообразить(
|
|
| |
BorsheC | Дата: Понедельник, 07 Мая 2018, 17:52 | Сообщение # 11 | Тема: Вкл\выкл музыка |
был не раз
Сейчас нет на сайте
| Доброго дня. Помогите разобраться:
На главной сцене имеется кнопка вкл\выкл фоновой музыки, при нажатии на которую я меняю спрайт и соответственно останавливаю музыку:
Код case "music": if (main_theme.isPlaying == true) { PlayerPrefs.SetInt ("main_theme_play", 1); Music.GetComponent<Image> ().sprite = Music_on_off [0]; main_theme.Pause (); } else { PlayerPrefs.SetInt ("main_theme_play", 0); Music.GetComponent<Image> ().sprite = Music_on_off [1]; main_theme.Play (); } break;
Так же имеется блокировка создания второго экземпляра объекта main_theme (музыка) по тегу main_audio:
Код void Start(){ //Блокировка дублирования музыки if (GameObject.FindGameObjectsWithTag ("main_audio").Length == 1) { DontDestroyOnLoad (main_theme); } else { Destroy (main_theme); } }
В чем собственно проблема: при клике по кнопке все прекрасно работает (музыка выключается и включается), но если перейти на другую сцену а потом обратно на главную то main_theme возвращает null и при клике на кнопку возникает ошибка:
MissingReferenceException: The object of type 'AudioSource' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object.
Целый день бьюсь, не могу понять как решить. помогите пожалуйста. Сильно камнями не кидайтесь, я новичок) Заранее благодарю.
|
|
| |
|