Результаты поиска
| |
Sanchez06 | Дата: Среда, 03 Марта 2021, 05:43 | Сообщение # 21 | Тема: Помогите доделать сохранение |
участник
Сейчас нет на сайте
| Код foreach (var obj in GameObject.FindGameObjectsWithTag("Cube1"))
{ ObjectsPositions.Add(obj); }
Тут нужно бы добавлять новый экземпляр myVector3
Код 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); }
Код void List<myVector3>Load() Во первых, Void означает, что функция ничего не возвращает, но тут тебе нужно вернуть лист. Да и тип возвращаемого значения нужно писать через пробел:
Код public List<myVector3> Load()
Насчет сериализации - я тебе писал в соседней теме (и почему стоило новую создавать?), там все предельно просто. На твоем примере будет как-то так:
Код void Save(List<myVector3> positions) {
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(Application.persistentDataPath + "/save.sav", FileMode.Create)) { formatter.Serialize(Application.persistentDataPath + "/save.sav", positions); } }
И загрузка:
Код public List<myVector3> Load() { List<myVector3> objects; BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(Application.persistentDataPath + "/save.sav", FileMode.Open)) { objects = (List<myVector3>)formatter.Deserialize(stream); } return objects; }
|
|
| |
Sanchez06 | Дата: Вторник, 02 Марта 2021, 21:20 | Сообщение # 22 | Тема: Как сделать сохранения |
участник
Сейчас нет на сайте
| Цитата vova1227 ( ) 2. Приложение будет для мобильных устройств, насколько я понял там есть разница в методах сохранения, еще не очень понял в чем именно, но как бы в социализации. Хотя для начала мне хоть как то сохранить прогресс игры. Как минимум, бинарная сериализация на андроид точно работает, скорее всего и на иос тоже.
Я сделал так -дикт, где ключ - название уровня, а значение - класс уровня. В уровне собственно листы противников, декораций и всего такого.
Код [System.Serializable] 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); }
И, собственно, сериализуем и сохраняем эти значения!
Код BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(Application.persistentDataPath + "/save.sav", FileMode.Create)) { formatter.Serialize(Application.persistentDataPath + "/save.sav", levels); }
Так, ну а теперь загружаем наш levels:
Код BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(Application.persistentDataPath + "/save.sav", FileMode.Open)) { levels = (Dictionary<string, Level>)formatter.Deserialize(stream); }
Ну, как-то так. Может быть где-то промахнулся, но, думаю, ты разберешься.
|
|
| |
Sanchez06 | Дата: Воскресенье, 28 Февраля 2021, 22:34 | Сообщение # 23 | Тема: Доступ к children |
участник
Сейчас нет на сайте
| Если у тебя скрипт В в единственном экземпляре, то можешь сделать GameObject.GetComponentInChildren(B)
|
|
| |
Sanchez06 | Дата: Вторник, 10 Ноября 2020, 06:39 | Сообщение # 24 | Тема: Вопрос-[ответ] по Unity |
участник
Сейчас нет на сайте
| Цитата FlyOfFly ( ) x=-0.3584555 Попробуй в JoyTester посмотреть оси, это давняя проблема дуалшоков, когда аналоги выдают отклонение. Есть игры, в которых это незаметно, где не такое чувствительное управление.
Цитата geralex ( ) Стандартный принцип PlayerPref с какой-то связью по комнате или что-то из сложных схем применяется? Думаю, проще и гибче сделать сериализацию
|
|
| |
Sanchez06 | Дата: Суббота, 26 Сентября 2020, 05:29 | Сообщение # 25 | Тема: ПОМОГИТЕ ПОЖАЛУЙСТАААА найти ошибки в коде, заранее спс! |
участник
Сейчас нет на сайте
| Да, точно, после фигурных скобок не надо ставить точку с запятой.
Код class Program { static void Main(string[] args) { dynamic stud = new Student();
stud.Init(); stud.DisplayStudentInfo(1); } }
public class Student { public void Init() { Console.WriteLine("Студент инициализирован");//или что тебе надо в методе Init } public void DisplayStudentInfo(int id) { Console.WriteLine(id); } }
|
|
| |
Sanchez06 | Дата: Суббота, 26 Сентября 2020, 05:18 | Сообщение # 26 | Тема: ПОМОГИТЕ ПОЖАЛУЙСТАААА найти ошибки в коде, заранее спс! |
участник
Сейчас нет на сайте
| Похоже на обычный c#. Функции Init нет в классе Student. DisplayStudentInfo принимает int, то есть число, а не строку. Правильно будет stud.DisplayStudentInfo(1);
|
|
| |
Sanchez06 | Дата: Суббота, 26 Сентября 2020, 05:10 | Сообщение # 27 | Тема: Вопрос-[ответ] по Unity |
участник
Сейчас нет на сайте
| Можно ли использовать купленные ассеты в коммерческих играх? Нужно ли как-то указывать в игре или в титрах, какие ассеты я использую?
|
|
| |
Sanchez06 | Дата: Четверг, 02 Апреля 2015, 07:39 | Сообщение # 28 | Тема: Получится ли сделать такую игру в GM? |
участник
Сейчас нет на сайте
| Цитата EfimovMax ( ) что не нужно прописывать поиск пути. В гамачке он встроенный. Цитата maxim_2k ( ) Если в игре будет множество костюмов, то придётся для каждого костюма пилить 8 спрайтов с разных сторон. Если честно, я не очень понимаю, как грамотно это реализовать, поэтому прошу у вас помощи. Так же хотелось бы узнать побольше о каких то вещах, которые надеваются поверх одежды, вроде рюкзаков или разгрузки. Насчет костюмов да, но в самой иннавудс все эти разгрузки, пушки и предметы появляются одним спрайтом. Например ты можешь там взять любую винтовку, а спрайт у них там будет одинаковый.Цитата maxim_2k ( ) Но как то раз я вспомнил про объекты, которые можно сделать невидимыми для игрока и при наведение на них будет изменяться спрайт в соответствие с направлением. Можно сделать легче, просто проверяя направление от точки игрока до точки мыши (point_direction помоему)
|
|
| |
Sanchez06 | Дата: Четверг, 02 Апреля 2015, 07:23 | Сообщение # 29 | Тема: Как оптимизировать игру? |
участник
Сейчас нет на сайте
| Поместить звуки во внешнюю папку можно, но это не сильно должно помочь. Попробуй перекодировать в OGG, или в меньший битрейт.
|
|
| |
Sanchez06 | Дата: Четверг, 19 Марта 2015, 10:04 | Сообщение # 30 | Тема: SPACEONLINE.BIZ |
участник
Сейчас нет на сайте
| Игра платная, чтобы начать, нужно ввести 30 рублей. Плюс, тема не в том разделе.
Сообщение отредактировал Sanchez06 - Четверг, 19 Марта 2015, 10:04 |
|
| |
Sanchez06 | Дата: Вторник, 10 Марта 2015, 19:27 | Сообщение # 31 | Тема: Монетизация десктопной игры |
участник
Сейчас нет на сайте
| Ну, я тоже об этом думал. Раз эти сервисы расчитаны на сайты, то и зарабатывай на сайте! Сделай вики, сайт с новостями о своей игре, и поставь какой-нибудь поп-андер. Или вместо микротранзакций - ссылка с тем же адфлай, после перехода на которую тебе игровые ништяки приходят.
|
|
| |
Sanchez06 | Дата: Пятница, 06 Февраля 2015, 22:28 | Сообщение # 32 | Тема: Направление обьекта |
участник
Сейчас нет на сайте
| Смотря что ты хочешь сделать. Если чтобы можно было войти\выйти из машины, то не легче ли сделать у машины локальную переменную, отвечающую за то, сидит ли там игрок или нет? Тогда и направление машины менять не придется, т.к. это будет один и тот же объект.
|
|
| |
Sanchez06 | Дата: Среда, 21 Января 2015, 21:07 | Сообщение # 33 | Тема: Массивы-массивы-массивы... |
участник
Сейчас нет на сайте
| Цитата falcoware ( ) int card_name_number = Random(0,2); int card_live_number = Random(0,2); int card_sprite_number = Random(0,2); Фалко, не, Гамак дает результат функции Рандом с запятой, то есть может выпасть и 1.42345234, и 0.000001, но никогда ни 0 и не 2, там есть проще вещь - Choose(0,1,2)
Что-то типо:
i=choose(0,1,2) card_attack[i]=... card_live[i]=... card_sprite[i]=...
Сообщение отредактировал Sanchez06 - Среда, 21 Января 2015, 21:09 |
|
| |
Sanchez06 | Дата: Среда, 21 Января 2015, 20:59 | Сообщение # 34 | Тема: Массивы-массивы-массивы... |
участник
Сейчас нет на сайте
| Скинь код, посмотрим
|
|
| |
Sanchez06 | Дата: Четверг, 15 Января 2015, 13:09 | Сообщение # 35 | Тема: FileKit - от 15$ до 50$ за 1 тыс. загрузок |
участник
Сейчас нет на сайте
| А минималка какая?
|
|
| |
Sanchez06 | Дата: Воскресенье, 16 Ноября 2014, 16:34 | Сообщение # 36 | Тема: Вопрос - Ответ (Game Maker) |
участник
Сейчас нет на сайте
| Так, я не понимаю, ГМС стандарт теперь бесплатным стал? Или опять временная акция?
|
|
| |
Sanchez06 | Дата: Вторник, 30 Сентября 2014, 20:42 | Сообщение # 37 | Тема: Город с возможностью хождения по нему |
участник
Сейчас нет на сайте
| Цитата dima9595 ( ) всё равно по-кодить придётся А что там кодить то без взаимодействия? Берешь стандартный ассет для фпс\тпс, и все - он уже ходит, сталкивается, прыгает, и все такое. Потом модельки загружаешь и расставляешь с меш-коллайдерами.
|
|
| |
Sanchez06 | Дата: Суббота, 27 Сентября 2014, 11:44 | Сообщение # 38 | Тема: Что будет, если я просто переделаю пример на ГМ? |
участник
Сейчас нет на сайте
| Поменяю спрайты и звуки, а механику оставлю без изменений. Нужно ли подписывать автора примера?
|
|
| |
Sanchez06 | Дата: Пятница, 30 Мая 2014, 19:29 | Сообщение # 39 | Тема: Спор о необходимости плавучки в играх |
участник
Сейчас нет на сайте
| В некоторых играх используется нейронная сеть - в таком случае, для повышения реагирования лучше использовать числа с плавающей точкой.
|
|
| |
Sanchez06 | Дата: Понедельник, 26 Мая 2014, 13:11 | Сообщение # 40 | Тема: Вход и выход из транспорта |
участник
Сейчас нет на сайте
| Ну раз мы тут меряемся примерами, то скину свой - http://rghost.ru/55861925 Требует всего одного обьекта машины, реализовано движение самой машинки) Садиться\выйти - Е
|
|
| |
|