Страница 1 из 2

Coroutine

СообщениеДобавлено: 05 янв 2017, 18:19
jet_aleks
Подскажите как выыйти из ситуации.

В статике нужно запустить корутину, без нее все висит.


Синтаксис:
Используется csharp
[MenuItem("Assets/CreateTexture")]
        static void CreateTexture()
        {
   Read();
}
static void  Read()
        {
       
        textureTGA = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/Textures/fabric_new2VRayDiffuseFilterMap.tga", typeof(Texture2D)); // create texture
                Texture2D _tex = AssetDatabase.LoadAssetAtPath("Assets/Textures/fabric_new2VRayDiffuseFilterMap.png", typeof(Texture2D)) as Texture2D; // load texture                                                                                                                      
        texturePng = _tex;
        UpdateStaic();


        //_tex.LoadImage(textureTGA.EncodeToPNG());
        //_tex.Apply();
        //File.WriteAllBytes(Application.dataPath + "/Textures/fabric_new2VRayDiffuseFilterMap" + ".png", _tex.EncodeToPNG());
        //AssetDatabase.Refresh();

    }

    public static void UpdateStaic()
    {
        for (int y = 0; y<textureTGA.height; y++)
        {
            for (int x = 0; x< textureTGA.width; x++)
            {
                IEnumerator e = ConvertedAlphaChanel.Conv(ConvertTgaFromPng.textureTGA, ConvertTgaFromPng.texturePng, new Vector2(x,y));
                e.MoveNext();
            }
        }
    }
public class ConvertedAlphaChanel : MonoBehaviour
{

    public static IEnumerator Conv(Texture2D texture2d, Texture2D png,Vector2 coord)
    {
       
                Color color = new Color();
                color = (texture2d.GetPixel((int)coord.x, (int)coord.y).a < 128) ? new Color(128, 128, 128, 128) : texture2d.GetPixel((int)coord.x, (int)coord.y);
                 Debug.Log(color);
                png.SetPixel((int)coord.x, (int)coord.y,color);

                yield return  null;
           
    }
       
   
   
}

 


собственно что я делаю?=) Нужно преконвертить .tga ->png и в png убрать альфу. Бросил часть кода в которой проблемы возникли.

Re: Coroutine

СообщениеДобавлено: 05 янв 2017, 18:45
Cr0c
http://answers.unity3d.com/questions/14 ... rator.html
Тут говорят, что надо через инстанс монобеха запускать корутину. То есть внутри монобеха должна быть сама корутина.

Re: Coroutine

СообщениеДобавлено: 05 янв 2017, 20:56
DbIMok
Это скрипты редактора. Здесь корутина не нужна. Ну и зачастую все велосипеды уже написаны, вероятно оптимально просто запускать какой нибудь готовый консольный конвертер

Re: Coroutine

СообщениеДобавлено: 05 янв 2017, 22:37
jet_aleks
Не совсем понял про конвертер. Вы хотите сказать что есть написаные конвертеры? Если да, тогда опишу проблему подробней. Мне нужно написать конвертер тга》пнг. Это я сделал.Еще нужно всю альфу переконвертить в серы color.a -128. Вот с этим и проблема, юнити зависает, нужно перещапускать.

Re: Coroutine

СообщениеДобавлено: 06 янв 2017, 06:25
DbIMok
Выкини корутины все заработает

Re: Coroutine

СообщениеДобавлено: 08 янв 2017, 17:06
seaman
Ну как я понимаю у него большие расчеты и он хочет использовать корутины для распараллеливания, иначе "все висит".
Либо делать в другом потоке, либо не в редакторе. Я бы написал консольную утилитку.

Re: Coroutine

СообщениеДобавлено: 09 янв 2017, 00:16
lol
Убери Debug.Log(). Вывод в консоль можёт всё адски замедлить, что будет казаться, что зависло. Особенно, когда ты выводишь в цикле для каждого пикселя.

Ещё бывает, что при работе с картинками сам редактор начинает сыпать варнинги на каждую операцию по какой-то причине, которую ты не учел, что тоже можно подумать, что зависло всё. Можно это понять, если при зависании подрубить отладчик к процессу и приостановить его.

Re: Coroutine

СообщениеДобавлено: 09 янв 2017, 10:54
jet_aleks
Ну как я понимаю у него большие расчеты и он хочет использовать корутины для распараллеливания, иначе "все висит".
Либо делать в другом потоке, либо не в редакторе. Я бы написал консольную утилитку.

Все правильно, но все организовать нужно в юнити, так как вся суть в том что бы максимально автоматизировать. В один клик собрать несколько префабов с настроенными материалами и подтянутыми текстурами, а текстур переимпорчены так как написал выше. Попробую поиграть с потоками=)

Re: Coroutine

СообщениеДобавлено: 09 янв 2017, 11:36
seaman
Все правильно, но все организовать нужно в юнити, так как вся суть в том что бы максимально автоматизировать.

Ну а кто мешает из Юнити открыть утилиту, сделать в ней что надо и автоматом закрыть по завершении задачи. Ну да - мигнет консольное окно, но думаю это не страшно - написать в документации что так и надо, чтобы не пугались и дождались результата.
Открывается в одну строчку. Например - открыть нотпад и в нем сразу файлик "1.txt":
Синтаксис:
Используется csharp
using UnityEditor;
using UnityEngine;
public class OpenNotepad : EditorWindow
{
    [MenuItem("Window/Open Notepad")]
    static void Init()
    {
        Application.OpenURL("d:\\Utils\\NotepadPP\\notepad++.exe 1.txt");
    }
}

Аналогично утилите можно передать параметром путь к файлу для обработки.

Re: Coroutine

СообщениеДобавлено: 09 янв 2017, 12:22
jet_aleks
а как работать с текстурой в консольном приложении, так же как и в юнити. Там свои апи есть?

Re: Coroutine

СообщениеДобавлено: 09 янв 2017, 12:53
seaman
Подключаешь System.Drawing. Создаешь Bitmap из файла. Дальше GetPixel/SetPixel В конце сохраняешь Bitmap в файл

Re: Coroutine

СообщениеДобавлено: 09 янв 2017, 15:01
jet_aleks
спасибо. получилось. Только не консоле, не работает с System.Drawing. На форме сделал

Re: Coroutine

СообщениеДобавлено: 09 янв 2017, 16:15
DbIMok
TGA2PNG.zip
выделяем файлики, щелкаем правой кнопкой мыши, в меню выбираем tga2png, в результате получаем png файлики.
Drawing форма не нужна. я в юнити ее использую, это аналогично консольному использованию.

Re: Coroutine

СообщениеДобавлено: 09 янв 2017, 17:14
jet_aleks
круто. :ymhug: буду разбираться!!!
Мне просто много работать с текстурой надо. Инвертировать каналы, затирать альфу, и тому подобное. Буду изучать материал. Огромное спасибо! (3A4OT)

Re: Coroutine

СообщениеДобавлено: 11 янв 2017, 19:03
DbIMok
как успехи?