Привет! У меня есть функция которая выполняет определенные действия когда игрок меняет свое расположение на 500. При вызове этой функции ФПС проседает на несколько кадров. Это очень заметно. Можно как-то исправить это? Что бы функция выполнялась параллельно игре или переместить нагрузку на другое ядро?
Потоки можно использовать, только если не используются методы и обьекты Unity, иначе скорей всего будет крошиться unity. Потоки юзаем только в своих классах. Есть еще Coroutine, скорей всего это то, что тебе нужно
using UnityEngine; using System.Collections; using System.IO; using System; using System.Threading;
public class AboutTerrane : MonoBehaviour {
public Transform Palyer; public Var1 LV; public Var Var; public Start1 Start1; public int Distance; private int Distance1; private int Distance2; private Vector3 PalyerPosition; private Vector3 PalyerPosition1; public Transform Parent; public Material Material; public int Size = 1000; public int RS = 500; private string[] text; private int z; private string[] v = new string[0]; private bool z1 = false; private bool[][] T1 = new bool[0][]; private MeshFilter[][] T2 = new MeshFilter[0][]; private int[][] T3 = new int[0][]; private int[][] T4 = new int[0][]; private bool[][] T5 = new bool[0][]; private Mesh[][] T6 = new Mesh[0][]; private int Size2 = 0; private int Size3 = 0; private int Size4 = 0; private bool R = false; private int RS1;
get_sharedMesh can only be called from the main thread. Constructors and field initializers will be executed from the loading thread when loading a scene. Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.
Буду пробовать как-то ее исправить.
Добавлено (23 октября 2015, 01:48) --------------------------------------------- beril, я как то пытался разобраться с коуринами, но у меня не получилось. А суть потоков я понял сразу и сейчас я как-нибудь заменю методы unity на свои.
Сообщение отредактировал kinoooshnik - Пятница, 23 Октября 2015, 01:46
Читай, что выше - нельзя юзать потоки которые как то взаимодействуют с обьектами, методами Unity. Классы, которые наследуются от MonoBehaviour тоже туда вроде относятся. Что это вообще ? ты пытаешься уровень из файла загрузить?
beril, Я знаю что нельзя, сейчас код переписываю, что бы он не трогал Unity. А суть кода в том, что он загружает ландшафт с упрощенной сеткой ставит его в определенном радиусе от игрока, а 1/10 от радиуса ставит более детализированую сетку.
kinoooshnik, код что-то неадекватное и на неадекватном языке.
Цитатаkinoooshnik ()
А суть кода в том, что он загружает ландшафт с упрощенной сеткой ставит его в определенном радиусе от игрока, а 1/10 от радиуса ставит более детализированую сетку.
kinoooshnik, потоки тут не помогут. Загрузка из файла - ОЧЕНЬ медленный процесс. Делай это по очень маленьким объемам данных и будет терпимо Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы. Как правильно задавать вопросы в технических форумах
kinoooshnik, в Unity есть встроенный LOD может ты сделаешь показ сеток разной детализации через него, без скриптов? Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
KamiRonin, у меня при первой загрузке генерируется карта высот, создаются упрощенные меши и записываются в файл. А во всех последующих загрузках я упрощенные загружаю из файла, а которые ближе я создаю по карте высот и увеличиваю их детализацю, и растравляю в зависимости от дальности расположения. И даже если я буду использовать LOD, то все равно будут проседания FPS. Именно по этому потоки - единственный выход для меня. beril, я сначала использовал AssetDatabase, но позже узнал, что он работает только в редакторе и по этому мне пришлось заменить файлы .Asset на обычные файлы. martuk, у меня были моменты, когда я возвращался к старому коду и не понимал ничего. Но писать красивый код или хотя бы комментировать я не хочу. Если кому интересно, почему я решил использовать меши, а не стандартный террейн, то почитайте вот это.
beril, я сначала использовал AssetDatabase, но позже узнал, что он работает только в редакторе и по этому мне пришлось заменить файлы .Asset на обычные файлы.
Ты не так понял, я имел ввиду бандлы (AssetBundle), там есть асинхронная загрузка