student1603 | Дата: Среда, 28 Ноября 2018, 16:57 | Сообщение # 1 |
уже был
Сейчас нет на сайте
| Добрый день! Делаю сохранение/загрузку для своей программы в юнити. С сохранением все отлично, возникла проблема с загрузкой. Сначала мне необходимо создать несколько однотипных объектов (памятников) - метод LoadStellas(), затем к ним нужно добавить(при необходимости) дочерние объекты: фото, надписи, цветник с плитой, стэнд - метод SetStellas(). Если раскидать эти методы на две разных кнопки, то оба работают корректно. Если же назначить оба метода на одну кнопку, то дочерние объекты создаются с неправильными локальными свойствами position, rotation, scale так далее. Важный момент, для загрузки дочерних объектов я использую те же самые методы, что и для создания, только передаю другие параметры. Суть вопроса - почему возникает такая проблема, и как все-таки назначить оба метода на одну кнопку, но чтобы они корректно работали? мой код для загрузки объектов:
Код public void LoadStellas() { stellasName = SaveSystem.GetString("stellasName"); List<string> Names = stellasName.Split('|').ToList();
GameObject[] stellasModel = Resources.LoadAll<GameObject>("Prefabs/PivotPrefabs/Pamitniki/Models/"); foreach (var name in Names) { for (int i = 0; i < stellasModel.Length; i++) { if (name == stellasModel[i].name) { stellasModel[i].GetComponent<ObjectScript>().Create(); } } } }
public void SetStellas() { Debug.Log(GameObject.Find("CenterPoint")); TouchManager touchManager = GameObject.Find("CenterPoint").GetComponent<TouchManager>(); Debug.Log(GameObject.Find("CenterPoint").GetComponent<TouchManager>()); AddText addText = GameObject.Find("CenterPoint").GetComponent<AddText>();
stellas = FillStellasList();
foreach (var stella in stellas) { stella.transform.position = SaveSystem.GetVector3(stella.name + "position"); stella.transform.rotation = SaveSystem.GetQuaternion(stella.name + "rotation");
touchManager.ChangeMaterial(stella, SaveSystem.GetString(stella.name + "material"));
if (SaveSystem.GetBool(stella.name + "parterre")) { touchManager.gameObject = stella; touchManager.AddParterre(stella); }
if (SaveSystem.GetBool(stella.name + "plate")) { touchManager.gameObject = stella; touchManager.AddPlate(stella); }
for (int i = 0; i < SaveSystem.GetInt(stella.name + "countOfImage"); i++) { addText.AddImage(stella, SaveSystem.GetVector3(stella.name + "imagePosition" + i.ToString()), SaveSystem.GetQuaternion(stella.name + "imageRotation" + i.ToString()), SaveSystem.GetVector3(stella.name + "imageScale" + i.ToString())); }
for (int i = 0; i < SaveSystem.GetInt(stella.name + "countOfText"); i++) { addText.AddName(stella, SaveSystem.GetVector3(stella.name + "textPosition" + i.ToString()), SaveSystem.GetQuaternion(stella.name + "textRotation" + i.ToString()), SaveSystem.GetString(stella.name + "textContaint" + i.ToString()), SaveSystem.GetVector3(stella.name + "textScale" + i.ToString())); }
for (int i = 0; i < SaveSystem.GetInt(stella.name + "countOfDate"); i++) { addText.AddDate(stella, SaveSystem.GetVector3(stella.name + "datePosition" + i.ToString()), SaveSystem.GetQuaternion(stella.name + "dateRotation" + i.ToString()), SaveSystem.GetString(stella.name + "dateContaint" + i.ToString()), SaveSystem.GetVector3(stella.name + "dateScale" + i.ToString())); }
for (int i = 0; i < SaveSystem.GetInt(stella.name + "countOfEpitaphy"); i++) { addText.AddEpitaphy(stella, SaveSystem.GetVector3(stella.name + "epitaphyPosition" + i.ToString()), SaveSystem.GetQuaternion(stella.name + "epitaphyRotation" + i.ToString()), SaveSystem.GetString(stella.name + "epitaphyContaint" + i.ToString()), SaveSystem.GetVector3(stella.name + "epitaphyScale" + i.ToString())); } } }
также пример метода для создания обьекта:
Код public void AddEpitaphy(GameObject gObj, Vector3 position, Quaternion quaternion, string value, Vector3 scale) { textMeshPro = Instantiate(Epitaphy, gObj.transform);
textMeshPro.text = value; textMeshPro.transform.localPosition = position; textMeshPro.transform.localRotation = quaternion; textMeshPro.transform.localScale = scale; }
|
|
| |