Проблема со звуком из-за скрипта

Общие вопросы о Unity3D

Проблема со звуком из-за скрипта

Сообщение Navov68 05 апр 2023, 05:22

Здравствуйте, хотелось бы спросить совета в какую сторону копать, в общем имеется скрипт при добавлении которого на го в сцене перестает работать звук, проблем по муту и аудиосорсу отсутствуют,звукоклип везде добавлен, пробовал с преведущей сцены перенести го не удаляемый с аудиосорс ничего, на сцене тоже ничего, пока не сделаешь неактивным го со скриптом звук не работает. Попробую по другому объяснить:
-при запуске проекта звук работает в первой сцене,
-при переходе на сцены где го имеют этот скрипт звука нет, по аудио листнеру/сорсу все нормально в этот момент,
-при просмотре в редакторе: в 1 сцене статс отображает изменение db звука, переключение на сцену где этот скрипт, db зависает на последнем значении,
-Есть предположение из-за invoke, но без него тоже самое,
-ошибок юнити не выдаёт.


Может кто сталкивался, мне не нужен код, вы меня направьте в какую сторону копать

Скрипт который глушит звуки сцены:

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Puzzle : MonoBehaviour
{

        public MeshRenderer original; // картинка
        public float targetDistance = 0.5f; // разброс фрагмента от точки вина
        public string puzzleTag = "GameController"; // тег для пазлов
        public int columns = 5; // столбцы
        public int lines = 3; // линии
        public float smooth = 5; // сглаживание, во время соединения всех пазлов
       
        public GameObject win;


        private int puzzleCounter, sortingOrder;
        private List<SpriteRenderer> _puzzle = new List<SpriteRenderer>();
        private List<Vector3> _puzzlePos = new List<Vector3>();
        private Transform current;
        private Vector3 offset;
        private bool isWinner;

        void Awake()
    {
                columns = SetHard.Instance.Colom;
                lines = SetHard.Instance.Line;

        }

        void Start()
        {
                Invoke("NewGame", 3); // запуск игры через 3 ctr
        }

        void NewGame()
        {
                original.gameObject.SetActive(true);
                Clear();
                StartCoroutine(Generate());
        }

        int CheckPuzzle(float distance) // проверка на вин
        {
                int i = 0;
                for (int j = 0; j < _puzzle.Count; j++)
                {
                        if (Vector3.Distance(_puzzle[j].transform.position, _puzzlePos[j]) < distance)
                        {
                                i++;
                        }
                }
                return i;
        }

        void Update()
        {
                if (isWinner)
                {
                        if (CheckPuzzle(0.1f) == _puzzle.Count)
                        {
                                Clear();
                                original.gameObject.SetActive(true);
                        }
                        else
                        {
                                for (int j = 0; j < _puzzle.Count; j++)
                                {
                                        _puzzle[j].transform.position = Vector3.Lerp(_puzzle[j].transform.position, _puzzlePos[j], smooth * Time.deltaTime);
                                }
                        }
                }
                else
                {
                        if (Input.GetMouseButtonDown(0))
                        {
                                GetPuzzle();
                        }
                        else if (Input.GetMouseButtonUp(0) && current)
                        {
                                current.GetComponent<SpriteRenderer>().sortingOrder = sortingOrder;
                                current = null;

                                if (CheckPuzzle(targetDistance) == _puzzle.Count)
                                {
                                        isWinner = true;
                                        Debug.Log("!WIN!");
                                       
                                        win.SetActive(true);
                                }
                        }
                }

                if (current)
                {
                        Vector3 position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                        current.position = new Vector3(position.x, position.y, current.position.z) + new Vector3(offset.x, offset.y, 0);
                }
        }

        void Clear()
        {
                isWinner = false;
                puzzleCounter = 0;
                foreach (Transform child in transform)
                {
                        Destroy(child.gameObject);
                }
                _puzzle = new List<SpriteRenderer>();
                _puzzlePos = new List<Vector3>();
        }

        void Randomize() // раскидываем пазлы по случайным точкам
        {
                float[] x = new float[_puzzle.Count];
                float[] y = new float[_puzzle.Count];

                for (int j = 0; j < _puzzle.Count; j++)
                {
                        x[j] = _puzzlePos[j].x;
                        y[j] = _puzzlePos[j].y;
                }

                float minX = Mathf.Min(x);
                float maxX = Mathf.Max(x);
                float minY = Mathf.Min(y);
                float maxY = Mathf.Max(y);

                foreach (SpriteRenderer e in _puzzle)
                {
                        e.transform.position = new Vector3(Random.Range(minX, maxX), Random.Range(minY, maxY), e.transform.position.z);
                }
        }

        IEnumerator Generate() // создание пазлов / нарезка текстуры
        {
                // переносим размеры холста в пространство экрана
                Vector3 posStart = Camera.main.WorldToScreenPoint(new Vector3(original.bounds.min.x, original.bounds.min.y, original.bounds.min.z));
                Vector3 posEnd = Camera.main.WorldToScreenPoint(new Vector3(original.bounds.max.x, original.bounds.max.y, original.bounds.min.z));

                int width = (int)(posEnd.x - posStart.x);
                int height = (int)(posEnd.y - posStart.y);

                // определяем размеры пазла
                int w_cell = width / columns;
                int h_cell = height / lines;

                // учитываем рамку, т.е. неиспользуемое пространство вокруг холста
                int xAdd = (Screen.width - width) / 2;
                int yAdd = (Screen.height - height) / 2;

                yield return new WaitForEndOfFrame();

                for (int y = 0; y < lines; y++)
                {
                        for (int x = 0; x < columns; x++)
                        {
                                // делаем снимок части экрана
                                Rect rect = new Rect(0, 0, w_cell, h_cell);
                                rect.center = new Vector2((w_cell * x + w_cell / 2) + xAdd, (h_cell * y + h_cell / 2) + yAdd);
                                Vector3 position = Camera.main.ScreenToWorldPoint(rect.center);
                                Texture2D tex = new Texture2D(w_cell, h_cell, TextureFormat.ARGB32, false);
                                tex.ReadPixels(rect, 0, 0);
                                tex.Apply();

                                // создание нового объекта и настройка его позиции
                                GameObject obj = new GameObject("Puzzle: " + puzzleCounter);
                                obj.transform.parent = transform;
                                position = new Vector3(((int)(position.x * 100f)) / 100f, ((int)(position.y * 100f)) / 100f, puzzleCounter / 100f);
                                obj.transform.localPosition = position;
               

                                // конвертируем текстуру в спрайт
                                SpriteRenderer ren = obj.AddComponent<SpriteRenderer>();
                                int unit = Mathf.RoundToInt((float)Screen.height / (Camera.main.orthographicSize * 2f)); // формула расчета размера спрайта (только для режима камеры Оrthographic)
                                ren.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f), unit);
                                obj.AddComponent<BoxCollider2D>();
                                obj.tag = puzzleTag;

                                _puzzlePos.Add(position);
                                _puzzle.Add(ren);
                                puzzleCounter++;
                        }
                }

                original.gameObject.SetActive(false);
                Randomize();
        }

        void GetPuzzle()
        {
                // массив рейкаста, чтобы фильтровать спрайты по глубине Z (тот что ближе, будет первым элементом массива)
                RaycastHit2D[] hit = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
                if (hit.Length > 0 && hit[0].transform.tag == puzzleTag)
                {
                        offset = hit[0].transform.position - Camera.main.ScreenToWorldPoint(Input.mousePosition); ;
                        current = hit[0].transform;
                        sortingOrder = current.GetComponent<SpriteRenderer>().sortingOrder;
                        current.GetComponent<SpriteRenderer>().sortingOrder = puzzleCounter + 1;
                }
        }
}












 
Последний раз редактировалось Navov68 05 апр 2023, 05:42, всего редактировалось 1 раз.
Navov68
UNец
 
Сообщения: 6
Зарегистрирован: 05 апр 2023, 04:43

Re: Проблема со звуком из-за скрипта

Сообщение 1max1 05 апр 2023, 05:41

Я не вижу ничего плохого в этом скрипте. Попробуй удалять по частям его код и однажды, ты найдешь проблемный участок.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема со звуком из-за скрипта

Сообщение Navov68 05 апр 2023, 05:59

1max1 писал(а):Я не вижу ничего плохого в этом скрипте. Попробуй удалять по частям его код и однажды, ты найдешь проблемный участок.

Спасибо вам что заглянули в мою тему, я пробую даже в данный момент, но возможно кто-то встречался с такой проблемой или похожей, если честно для меня и так не удобно спрашивать в интернете, просто скорей всего эта проблема больше не по с# как по юнити.
Navov68
UNец
 
Сообщения: 6
Зарегистрирован: 05 апр 2023, 04:43

Re: Проблема со звуком из-за скрипта

Сообщение 1max1 05 апр 2023, 08:23

Думаю проблема специфическая и скорее это баг, так что кроме дебага тебе тут ничего не поможет. Мне, допустим, не понятно каким магическим образом может массово пропасть звук. Возможно ошибка в логике, связанная со скриптом Puzzle. Можешь еще записать видео как это работает, только не забудь все показать, включая консоль.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема со звуком из-за скрипта

Сообщение Navov68 05 апр 2023, 10:03

[quote="1max1"]Думаю проблема специфическая и скорее это баг, так что кроме дебага тебе тут ничего не поможет. Мне, допустим, не понятно каким магическим образом может массово пропасть звук. Возможно ошибка в логике, связанная со скриптом Puzzle. Можешь еще записать видео как это работает, только не забудь все показать, включая консоль.


Тут расскажу что происходит, пока ютуб и прога качество помяла:
-при запуске 1 сцены всё хорошо, аудиолистнер включен и аудиосорс с музыкой
-при запуске сцены 2 звук вырубает, причем я инстант только для своих переменных переносил, (пс: пробовал без него тоже самое)
-2 сцена работает всё нормально, но без звука, по аудиолистнеру и сорсу всё впорядке, кнопка подсказки забинжена на скрывание го пазла и открывания панели, от сюда ноги для меня и поросли только что-то никак.
-при возврате меню музыка дальше проигрывается не прерываясь, как будто-то после 2 сцены
такая вот проблема(
Забыл консоль записать, там муха не пролетала, все чисто
Navov68
UNец
 
Сообщения: 6
Зарегистрирован: 05 апр 2023, 04:43

Re: Проблема со звуком из-за скрипта

Сообщение Alkos26Rus 05 апр 2023, 11:08

Так с чего ты решил что проблема в том скрипте, ты же его не активируешь\деактивируешь в рантайме через редактор. А жмешь на свои кнопки, где у тебя может быть что угодно прописано, ищи проблему в переходе между своими окнами. Ну или покажи что ты активируешь скрипт и музыка останавливается, у меня сомнения что такое будет.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Проблема со звуком из-за скрипта

Сообщение Navov68 05 апр 2023, 13:22

Alkos26Rus писал(а):Так с чего ты решил что проблема в том скрипте, ты же его не активируешь\деактивируешь в рантайме через редактор. А жмешь на свои кнопки, где у тебя может быть что угодно прописано, ищи проблему в переходе между своими окнами. Ну или покажи что ты активируешь скрипт и музыка останавливается, у меня сомнения что такое будет.

-для этой игры на 3-4 переменных, в апдейт, ничего не произойдет,
-при старте го висит со скриптом,(не обязательно)
-проект я запускал на видео,
-при переключении звук пропадал,
Извините, вы не ответили на мой вопрос и чуть вникните в вопрос.
Navov68
UNец
 
Сообщения: 6
Зарегистрирован: 05 апр 2023, 04:43

Re: Проблема со звуком из-за скрипта

Сообщение Alkos26Rus 05 апр 2023, 20:12

Navov68 писал(а):чуть вникните в вопрос.

Что вникать, если не предоставлен код перехода сцены, код смены этих менюшек, код при нажатии на кнопки, там что угодно может быть прописано, может тайм фризится. Все что видно из видео это то что ты жмешь кнопки и происходит смена менюшек и звук отрубается, данный выше код не имеет к этому отношения.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Проблема со звуком из-за скрипта

Сообщение Navov68 05 апр 2023, 21:49

Alkos26Rus писал(а):
Navov68 писал(а):чуть вникните в вопрос.

Что вникать, если не предоставлен код перехода сцены, код смены этих менюшек, код при нажатии на кнопки, там что угодно может быть прописано, может тайм фризится. Все что видно из видео это то что ты жмешь кнопки и происходит смена менюшек и звук отрубается, данный выше код не имеет к этому отношения.

Поймите, я в начале темы описывал, что больше ничего не используется.


Вот скрипт смены сцены сцены:

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;



public class ChangeLvl : MonoBehaviour
{
    public int NumLvl;

    public void nextLvl()
    {

        SceneManager.LoadScene(NumLvl);

    }
}
 




А вот скрипт смены сетАктив го со скриптом Puzzle:

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BackBut : MonoBehaviour
{
   
    public static int s;
    public GameObject Puzzle1;
    public GameObject Panel1;
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        if (s == 0)
        {
            Puzzle1.SetActive(true);
            Panel1.SetActive(true);
        }
        if (s == 1)
        {
            Puzzle1.SetActive(false);
            Panel1.SetActive(false);
        }
    }
   
    public void touchButtonSwap()
    {
        if (s == 0)
        {

            s = 1;
        }
        else
        {

            s = 0;
        }

    }
}
 



Смысл скидывать эти скрипты, про которые я в шапке описал. Как я уже писал, тут скорей всего в редакторе дело
Navov68
UNец
 
Сообщения: 6
Зарегистрирован: 05 апр 2023, 04:43

Re: Проблема со звуком из-за скрипта

Сообщение 1max1 06 апр 2023, 00:34

Либо кто-то из кода вызывает стоп/пауза, либо мут по листенеру, либо листенера вообще нет, либо еще что. Тут можно гадать сколько угодно, скинь проект сюда.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема со звуком из-за скрипта

Сообщение Alkos26Rus 06 апр 2023, 11:47

Navov68 писал(а): Как я уже писал, тут скорей всего в редакторе дело

В 99% случаев дело в кривых руках, а не в движке. Ну да, скинь сам проект, так будет проще.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Проблема со звуком из-за скрипта

Сообщение Navov68 08 апр 2023, 05:57

Всё заработало когда сменил 2021.3.20f1 на версию 2021.3.22f1, всем спасибо.
Navov68
UNец
 
Сообщения: 6
Зарегистрирован: 05 апр 2023, 04:43


Вернуться в Общие вопросы

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

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