Поиск пути через Environment Variables и запись TXT файлов

Программирование на Юнити.

Поиск пути через Environment Variables и запись TXT файлов

Сообщение vfxdomain 03 май 2011, 16:21

Приветствую обитателей форума!

Я работаю над небольшой утилитой для Unity Editor, задачу эту я уже решал на Python и LScript (синтаксис С-подобный), делал скрипты с тем же функционалом для 3Д пакетов и програм композа. К сожалению опыт работы с Unity у меня крайне небольшой, сводится в основном к изучению видео туторов, скрипты для юнити я никогда не писал, JScript и C# тоже практически не знаю. Пытаюсь используя примеры в виде готовых скриптов и доку по юнити скрипту переписывать свой python код под юнити, понемногу продвигаюсь, но часто застреваю в процессе. Интерфейс (окно с одним dropdown list и парой-тройкой кнопок) сделано как JScript, оттуда вызываются функции нескольких C# скриптов (импорт-экспорт геометрии OBJ), сейчас нужно следующее:

Я сохраняю геометрию OBJ кнопкой моего скрипта (использую при этом внешний C# скрипт ObjExport написанный не мной), путь к сохраненному .OBJ у меня сохраняется в переменной MyGeoFile

Теперь мне нужно узнать путь до папки C:\Users\ИМЯ_ЮЗЕРА , добавить к нему заранее известный string ("\\Documents\\MyFolder\\MyTextFile.txt") и засунуть получившийся путь в переменную MyTextFile

На питоне я это делал так, используя значения значения системных Environment Variables:

SYSTEMDRIVE = os.environ["SYSTEMDRIVE"]
HOMEPATH = os.environ["HOMEPATH"]
MyTextFile = SYSTEMDRIVE + HOMEPATH + "\\Documents\\MyFolder\\MyTextFile.txt"

После этого путь к сохраненному OBJ файлу (он у меня в переменной MyGeoFile) и еще два string-а (они тоже в переменных, допустим MyString_1 и MyString_2) нужно записать в текстовый файл MyTextFile.txt из переменной MyTextFile (создать .TXT файл если его там нет)

Вот как это выглядело на питоне:

f = open( MyTextFile, 'w' )
f.writelines( '%s' % MyGeoFile )
f.writelines( '\n' '%s' % MyString_1 )
f.writelines( '\n' '%s' % MyString_2 )
f.close()

===========================================================================================

Буду очень благодарен за подсказку как мне все это реализовать на JScript (или C#, хотя лучше первое), особенно нахождение пути к юзерской папке, через значения Environment Variables (возможно есть другой путь?)! Прошу прощения если это уже обсуждалось, поиском пользовался - не нашел.
vfxdomain
UNец
 
Сообщения: 13
Зарегистрирован: 01 май 2011, 16:25

Re: Поиск пути через Environment Variables и запись TXT файлов

Сообщение DbIMok 03 май 2011, 16:30

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) примерно так. конкретно нужное значение посмотрите в MSDN
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Поиск пути через Environment Variables и запись TXT файлов

Сообщение vfxdomain 03 май 2011, 17:21

DbIMok писал(а):Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) примерно так. конкретно нужное значение посмотрите в MSDN

Большое спасибо, помогло :-bd

Чуть изменив сэмпл с MSDN я создал вот такой скриптик с названием EnvVars.cs в папке Standard Assets:

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

public class EnvVars
{
    public static string Main()
    {
    string pth = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        return pth;
    }
}
 


Теперь из своего JScript файла можно взять этот путь вот так:

var myPath : String= EnvVars.Main();

Наверняка все это выглядит коряво и можно сделать более элегантно, но работает!
vfxdomain
UNец
 
Сообщения: 13
Зарегистрирован: 01 май 2011, 16:25

Re: Поиск пути через Environment Variables и запись TXT файлов

Сообщение vfxdomain 03 май 2011, 20:02

Я перенес поиск юзерской папки в .JS скрипт, и решил вопрос с записью текста в файл, если кому то интересно мое копание в песочнице, то вотЬ:
Синтаксис:
Используется javascript
import System;
import System.IO;

class MyApp extends EditorWindow {
        var options : String[] = ["Menu_Item_1", "Menu_Item_2", "Menu_Item_3", "Menu_Item_4", "Menu_Item_5"];
        var index : int = 0;

        @MenuItem("MyApp/Application Name")
        static function Init() {
                var window = GetWindow(MyApp);
                window.position = Rect(10,135,250,150);
                window.Show();
        }

        function OnGUI() {
                index = EditorGUI.Popup(
                        Rect(0,0,position.width, 20),
                        index,
                        options);

                if(GUI.Button(Rect(0,25,position.width, position.height - 26),"Send to myApp"))
                        ExportToApp();
        }
        function ExportToApp() {
                if(!Selection.activeGameObject) {
                        Debug.LogError("Please select at least one GameObject first");
                        return;
                }

                var meshName : String = Selection.gameObjects[0].name;
                var fileName : String = EditorUtility.SaveFilePanel("Export .obj file", "", meshName, "obj");
                for(var go : GameObject in Selection.gameObjects)
                {
                        var mf : MeshFilter = go.GetComponent(typeof(MeshFilter)) as MeshFilter;
                        ObjExporterScript.MeshToFile(mf, fileName);

                        var pth : String = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                        var myFolder : String = pth + "\\MyPath\\myFolder\\";
                        var myFile : String = exchange + "myFile.txt";

                        var cidEnum : String = options[index];
                        var cid : String= "";

                        if(cidNum == "Menu_Item_1") {
                                cid= "[some_value_1]";
                        }
                        if(cidEnum == "Menu_Item_2") {
                                cid= "[some_value_2]";
                        }
                        if(cidEnum == "Menu_Item_3") {
                                cid= "[some_value_3]";
                        }
                        if(cidEnum == "Menu_Item_4") {
                                cid= "[some_value_4]";
                        }
                        if(cidEnum == "Menu_Item_5") {
                                cid= "[some_value_5]";
                        }

                        sw = new StreamWriter(myFile);
                        sw.WriteLine(fileName);
                        sw.WriteLine(cid);
                        sw.Close();
                }
        }
}
 
vfxdomain
UNец
 
Сообщения: 13
Зарегистрирован: 01 май 2011, 16:25


Вернуться в Скрипты

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

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