Результаты поиска
| |
vova1227 | Дата: Воскресенье, 09 Мая 2021, 17:37 | Сообщение # 1 | Тема: Terrain и как с ним работать на мобильной платформе |
был не раз
Сейчас нет на сайте
| Карта, два террейна. Far 600. такая же отрисовка деревьев.(они в терейне) Тестировал игру на разных телефонах. На sm j730f слайдшоу. Графика там mali t830 В характеристиках чипа указано 4 шейдерных блока. НО! без терейнов просадок нет.
Что я упустил и что так дико рендерится? Или это норма?
Мне сказали что терейн не подходит для мобильных игр, и посоветовали сменить на меш. И здесь мне кажется что не то.
Картинки вставил по конски, извините, но тег IMG не работает, они просто не отображаются по другому
https://drive.google.com/file/d/1B6_DZ4SMblDwxj3YXvyrGWNmbXSfzmPD/view
https://drive.google.com/file/d/1ycvYoeAbO_z9BCf1fY8ZMqGYWwuOrOhr/view
https://drive.google.com/file/d/1U4k4kkq8VS4IeinyM07mmbMdQ4Ubalfi/view
а последний с отключенными терейнами.
https://drive.google.com/file/d/146p87hFxc_TaAU_XOjgLi0vigvxle41Y/view
Сообщение отредактировал vova1227 - Воскресенье, 09 Мая 2021, 17:42 |
|
| |
vova1227 | Дата: Среда, 05 Мая 2021, 20:13 | Сообщение # 2 | Тема: Движение игрока с платформой |
был не раз
Сейчас нет на сайте
| Вопрос почему выпадает и как? проваливается? Помните что если игрок становится дочерним то на него действуют родительские параметры, скейл и т.д. если на плеере ригидбоди то можно прилепить fixedJoint к другому ригидбоди.
да и в конце концов, а что мешает поставить в update transform.position платформы = transform.position игрока, написать правда правельно надо. это так мысль просто вы хоть фото прилепите, а то не понятно, что за платформа, 2д или 3д, есть на ней колайдер или нету.
Сообщение отредактировал vova1227 - Среда, 05 Мая 2021, 20:17 |
|
| |
vova1227 | Дата: Среда, 05 Мая 2021, 16:12 | Сообщение # 3 | Тема: Корутины, можна ли так делать? |
был не раз
Сейчас нет на сайте
| Я заменил Update корутиной с постоянным перезапуском 0.5 сек Можна ли так делать и правельно ли это? Я не уверен в yield break; По моему мнению он останавливает корутину, но зачем тогда StopCoroutine() нужен? У меня перезапускается одна и та же корутина или плодятся новые экземпляры каждые 05 сек и существуют дальше в памяти? Перечитал много разных статей, но конкретного ответа найти не смог.
Код void Start { StartCoroutine(Man5Updator()); }
IEnumerator Man5Updator() { Man5Time = CubeResources.GetComponent<MyTimer>().GameMin; //STANDART if (transform.position != targetPos) { Man5Anim.SetBool("Walk", true); Man5Navi.SetDestination(targetPos); } else { Man5Anim.SetBool("Walk", false); }
yield return new WaitForSeconds(0.5f); RepCourMan5(); yield break; } public void RepCourMan5() { StartCoroutine(Man5Updator()); }
|
|
| |
vova1227 | Дата: Четверг, 01 Апреля 2021, 23:59 | Сообщение # 4 | Тема: Вопрос-[ответ] по Unity |
был не раз
Сейчас нет на сайте
| Как сохранить привязку объекта к родительскому? Допустим есть куб который привязан к контейнеру. Я сохраню его позицию и воссоздам куб из префаба при старте игры. Я понимаю что можно заново его привязать к родителю при создании. Но я хочу как то сохранить данные о изначальной привязке, как это сделать?Добавлено (16 Мая 2021, 10:00) --------------------------------------------- Подскажите пожалуйста люди, из за чего это, фото прикладываю. Блики и артефакты на персонажах. Самое главное это только в билде есть, смотришь на персонажа а по нему вот такие штуки бликают типа как сетка прорезается.
Сделал 4 персонажа с mixamo fuse и в 2х вообще этого нет, во 2-м есть чуток , а в 3м вот жесть просто.
My WebPage
|
|
| |
vova1227 | Дата: Четверг, 01 Апреля 2021, 20:47 | Сообщение # 5 | Тема: Десериализация |
был не раз
Сейчас нет на сайте
| я читал что можно дописывать данные в файл путем FileMode.Append. Дописать в файл удалось, файл открыл блокнотом и Vector4 там значился, значит данные все таки в файле. Но вот при возврате возникает ошибка. При загрузке этого сохранения Unity показывает ошибку в строчке
Код objectsT = (List<myVector4>)formatter.Deserialize(streamT);
InvalidCastException: Specified cast is not valid. SaveGameToM.LoadT () (at Assets / Script / SaveGameToM.cs: 111)
Что не верно?
Код [System.Serializable] public struct myVector3 { public float x, y, z; } [System.Serializable] public struct myVector4 { public float j, k, l; }
[SerializeField] public List<myVector3> ObjectsPositions = new List<myVector3>(); [SerializeField] public List<myVector4> ObjectsPositionsT = new List<myVector4>(); public void Start() { if (File.Exists(Application.persistentDataPath + "/saves/save.sav")) { BackMyCubes(); BackMyTriangles(); } } public void BackMyCubes() { ObjectsPositions = Load(); foreach (var pos in ObjectsPositions) { GameObject i = Instantiate(Cube1Pref, new Vector3(pos.x, pos.y, pos.z), Quaternion.identity); } ObjectsPositions.Clear(); } public void BackMyTriangles() { ObjectsPositionsT = LoadT(); foreach (var posT in ObjectsPositionsT) { GameObject t = Instantiate(Triangle1Pref, new Vector4(posT.j, posT.k, posT.l), Quaternion.identity); } ObjectsPositionsT.Clear(); } public void ManualSaving() { foreach (var obj in GameObject.FindGameObjectsWithTag("Cube1")) { myVector3 i = new myVector3(); i.x = obj.transform.position.x; i.y = obj.transform.position.y; i.z = obj.transform.position.z; ObjectsPositions.Add(i); } SaveCu(ObjectsPositions); } public void ManualSavingT() { foreach (var objT in GameObject.FindGameObjectsWithTag("Triangle1")) { myVector4 t = new myVector4(); t.j = objT.transform.position.x; t.k = objT.transform.position.y; t.l = objT.transform.position.z; ObjectsPositionsT.Add(t); } SaveT(ObjectsPositionsT); } public List<myVector3> Load() { List<myVector3> objects; BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Open)) { objects = (List<myVector3>)formatter.Deserialize(stream); } return objects; } public List<myVector4> LoadT() { List<myVector4> objectsT; BinaryFormatter formatter = new BinaryFormatter(); using (FileStream streamT = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Open)) { objectsT = (List<myVector4>)formatter.Deserialize(streamT); } return objectsT; } void SaveCu(List<myVector3> positions) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Create)) { formatter.Serialize(stream, positions); stream.Close(); } positions.Clear(); } void SaveT(List<myVector4> positionsT) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream streamT = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Append)) { formatter.Serialize(streamT, positionsT); streamT.Close(); } positionsT.Clear(); } }
|
|
| |
vova1227 | Дата: Четверг, 01 Апреля 2021, 15:31 | Сообщение # 6 | Тема: Сохранение rotatte position совместно с transform position |
был не раз
Сейчас нет на сайте
| Цитата Sanchez06 ( ) Ну смотри, в структуру Level можно запихнуть хоть структуры трупов, хоть врагов, хоть кого. Так и ты можешь запихнуть и треугольники, и кубы, и что у тебя там еще будет. В структурах я так и не разобрался, в данном случае это еще солоновато для меня. Но я читал что можно дописывать данные в файл путем FileMode.Append. Дописать в файл удалось, файл открыл блокнотом и Vector4 там значился, значит данные все таки в файле.
Код using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Runtime.Serialization.Formatters.Binary; using System.IO; using UnityEngine.UI;
public class SaveGameToM : MonoBehaviour { public GameObject Cube1Pref; public GameObject Triangle1Pref;
[System.Serializable] public struct myVector3 { public float x, y, z; }
[System.Serializable] public struct myVector4 { public float j, k, l; }
[SerializeField] public List<myVector3> ObjectsPositions = new List<myVector3>(); [SerializeField] public List<myVector4> ObjectsPositionsT = new List<myVector4>();
public void Start() { if (File.Exists(Application.persistentDataPath + "/saves/save.sav")) { BackMyCubes(); BackMyTriangles(); } }
public void BackMyCubes() { ObjectsPositions = Load();
foreach (var pos in ObjectsPositions) { GameObject i = Instantiate(Cube1Pref, new Vector3(pos.x, pos.y, pos.z), Quaternion.identity); } ObjectsPositions.Clear(); }
public void BackMyTriangles() { ObjectsPositionsT = LoadT();
foreach (var posT in ObjectsPositionsT) { GameObject t = Instantiate(Triangle1Pref, new Vector4(posT.j, posT.k, posT.l), Quaternion.identity); } ObjectsPositionsT.Clear(); }
public void ManualSaving() { foreach (var obj in GameObject.FindGameObjectsWithTag("Cube1")) { myVector3 i = new myVector3(); i.x = obj.transform.position.x; i.y = obj.transform.position.y; i.z = obj.transform.position.z; ObjectsPositions.Add(i); } SaveCu(ObjectsPositions); }
public void ManualSavingT() { foreach (var objT in GameObject.FindGameObjectsWithTag("Triangle1")) { myVector4 t = new myVector4(); t.j = objT.transform.position.x; t.k = objT.transform.position.y; t.l = objT.transform.position.z;
ObjectsPositionsT.Add(t); } SaveT(ObjectsPositionsT); }
public List<myVector3> Load() { List<myVector3> objects; BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Open)) { objects = (List<myVector3>)formatter.Deserialize(stream); } return objects; }
public List<myVector4> LoadT() { List<myVector4> objectsT; BinaryFormatter formatter = new BinaryFormatter(); using (FileStream streamT = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Open)) { objectsT = (List<myVector4>)formatter.Deserialize(streamT); } return objectsT; }
void SaveCu(List<myVector3> positions) {
BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Create)) { formatter.Serialize(stream, positions); stream.Close(); } positions.Clear(); }
void SaveT(List<myVector4> positionsT) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream streamT = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Append)) { formatter.Serialize(streamT, positionsT); streamT.Close(); } positionsT.Clear();
} }
Сделал во так и получил ошибку в Unity
Код InvalidCastException: Specified cast is not valid. SaveGameToM.LoadT () (at Assets / Script / SaveGameToM.cs: 111)
Ошибка при десериализации? Что я упустил?
Сообщение отредактировал vova1227 - Четверг, 01 Апреля 2021, 17:12 |
|
| |
vova1227 | Дата: Воскресенье, 21 Марта 2021, 06:21 | Сообщение # 7 | Тема: Необходимость в программировании |
был не раз
Сейчас нет на сайте
| " Что думаете, как будет с этим через десят лет" Да ничего с этим не будет. Какой бы там конструктор не был он всегда будет ограничен. Тут самим языкам программирования гибкости не хватает, а в конструкторе и подавно нельзя будет полностью реализовать свои задумки. Будут делать упоротые клоны одного и того же проекта ибо в конструкторе есть такой вот набор, сейчас и так выбора хороших игр почти нет.
|
|
| |
vova1227 | Дата: Суббота, 20 Марта 2021, 21:17 | Сообщение # 8 | Тема: Как подписать приложение сертификатом гугла |
был не раз
Сейчас нет на сайте
| Народ помогите кто знает как это делать. Я по незнанию согласился в плейконсоли на подпись сертификатом гугл. Как и что с этим делать я теперь вообще понять не могу. -Приложение создано на Unity и в нем создан обычный ключ keystore. - При публикации мне предложили подписывать ключом от гугла, я согласился. - мне выдали два сертификата которые я могу скачивать сертификат ключа подписи сертификат ключа загрузки -приложение сейчас на проверке, я так понимаю удалить и отказаться от ключа гугл я уже не могу. Но что мне делать с этими сертификатами и какой ключ сделать теперь и как сделать и куда его загружать я вообще не понимаю. Или это какой то ключ гугла, но откуда его скачать тогда? Читал инструкции гугла, там вообще ничего не понятно.
|
|
| |
vova1227 | Дата: Суббота, 06 Марта 2021, 14:57 | Сообщение # 9 | Тема: Сохранение rotatte position совместно с transform position |
был не раз
Сейчас нет на сайте
| Код public Dictionary<string, Level> levels = new Dictionary<string, Level>(); public struct Corpse { public string type; public int x; public int y; }
[System.Serializable] public struct Point { public float X; public float Y; public float Z; public Point(float x, float y, float z) { X = x; Y = y; Z = z; } } [System.Serializable] public struct Enemy { public string type; public Point pos; public Point rot; public int hp; public AI_cult_1.State state; public int ammo; public bool vis; }
[System.Serializable] public struct Decoration { public string type; public Point pos; public Point rot; }
[System.Serializable] public struct Level { public List<Corpse> corpses; public List<Enemy> enemies; public List<Decoration> decorations;
Это структуры в массиве если я правильно понял.
Код Level lvl = new Level();
lvl.decorations = GetAllDecor();//берем все декорации на сцене lvl.enemies = GetAllEnemies();//находим всех противников на сцене if (!levels.ContainsKey(SceneManager.GetActiveScene().name)) //если нет уровня в дикте {levels.Add(SceneManager.GetActiveScene().name,lvl);} //то создадим его else {levels[SceneManager.GetActiveScene().name]=lvl;} //а если есть - перезапишем
public List<Decoration> GetAllDecor() { List<Decoration> lol = new List<Decoration>(); GameObject[] decors = GameObject.FindGameObjectsWithTag("Decoration"); foreach (GameObject decor in decors) { Decoration a = new Decoration(); a.type = decor.name; a.pos = new Point(decor.transform.position.x,decor.transform.position.y,decor.transform.position.z); a.rot = new Point(decor.transform.eulerAngles.x,decor.transform.eulerAngles.y,decor.transform.eulerAngles.z); lol.Add(a); } return lol;
}
public List<Enemy> GetAllEnemies() { List<Enemy> lol = new List<Enemy>(); AI_cult_1[] enemies_on_scene = Object.FindObjectsOfType<AI_cult_1>(); foreach (AI_cult_1 enemy in enemies_on_scene) { Enemy a = new Enemy(); a.type = enemy.name; a.pos = new Point(enemy.transform.position.x,enemy.transform.position.y,enemy.transform.position.z); a.rot = new Point(enemy.transform.eulerAngles.x,enemy.transform.eulerAngles.y,enemy.transform.eulerAngles.z); a.ammo = enemy.countAmmo; a.hp = enemy.hp; a.state = enemy.state; a.vis = enemy.vis; lol.Add(a); }
левел это 2я сцена в юнити?
Ты говоришь о структурах сложенных в массив или?
|
|
| |
vova1227 | Дата: Суббота, 06 Марта 2021, 14:25 | Сообщение # 10 | Тема: Сохранение rotatte position совместно с transform position |
был не раз
Сейчас нет на сайте
| Спасибо, все заработало на ура, все восстановилось с поворотами. Я вот только думаю, а правильно ли я делаю что для каждого объекта создаю отдельный save.sav файл. Они как то совмещаются или лучше не надо? Дело в том что обектов будет много, не только там кубики и треугольники.
|
|
| |
vova1227 | Дата: Суббота, 06 Марта 2021, 13:19 | Сообщение # 11 | Тема: Сохранение rotatte position совместно с transform position |
был не раз
Сейчас нет на сайте
| Цитата Sanchez06 ( ) Да и код в теги code добавить
За это прошу прощение, я ночью писал, уже голова не варила просто.
Спасибо за помощь, интересно о чем человек вот еще написал, что такое Vector4 (w), сейчас пойду рыть, так как поворот именно треугольника реально одной оси.Добавлено (06 Марта 2021, 13:44) --------------------------------------------- PS/ Пробовал отредактировать сообщение, что то не врубаю как теги [/code][code] работают Вроде добавил и так и ся ниче не поменялось
|
|
| |
vova1227 | Дата: Суббота, 06 Марта 2021, 07:02 | Сообщение # 12 | Тема: Сохранение rotatte position совместно с transform position |
был не раз
Сейчас нет на сайте
| Вопрос собственно в чем: 1.Сохранил я треугольник к примеру, по Vector3. Но поворот то треугольника не сохранился в массив, при восстановлении всех треугольников они восстановятся в положении префаба. А как rotate position сохранить ихние? В Vector 3 только 3 переменные. Если в отдельный массив, то как тогда при восстановлении они выберут координаты? 2. Неужели все так делают и нет способа упростить сохранение, ну это же мракобесие для каждого объекта дописывать код и поиск по тегу.
Код System.Collections; using System.Collections.Generic; using UnityEngine; using System.Runtime.Serialization.Formatters.Binary; using System.IO; using UnityEngine.UI;
public class SaveGameToM : MonoBehaviour {
public GameObject Cube1Pref; public GameObject Triangle1Pref;
[System.Serializable] public struct myVector3 { public float x, y, z; }
[System.Serializable] public struct myVector4 { public float j, k, l; }
[SerializeField] public List<myVector3> ObjectsPositions = new List<myVector3>();
[SerializeField] public List<myVector4> ObjectsPositionsT = new List<myVector4>();
public void Awake() { if (!File.Exists(Application.persistentDataPath + "saves"))
{ Directory.CreateDirectory(Application.persistentDataPath + "/saves"); } }
public void Start() {
if (File.Exists(Application.persistentDataPath + "/saves/save.sav")& File.Exists(Application.persistentDataPath + "/saves/saveT.sav")) { BackMyCubes(); BackMyTriangles(); }
}
public void BackMyCubes() { ObjectsPositions = Load();
foreach (var pos in ObjectsPositions) { Instantiate(Cube1Pref, new Vector3(pos.x, pos.y, pos.z), Quaternion.identity); } ObjectsPositions.Clear(); }
public void BackMyTriangles() {//n ObjectsPositionsT = LoadT();
foreach (var posT in ObjectsPositionsT)//n {//n Instantiate(Triangle1Pref, new Vector3(posT.j, posT.k, posT.l), Quaternion.Euler(-90f,0.0f,0.0f));//n }//n ObjectsPositionsT.Clear();//n }//n
public void ManualSaving() { if (File.Exists(Application.persistentDataPath + "/saves/save.sav")) { File.Delete(Application.persistentDataPath + "/saves/save.sav"); }
foreach (var obj in GameObject.FindGameObjectsWithTag("Cube1"))
{ myVector3 i = new myVector3(); i.x = obj.transform.position.x; i.y = obj.transform.position.y; i.z = obj.transform.position.z;
ObjectsPositions.Add(i); }
Save(ObjectsPositions); }
public void ManualSavingT()//n {//n if (File.Exists(Application.persistentDataPath + "/saves/saveT.sav"))//n {//n File.Delete(Application.persistentDataPath + "/saves/saveT.sav");//n }//n
foreach (var objT in GameObject.FindGameObjectsWithTag("Triangle1"))//n
{//n myVector4 t = new myVector4();//n t.j = objT.transform.position.x;//n t.k = objT.transform.position.y;//n t.l = objT.transform.position.z;//n ObjectsPositionsT.Add(t);//n //сюда дописать ротат поз с другими буквами
}//n
Save(ObjectsPositionsT);//n }//n
public List<myVector3> Load() { List<myVector3> objects; BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Open)) { objects = (List<myVector3>)formatter.Deserialize(stream); }
return objects;
}
public List<myVector4> LoadT()//n {//n List<myVector4> objectsT;//n BinaryFormatter formatter = new BinaryFormatter();//n
using (FileStream streamT = new FileStream(Application.persistentDataPath + "/saves/saveT.sav", FileMode.Open))//n {//n objectsT = (List<myVector4>)formatter.Deserialize(streamT);//n }//n
return objectsT;//n
}//n
void Save(List<myVector3> positions) {
BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Create)) { formatter.Serialize(stream, positions); stream.Close(); } positions.Clear();
}
void Save(List<myVector4> positionsT)//n {//n
BinaryFormatter formatter = new BinaryFormatter();//n using (FileStream streamT = new FileStream(Application.persistentDataPath + "/saves/saveT.sav", FileMode.Create))//n { formatter.Serialize(streamT, positionsT);//n streamT.Close();//n } positionsT.Clear();//n
}//
}
Сообщение отредактировал vova1227 - Суббота, 06 Марта 2021, 14:22 |
|
| |
vova1227 | Дата: Пятница, 05 Марта 2021, 20:32 | Сообщение # 13 | Тема: Как сделать систему пред просмотра до установки обекта? |
был не раз
Сейчас нет на сайте
| Ладно, вопрос решен другим образом, if (Physics.Raycast(ray, out hit, 4.0f) && hit.collider.tag == "Cube1") {
Vector3 pos = hit.collider.transform.position; pos += hit.normal;
hit.collider.gameObject.transform.Rotate(0, 90, 0);
Я тут подумал что менее затратно для производительности изменить поворот уже установленного объекта, ведь это мобильная игра, да и вряд ли будет удобно таскать персонажа джойстиком еще и с этим объектом висящим спереди. Если что то не правильно то напишите что пожалуйста. На вид вроде все поворачивает как надо.
|
|
| |
vova1227 | Дата: Пятница, 05 Марта 2021, 18:06 | Сообщение # 14 | Тема: Как сделать систему пред просмотра до установки обекта? |
был не раз
Сейчас нет на сайте
| Народ, меня интересует по какому принципу делается пред просмотр устанавливаемого элемента. Вот к примеру вы в игре устанавливаете какую то модель в определенную точку. Но с момента как вы ее выбрали и до момента как вы ее создали эта модель висит у игрока типа в руках и вы можете менять ее расположение или вращать по оси или же вообще ходить с ней в руках. Какие есть методы реализации такой вот штуки? Как это вообще делается?
|
|
| |
vova1227 | Дата: Пятница, 05 Марта 2021, 17:53 | Сообщение # 15 | Тема: Вопрос-[ответ] по Unity |
был не раз
Сейчас нет на сайте
| Unity Бесплатный для некоммерческого использования. Чего то я не понял, как это не коммерческого? То есть я не могу продавать игру сделанную на Unity Или что то я не понял?
|
|
| |
vova1227 | Дата: Среда, 03 Марта 2021, 15:57 | Сообщение # 16 | Тема: Помогите доделать сохранение |
был не раз
Сейчас нет на сайте
| Цитата Sanchez06 ( ) И загрузка:
Спасибо тебе большое человек, я до социализации еще не дошел, она пока что в черновике написана, я на придаче в массив как застопорился так и целый день убил на чтение всего что только можно.
|
|
| |
vova1227 | Дата: Среда, 03 Марта 2021, 02:01 | Сообщение # 17 | Тема: Помогите доделать сохранение |
был не раз
Сейчас нет на сайте
| Подскажите пожалуйста, что надо исправить, и как завершить данный кусок кода. Это то что мне удалось найти и дополнить а так же поправить, но я не до конца уверен в правильности синтаксиса и еще некоторые моменты:
ObjectsPositions.Add(obj); //компилятор ругается obj не удается преобразовать из GameObject в SaveGameToM.myVector3
_______________________
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Runtime.Serialization.Formatters.Binary; using System.IO;
public class SaveGameToM : MonoBehaviour {
public GameObject Cube1Pref;
public struct myVector3 { public float x, y, z; }
[SerializeField] public List<myVector3> ObjectsPositions = new List<myVector3>();
public void Start() { ObjectsPositions = Load();
foreach (var pos in ObjectsPositions) { Instantiate(Cube1Pref, new Vector3(pos.x, pos.y, pos.z), Quaternion.identity); } }
public void OnApplicationQuit() { foreach (var obj in GameObject.FindGameObjectsWithTag("Cube1")) { ObjectsPositions.Add(obj); }
Save(ObjectsPositions); } //Сериализовывать эту структурыв JSON или BinarySerialize.
void List<myVector3>Load() { return; // [десериализуем оттуда, куда сериализуем в методе Save] }
void Save(List<myVector3> positions) { // [сериализуем positions }
|
|
| |
vova1227 | Дата: Вторник, 02 Марта 2021, 23:10 | Сообщение # 18 | Тема: Как сделать сохранения |
был не раз
Сейчас нет на сайте
| Спасибо конечно но это достаточно сложно пока что для меня. Я всего то хочу сохранить один тип объектов.
|
|
| |
vova1227 | Дата: Вторник, 02 Марта 2021, 04:05 | Сообщение # 19 | Тема: Как сделать сохранения |
был не раз
Сейчас нет на сайте
| Вопрос лично для меня еще сложный, прошу помощи. 1.Есть персонаж создающий объекты в сцене по средству Instantiate. 2. Приложение будет для мобильных устройств, насколько я понял там есть разница в методах сохранения, еще не очень понял в чем именно, но как бы в социализации. Хотя для начала мне хоть как то сохранить прогресс игры. 3. Документацию читал, но вывести из этого результат не видев ни одного примера мне сложно. 4. Я думаю что надо как то так: -Создать динамический массив -Собрать местоположение объектов которые созданы с момента чего то, или записывать сразу при их создании, или записывать все объекты которые в сцене при OnSceneExit, и вот тут тоже не придумал еще как именно потом отделить данные новых объектов от тех которые уже сохранены. -Как то передать это в массив. -Перевести массив в какой то вид сохранения. -При загрузке игры в старт вписать функцию instantiate которая на основе координат из массива создаст объекты на тех же координатах.
Кто что подскажет мне, как это реализовать и что вообще с этим делать, возможно уже есть способы это сделать или варианты другие. Я не нашел ни одного годного решения пока что.
Картинка с тестовой локации, что б было более понятно. Хотя бы как заспавненые кубик сохранять для начала.
https://ibb.co/xYQfX8c
|
|
| |
|