Простая сохранялка
proektEK Дата: Сб, 14 Авг 2010, 08:39 | Сообщение # 21
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
А в каком месте у вас возникли проблемы?
Сообщение А в каком месте у вас возникли проблемы? Автор - proektEK Дата добавления - 14 Авг 2010 в 08:39
Левша Дата: Сб, 14 Авг 2010, 12:51 | Сообщение # 22
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Quote (proektEK )
А в каком месте у вас возникли проблемы?
У меня сейчас стоит 5-я бета 3.0. Я ставить не рискнул, хотя триал уже истекает, можно и попробовать. Но если честно мне этот метод не интересен, слишком он гемморный, я своим путем пойду видимо.
X.cor.R (Prologue)
Сообщение Quote (proektEK )
А в каком месте у вас возникли проблемы?
У меня сейчас стоит 5-я бета 3.0. Я ставить не рискнул, хотя триал уже истекает, можно и попробовать. Но если честно мне этот метод не интересен, слишком он гемморный, я своим путем пойду видимо.Автор - Левша Дата добавления - 14 Авг 2010 в 12:51
proektEK Дата: Пн, 16 Авг 2010, 18:21 | Сообщение # 23
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Для больших проектов конечно он не подходит, но для простых где надо сохранить 10-15 объектов вполне пойдет. Выкладываю упрощееную версию скрипта, кнопка V сохранить, кнопка B загрузить. Объекты задаем вручную. Забыл написать, нужно чтоб у вашего ГГ тег был "Player", так как скрипт округляет x y z (2,096=2)
Code
import System.Text; import System; import System.IO; var objscen:GameObject[]; var sav:boolean; private var nomer=0; private var chi=0; private var otkl=0; private var znachx:String="999"; private var coordx:float =0.000000; private var znachy:String="999"; private var coordy:float =0.000000; private var znachz:String="999"; private var coordz:float =0.000000; private var pust:String; function Start() { nomer=objscen.Length; } function Update() { if(otkl==1) { var r: StreamReader= File.OpenText(Application.dataPath+"/Save/"+"0.dat"); var str=r.ReadLine(); pervayastroka=int.Parse(str); var strAllFile = r.ReadToEnd().Replace("\r\n", "\n").Replace("\n\r", "\n"); var arrLines :String[] = strAllFile.Split(); if(chi<nomer) { var co:String=arrLines[chi].Replace("_","\n"); var coo:String[]=co.Split(); pust=coo[0].Replace("\r\n","\n"); //***************************************** var xx:String=coo[1].Replace(",","\n"); var xxx:String[]=xx.Split(); znachx=xxx[0]; coordx=int.Parse(znachx); //***************************************** var yy:String=coo[2].Replace(",","\n"); var yyy:String[]=yy.Split(); znachy=yyy[0]; coordy=int.Parse(znachy); //****************************************** var zz:String=coo[3].Replace(",","\n"); var zzz:String[]=zz.Split(); znachz=zzz[0]; coordz=int.Parse(znachz); //**************************************** if(pust=="Player") { coordy=coordy+0.9; } var respawn=objscen[chi]; respawn.transform.position=new Vector3(coordx,coordy,coordz); chi+=1; } if(chi==nomer) { chi=0; otkl=0; } r.Close(); } } function Star() { var f : FileInfo= FileInfo (Application.dataPath+"/Save/"+"0.dat"); var t : StreamWriter = new f.CreateText (); t.WriteLine(objscen.Length); for(var line:GameObject in objscen) { var xx:float=line.transform.position.x; var yy:float=line.transform.position.y; var zz:float=line.transform.position.z; t.WriteLine(line.gameObject.tag+"_"+xx.ToString()+"_"+yy.ToString()+"_"+zz.ToString()); } t.Close(); } function LateUpdate() { if (Input.GetKeyDown(KeyCode.V)) { Star(); } if (Input.GetKeyDown(KeyCode.B)) { otkl=1; } }
Со своим сохранением уже надоел наверно, поэтому вот скрипт для работы с реестром Windows:
Code
import Microsoft.Win32; function Start() { var saveKey: RegistryKey = Registry.LocalMachine.CreateSubKey("software\\Test");//Создаем ветку реестра saveKey.SetValue("Year","2010");//("Имя ключа","Данные") saveKey.Close(); Proverka(); } function Proverka() { var readKey: RegistryKey= Registry.LocalMachine.OpenSubKey("software\\Test");//Читаем ветку реестра var loadString :String = readKey.GetValue("Year");//Читаем данные Debug.Log(loadString); readKey.Close(); }
Сообщение отредактировал proektEK - Вс, 15 Авг 2010, 17:20
Сообщение Для больших проектов конечно он не подходит, но для простых где надо сохранить 10-15 объектов вполне пойдет. Выкладываю упрощееную версию скрипта, кнопка V сохранить, кнопка B загрузить. Объекты задаем вручную. Забыл написать, нужно чтоб у вашего ГГ тег был "Player", так как скрипт округляет x y z (2,096=2)
Code
import System.Text; import System; import System.IO; var objscen:GameObject[]; var sav:boolean; private var nomer=0; private var chi=0; private var otkl=0; private var znachx:String="999"; private var coordx:float =0.000000; private var znachy:String="999"; private var coordy:float =0.000000; private var znachz:String="999"; private var coordz:float =0.000000; private var pust:String; function Start() { nomer=objscen.Length; } function Update() { if(otkl==1) { var r: StreamReader= File.OpenText(Application.dataPath+"/Save/"+"0.dat"); var str=r.ReadLine(); pervayastroka=int.Parse(str); var strAllFile = r.ReadToEnd().Replace("\r\n", "\n").Replace("\n\r", "\n"); var arrLines :String[] = strAllFile.Split(); if(chi<nomer) { var co:String=arrLines[chi].Replace("_","\n"); var coo:String[]=co.Split(); pust=coo[0].Replace("\r\n","\n"); //***************************************** var xx:String=coo[1].Replace(",","\n"); var xxx:String[]=xx.Split(); znachx=xxx[0]; coordx=int.Parse(znachx); //***************************************** var yy:String=coo[2].Replace(",","\n"); var yyy:String[]=yy.Split(); znachy=yyy[0]; coordy=int.Parse(znachy); //****************************************** var zz:String=coo[3].Replace(",","\n"); var zzz:String[]=zz.Split(); znachz=zzz[0]; coordz=int.Parse(znachz); //**************************************** if(pust=="Player") { coordy=coordy+0.9; } var respawn=objscen[chi]; respawn.transform.position=new Vector3(coordx,coordy,coordz); chi+=1; } if(chi==nomer) { chi=0; otkl=0; } r.Close(); } } function Star() { var f : FileInfo= FileInfo (Application.dataPath+"/Save/"+"0.dat"); var t : StreamWriter = new f.CreateText (); t.WriteLine(objscen.Length); for(var line:GameObject in objscen) { var xx:float=line.transform.position.x; var yy:float=line.transform.position.y; var zz:float=line.transform.position.z; t.WriteLine(line.gameObject.tag+"_"+xx.ToString()+"_"+yy.ToString()+"_"+zz.ToString()); } t.Close(); } function LateUpdate() { if (Input.GetKeyDown(KeyCode.V)) { Star(); } if (Input.GetKeyDown(KeyCode.B)) { otkl=1; } }
Со своим сохранением уже надоел наверно, поэтому вот скрипт для работы с реестром Windows:
Code
import Microsoft.Win32; function Start() { var saveKey: RegistryKey = Registry.LocalMachine.CreateSubKey("software\\Test");//Создаем ветку реестра saveKey.SetValue("Year","2010");//("Имя ключа","Данные") saveKey.Close(); Proverka(); } function Proverka() { var readKey: RegistryKey= Registry.LocalMachine.OpenSubKey("software\\Test");//Читаем ветку реестра var loadString :String = readKey.GetValue("Year");//Читаем данные Debug.Log(loadString); readKey.Close(); }
Автор - proektEK Дата добавления - 16 Авг 2010 в 18:21
Скептик Дата: Пн, 16 Авг 2010, 18:55 | Сообщение # 24
Мыслитель
Сообщений: 5860
Награды:
48
Репутация:
1731
Статус: Offline
PlayerPrefs рулит. Я могу этот код в пять строчек написать.
Фанат игр Max Payne и Fahrenheit.
Сообщение PlayerPrefs рулит. Я могу этот код в пять строчек написать. Автор - Скептик Дата добавления - 16 Авг 2010 в 18:55
Левша Дата: Пн, 30 Авг 2010, 22:17 | Сообщение # 25
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Quote (proektEK )
Со своим сохранением уже надоел наверно
Напротив это насущная тема и просьба не бросать ее и довести до конца. Это одна из немногих тем, которая мне оч. интересна.
X.cor.R (Prologue)
Сообщение Quote (proektEK )
Со своим сохранением уже надоел наверно
Напротив это насущная тема и просьба не бросать ее и довести до конца. Это одна из немногих тем, которая мне оч. интересна.Автор - Левша Дата добавления - 30 Авг 2010 в 22:17
proektEK Дата: Пн, 30 Авг 2010, 22:30 | Сообщение # 26
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Мне тоже она интересна, вот засел, никак не могу засуть в xml массив объектов, юзаю с вики Save and Load. Quote (Скептик )
PlayerPrefs рулит
Реестр просто, как вариант. Появилась идея написать утилиту которая бы выводила все объекты в сцене и список всех скриптов в проекте, для удобного назначения их. Может кто знает с чего начать?
Сообщение Мне тоже она интересна, вот засел, никак не могу засуть в xml массив объектов, юзаю с вики Save and Load. Quote (Скептик )
PlayerPrefs рулит
Реестр просто, как вариант. Появилась идея написать утилиту которая бы выводила все объекты в сцене и список всех скриптов в проекте, для удобного назначения их. Может кто знает с чего начать? Автор - proektEK Дата добавления - 30 Авг 2010 в 22:30
Левша Дата: Пн, 30 Авг 2010, 22:38 | Сообщение # 27
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
А почему именно в XML ?
X.cor.R (Prologue)
Сообщение А почему именно в XML ? Автор - Левша Дата добавления - 30 Авг 2010 в 22:38
proektEK Дата: Пн, 30 Авг 2010, 22:43 | Сообщение # 28
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Пока хотябы в xml а потом можно в бинарник или еще куда.
Сообщение Пока хотябы в xml а потом можно в бинарник или еще куда. Автор - proektEK Дата добавления - 30 Авг 2010 в 22:43
Левша Дата: Пн, 30 Авг 2010, 22:50 | Сообщение # 29
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Я о том что может проще ПОКА во что попроще чем в xml. Почему не сохранять данные в листе скрипта? Его ведь проще инстансировать и править. Разговор пока идет о синглплейере.
X.cor.R (Prologue)
Сообщение Я о том что может проще ПОКА во что попроще чем в xml. Почему не сохранять данные в листе скрипта? Его ведь проще инстансировать и править. Разговор пока идет о синглплейере. Автор - Левша Дата добавления - 30 Авг 2010 в 22:50
proektEK Дата: Пн, 30 Авг 2010, 23:02 | Сообщение # 30
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
У меня пока в тексте есть, записывается быстро а вот считывается долговато. И вообще что лучше спавнить объекты в пустую сцену во время загрузки или все и всех расставить и только их параметры загружать? Quote (Левша )
Почему не сохранять данные в листе скрипта?
А это как ? PlayerPrefs?
Сообщение У меня пока в тексте есть, записывается быстро а вот считывается долговато. И вообще что лучше спавнить объекты в пустую сцену во время загрузки или все и всех расставить и только их параметры загружать? Quote (Левша )
Почему не сохранять данные в листе скрипта?
А это как ? PlayerPrefs? Автор - proektEK Дата добавления - 30 Авг 2010 в 23:02
Левша Дата: Пн, 30 Авг 2010, 23:11 | Сообщение # 31
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Quote (proektEK )
А это как ?
Не знаю... предположение такое. Я пока плотно этим вопросом заняться не могу, к сожалению, но если пойму как то сообщу обязательно.
X.cor.R (Prologue)
Сообщение Quote (proektEK )
А это как ?
Не знаю... предположение такое. Я пока плотно этим вопросом заняться не могу, к сожалению, но если пойму как то сообщу обязательно. Автор - Левша Дата добавления - 30 Авг 2010 в 23:11
Скептик Дата: Вт, 31 Авг 2010, 15:44 | Сообщение # 32
Мыслитель
Сообщений: 5860
Награды:
48
Репутация:
1731
Статус: Offline
Quote (proektEK )
Появилась идея написать утилиту которая бы выводила все объекты в сцене и список всех скриптов в проекте, для удобного назначения их. Может кто знает с чего начать?
Так все скрипты и так можно увидеть в меню Component.
Фанат игр Max Payne и Fahrenheit.
Сообщение Quote (proektEK )
Появилась идея написать утилиту которая бы выводила все объекты в сцене и список всех скриптов в проекте, для удобного назначения их. Может кто знает с чего начать?
Так все скрипты и так можно увидеть в меню Component.
Автор - Скептик Дата добавления - 31 Авг 2010 в 15:44
proektEK Дата: Вт, 31 Авг 2010, 21:03 | Сообщение # 33
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Quote (Скептик )
Так все скрипты и так можно увидеть в меню Component.
Ну это я знаю просто хочу сделать еще удобней. Сейчас моя штука выглядит вот так:
Сообщение Quote (Скептик )
Так все скрипты и так можно увидеть в меню Component.
Ну это я знаю просто хочу сделать еще удобней. Сейчас моя штука выглядит вот так: Автор - proektEK Дата добавления - 31 Авг 2010 в 21:03
Скептик Дата: Ср, 01 Сен 2010, 11:18 | Сообщение # 34
Мыслитель
Сообщений: 5860
Награды:
48
Репутация:
1731
Статус: Offline
Красиво. А как именно плагин функционирует?
Фанат игр Max Payne и Fahrenheit.
Сообщение Красиво. А как именно плагин функционирует? Автор - Скептик Дата добавления - 01 Сен 2010 в 11:18
proektEK Дата: Вс, 05 Сен 2010, 22:08 | Сообщение # 35
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Слева объекты в сцене, справа список скриптов в проекте (пока тока .js), выбираем любой из них и нажимаем Add script. Если сегодня успею код довести до ума, то выложу его. Пока из-за использования Button при большом количестве скриптов не много тормозит, потом чего-нибудь придумаю. Создать в Editor js скрипт с именем "Obj", скопировать в него это Code
import System.IO; import UnityEditor; import UnityEngine; class Obj extends EditorWindow { @MenuItem ("proektEk/Demka") static function ObjWindow () { var window : Obj = EditorWindow.GetWindow(Obj); window.Show (); window.minSize = new Vector2(400, 500); } var scrollPosition : Vector2; //var fon:Texture2D=Resources.Load("указываем тектуру", Texture2D); private var pref : GameObject; private var strs: String[]; private var index: int ; var testname:String; function OnGUI () { //GUI.DrawTexture (Rect (0,0, Screen.width, Screen.height), fon); scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width (Screen.width), GUILayout.Height (Screen.height)); GUILayout.BeginHorizontal(); //Ищем объекты в сцене======================================================================= GUILayout.BeginVertical(); GUILayout.Label ("Selected Script"+" : "+testname, EditorStyles.boldLabel); var obj : GameObject[] = FindObjectsOfType(GameObject); for(var line:GameObject in obj) { GUILayout.Label(line.name, EditorStyles.boldLabel) ; //Кнопки Добавить Удалить=================================== GUILayout.BeginHorizontal(); if(GUILayout.Button("Add script",GUILayout.Width(80))) { line.AddComponent (testname); } if(GUILayout.Button("Delet script",GUILayout.Width(80))) { DestroyImmediate(line.GetComponent (testname)); } EditorGUILayout.EndHorizontal(); //Кнопки Добавить Удалить=================================== } EditorGUILayout.EndVertical(); //Ищем объекты в сцене (Конец)======================================================================= //Список скриптов======================================================================= //JS=========== GUILayout.BeginVertical(); GUILayout.Label ("", EditorStyles.boldLabel); GUILayout.Label ("List Scripts (JS)", EditorStyles.boldLabel); var dir:DirectoryInfo = new DirectoryInfo(Application.dataPath); for(var file:FileInfo in dir.GetFiles("*.js",SearchOption.AllDirectories)) { if( GUILayout.Button(file.Name.Remove(file.Name.Length-3,3), GUILayout.Width(100)) ) { testname=file.Name.Remove(file.Name.Length-3,3);; } } EditorGUILayout.EndVertical(); //JS=========== //CS=========== GUILayout.BeginVertical(); GUILayout.Label ("", EditorStyles.boldLabel); GUILayout.Label ("List Scripts (CS)", EditorStyles.boldLabel); var dircs:DirectoryInfo = new DirectoryInfo(Application.dataPath); for(var file:FileInfo in dircs.GetFiles("*.cs",SearchOption.AllDirectories)) { if( GUILayout.Button(file.Name.Remove(file.Name.Length-3,3), GUILayout.Width(100)) ) { testname=file.Name.Remove(file.Name.Length-3,3); } } EditorGUILayout.EndVertical(); //CS=========== //Список скриптов======================================================================= EditorGUILayout.EndHorizontal(); GUILayout.EndScrollView (); } }
Может кто-нибудь знает, есть ли в Unity JScript аналог List который есть в C#.
Сообщение отредактировал proektEK - Вс, 05 Сен 2010, 22:09
Сообщение Слева объекты в сцене, справа список скриптов в проекте (пока тока .js), выбираем любой из них и нажимаем Add script. Если сегодня успею код довести до ума, то выложу его. Пока из-за использования Button при большом количестве скриптов не много тормозит, потом чего-нибудь придумаю. Создать в Editor js скрипт с именем "Obj", скопировать в него это Code
import System.IO; import UnityEditor; import UnityEngine; class Obj extends EditorWindow { @MenuItem ("proektEk/Demka") static function ObjWindow () { var window : Obj = EditorWindow.GetWindow(Obj); window.Show (); window.minSize = new Vector2(400, 500); } var scrollPosition : Vector2; //var fon:Texture2D=Resources.Load("указываем тектуру", Texture2D); private var pref : GameObject; private var strs: String[]; private var index: int ; var testname:String; function OnGUI () { //GUI.DrawTexture (Rect (0,0, Screen.width, Screen.height), fon); scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width (Screen.width), GUILayout.Height (Screen.height)); GUILayout.BeginHorizontal(); //Ищем объекты в сцене======================================================================= GUILayout.BeginVertical(); GUILayout.Label ("Selected Script"+" : "+testname, EditorStyles.boldLabel); var obj : GameObject[] = FindObjectsOfType(GameObject); for(var line:GameObject in obj) { GUILayout.Label(line.name, EditorStyles.boldLabel) ; //Кнопки Добавить Удалить=================================== GUILayout.BeginHorizontal(); if(GUILayout.Button("Add script",GUILayout.Width(80))) { line.AddComponent (testname); } if(GUILayout.Button("Delet script",GUILayout.Width(80))) { DestroyImmediate(line.GetComponent (testname)); } EditorGUILayout.EndHorizontal(); //Кнопки Добавить Удалить=================================== } EditorGUILayout.EndVertical(); //Ищем объекты в сцене (Конец)======================================================================= //Список скриптов======================================================================= //JS=========== GUILayout.BeginVertical(); GUILayout.Label ("", EditorStyles.boldLabel); GUILayout.Label ("List Scripts (JS)", EditorStyles.boldLabel); var dir:DirectoryInfo = new DirectoryInfo(Application.dataPath); for(var file:FileInfo in dir.GetFiles("*.js",SearchOption.AllDirectories)) { if( GUILayout.Button(file.Name.Remove(file.Name.Length-3,3), GUILayout.Width(100)) ) { testname=file.Name.Remove(file.Name.Length-3,3);; } } EditorGUILayout.EndVertical(); //JS=========== //CS=========== GUILayout.BeginVertical(); GUILayout.Label ("", EditorStyles.boldLabel); GUILayout.Label ("List Scripts (CS)", EditorStyles.boldLabel); var dircs:DirectoryInfo = new DirectoryInfo(Application.dataPath); for(var file:FileInfo in dircs.GetFiles("*.cs",SearchOption.AllDirectories)) { if( GUILayout.Button(file.Name.Remove(file.Name.Length-3,3), GUILayout.Width(100)) ) { testname=file.Name.Remove(file.Name.Length-3,3); } } EditorGUILayout.EndVertical(); //CS=========== //Список скриптов======================================================================= EditorGUILayout.EndHorizontal(); GUILayout.EndScrollView (); } }
Может кто-нибудь знает, есть ли в Unity JScript аналог List который есть в C#. Автор - proektEK Дата добавления - 05 Сен 2010 в 22:08
Скептик Дата: Вт, 07 Сен 2010, 12:55 | Сообщение # 36
Мыслитель
Сообщений: 5860
Награды:
48
Репутация:
1731
Статус: Offline
Массив вместо Листа используй.
Фанат игр Max Payne и Fahrenheit.
Сообщение Массив вместо Листа используй. Автор - Скептик Дата добавления - 07 Сен 2010 в 12:55
proektEK Дата: Вт, 07 Сен 2010, 17:35 | Сообщение # 37
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Массив я всю неделю ковырял, у меня задача в сохраняемый класс Массив или Лист запихнуть.
Сообщение Массив я всю неделю ковырял, у меня задача в сохраняемый класс Массив или Лист запихнуть. Автор - proektEK Дата добавления - 07 Сен 2010 в 17:35
Левша Дата: Вт, 07 Сен 2010, 17:53 | Сообщение # 38
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Елки моталки, создай этот класс сам. Или я не так понял???
X.cor.R (Prologue)
Сообщение Елки моталки, создай этот класс сам. Или я не так понял??? Автор - Левша Дата добавления - 07 Сен 2010 в 17:53
proektEK Дата: Вт, 07 Сен 2010, 17:58 | Сообщение # 39
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Класс у меня есть, но как прописать в него массив координат или имен или еще чего, вот это проблема для меня.
Сообщение Класс у меня есть, но как прописать в него массив координат или имен или еще чего, вот это проблема для меня. Автор - proektEK Дата добавления - 07 Сен 2010 в 17:58
Левша Дата: Вт, 07 Сен 2010, 18:04 | Сообщение # 40
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
proektEK , Обьясни мне на пальцах, что такое массив и я возможно придуаю как его в скрипт запихнуть. Только понятным не прогеру языком обьясни...
X.cor.R (Prologue)
Сообщение proektEK , Обьясни мне на пальцах, что такое массив и я возможно придуаю как его в скрипт запихнуть. Только понятным не прогеру языком обьясни... Автор - Левша Дата добавления - 07 Сен 2010 в 18:04