Проблеми зі збереженням префабу
Маю таку проблему : Створив меню створення персонажа (меню кастомізації) і мені треба зробити так, щоб збарігалися зміни префаба и перенеслися на іншу сцену. Я дивився багато відео, питав у чата GPT і все зводилося до того, що я маю робити збереження через JSON або PlayerPrefs. А я взагалі не розумію як я це можу зробити зі своїм кодом. Прошу допомогу
using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine;
using UnityEditor;
public class CharacterCreatorMenu : MonoBehaviour
{
public GameObject character;
public List<OutfitChanger> outfitChangers = new List<OutfitChanger>();
public void RandomizeCharacter()
{
foreach (OutfitChanger changer in outfitChangers)
{
changer.Randomize();
}
}
public void Submit()
{
PrefabUtility.SaveAsPrefabAsset(character, “Assets/Player.prefab”);
SceneManager.LoadScene(2);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OutfitChanger : MonoBehaviour
{
[Header("Sprite to Changer")]
public SpriteRenderer brownPart;
[Header("Sprites to Cycle Through")]
public List<Sprite> options = new List<Sprite>();
private int currentOption = 0;
public void NextOptiot()
{
currentOption++;
if (currentOption >= options.Count)
{
currentOption = 0;
}
brownPart.sprite = options[currentOption];
}
public void PreviousOption()
{
currentOption—;
if (currentOption <= 0)
{
currentOption = options.Count — 1;
}
brownPart.sprite = options[currentOption];
}
public void Randomize()
{
currentOption = Random.Range(0, options.Count — 1);
brownPart.sprite = options[currentOption];
}
}
6 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівЯкщо чисто перенести в іншу сцену то DontDestroyOnLoad(); в Awake буде достатньо.. а якщо зберігати то краще використовувати 3в1, PlayerPrefs зберігає назву файлу збереження в якому string в вигляді Json, а так як Json дуже габаритний то можна сереалізувати все в BinaryFormater.. в будь якому випадку тобі для початку треба клас з даними які хочеш зберегти під атрибутом [System.Serialize], а далі все як описано вище.
Запакуй спрайти в ScriptableObject. Найкраще всередині використати dictionary, щоб індексація була по назві(але треба скачати з гітхабу чи ассет стору розширення до словника яке дозволяє його серіалізувати). Реалізуй в scriptable функції доступу до спрайтів і імплементуй це в свій код. Після створення персонажа створи json з індексами елементів кастомізації і збережи в PlayerPrefs.
Все правильно сказали про PlayerPrefs , зачем персонажа сохранять оплностью в отдельный префаб, если можно только сохранить «индексы» частей которые кастомизируются и на другой сцене загрузить их
А как сделать сохранение индексов ?
Ось вам дуже простий приклад. Перші чотири константи — ключі, за якими будемо зберігати обрані речі і індекс за замовчуванням. Індекс кожної обраної речі зберігається у наступних трьох полях. Метод Save зберігає за вищезгаданими ключами поточні значення, а метод Load — для кожної речі викликає метод LoadInt, який перевіряє — якщо за переданим ключем вже є запис — повертає його, а якщо нема — записує туди значення за замовчуванням і повертає його.
Привіт!
Як буде можливість, напиши в тг @Urizchnko, спробую допомогти тобі з цим)