Unity: Есть ли у GameObject ID?
Привет всем!
Есть сцена с gameObject-ами. Обьекты перемещаются по сцене. В какой-то момент уровень заканчивается и нужно сохранить состояния всех обьектов.
Так вот, состояния сохранить хочу в PlayerPrefs, в качестве ключа нужно использовать уникальный ID. Могу присвоить каждому обьекту ID. Присваивать рукой не особо удачно, если есть встроенный ID. В документации такого id не нашел. Есть ли у GameObject-ов ID?
#1
10:34, 24 мая 2017
Как вариант использовать это
GetInstanceID
#2
13:38, 24 мая 2017
Я его использую тоже. Но этот id на время жизни объекта, и например сохранять его бесполезно.
#3
15:43, 24 мая 2017
Mira
> Я его использую тоже. Но этот id на время жизни объекта, и например сохранять его бесполезно.
Да, я тут тыкался повторно пытаясь понять почему восстановление состояния не работает.
В сети есть вариант задания ID на основе transform. Но вот беда, в моем случае обьекты могут иметь одинаковые position, rotation, scale. так что похоже придется в инспекторе самому id руками прописывать.
#4
16:32, 24 мая 2017
Alerr
> В сети есть вариант задания ID на основе transform
это что за вариант такой?
я свой протокол использую и свои ID соответственно, не юзаю встроеные в юнити средства. InstnceID для хеширования объектов на сцене пользую
#5
17:13, 24 мая 2017
Mira
> это что за вариант такой?
Незамысловатый вариант, основан на том, что раз физические обьекты являются физическими, то они не могут пересекать друг друга, во всяком случае при запуске сцены, во время Awake();
Ну и можно использовать данные позиции, угла для создания идентификатора для каждого обьекта.
#6
17:40, 24 мая 2017
Alerr
плохой вариант)
кстати не совсем понятно для чего тебе.
#7
18:25, 24 мая 2017
Mira
> [b]Alerr[/b]
> плохой вариант)
Знаю, что плохой.
> кстати не совсем понятно для чего тебе.
Ситуация: есть уровни и каждый уровень типа комнаты.
Зашел в комнату сделал что-то.. например ящик передвинул.
При следующем входе в уровень, ящик должен лежать там,
куда его передвинули
#8
18:29, 24 мая 2017
Alerr
у юнити( в встроенном нетворке )вроде все само так делается.
а у меня сервер свой, там я ид генерирую функцией. при том алгоритм генерации не важен, лишь бы был приемлим по скорости и без коллизий.
разумеется клиент ничего не должен знать об ид, и не хардкодить их. при входе в игру должен получать все ид окружения
Активация Unity Reflect

После обработки вашей покупки мы отправим вам письмо на адрес владельца учетной записи. В этом письме — ссылка на активацию покупки, уникальная для вашего заказа.
Кроме того, в нем содержатся инструкции по настройке и конфигурации корпоративной учетной записи Unity и назначению рабочих мест отдельным пользователям вашей организации.

Вход в учетную запись
Для завершения настройки нужно войти в Unity в качестве владельца организации. Если при совершении покупки вы не вошли в учетную запись, то вы будете перенаправлены на портал входа Unity. Войти можно с помощью адреса электронной почты и пароля главной учетной записи организации.
Кроме того, вы можете создать новую учетную запись, войти с помощью учетной записи Google или Facebook или восстановить забытый пароль.
Если вам не удалось найти письмо с подтверждением покупки и ссылкой активации, то ссылку можно получить на этой странице.

Выбрать организацию
Войдя с учетной записью Unity ID руководителя организации, вы получите доступ к вкладке «Выбрать организацию». Выберите организацию, для которой вы хотите активировать приобретенный продукт.
При необходимости выберите пункт «Новая организация», чтобы создать новую организацию для команды или проекта.
Обратите внимание, что по новому заказу можно назначить рабочие места только для организаций в списке. Если вам нужно добавить продукты к другому существующему заказу или организации, то свяжитесь с торговым представителем.

Подтверждение продукта
Выбрав организацию для назначения подписки, на странице подтверждения вы увидите условия предоставления услуг Unity и лицензионное соглашение.
Выбрав пункт «Подтвердить подписку», вы больше не сможете переносить сервисы из одной организации в другую.

Организации
Как только владелец учетной записи получит новые продукты, вы сможете управлять рабочими местами для организации.
Выберите организацию на странице «Организации» и выберите вкладку «Подписки и сервисы» или нажмите на кнопку «Управление» (значок шестеренки) рядом с подпиской.

Управление рабочими местами
Назначение ключей для Unity Reflect осуществляется по рабочим местам (по одному на каждого пользователя). После назначения рабочего места сотрудник получит доступ к уникальному ключу Unity ID. Этот ключ открывает доступ к назначенному рабочему месту в редакторе.

Переназначение рабочих мест
При необходимости рабочее место можно переназначить другому сотруднику. Для возврата лицензии выберите текущего активного пользователя и нажмите кнопку «Вернуть рабочее место», чтобы освободить его и затем назначить другого пользователя.
Установка Unity Reflect
Теперь для Unity Reflect используется отдельный установщик, для которого не требуется Unity Hub.
Этот установщик можно найти здесь.
- Загрузите установщик по ссылке выше.
- Запустите установщик и выберите плагины, которые хотите установить (а также Reflect Viewer).
- Откройте целевое приложение и найдите значок или вкладку Unity, чтобы начать экспорт или синхронизацию.
Чтобы установить Reflect Review без связанных компонентов или плагинов, загрузите и откройте MSI-файл.
Подайте заявку на получение GitHub Student Developer Pack
Благодарим за авторизацию Unity ID на GitHub для программы Unity Student. Если вы еще не сделали этого, то подайте заявку на Student Developer Pack на GitHub. Возможно, вам нужно будет представить доказательства о зачислении в образовательное учреждение. Проверка может занять несколько недель — GitHub предоставит ориентировочные сроки обработки после подачи заявки.
Вы получили письмо от GitHub с подтверждением права на использование Student Developer Pack?
Это последний этап процесса. Теперь вы можете активировать Unity Student и приступить к творчеству!
Установить Unity, пока вы ждете?
Все еще ждете подтверждения от GitHub для получения Unity Student? Установите Unity и создайте первую игру, пока ждете.
Нужна помощь?
Если вы уже выполнили все инструкции, но подтверждение еще не пришло, то ознакомьтесь с инструкциями по решению проблем, связанных с GitHub, или свяжитесь с GitHub напрямую GitHub.
Код двухфакторной идентификации просрочен
Перезагрузите страницу, чтобы начать активацию двухфакторной идентификации заново
Уникальный id при дублировнии(клонировнии) объекта в Unity3d
В своём проекте на Unity3d пытаюсь вынести в ScriptableObject важные данные об объектах на сцене. Объекты однотипные, но информация о каждом экземпляре в сцене должна храниться в List в экземпляре SceneData : ScriptableObject . К этой информации объект сцены будет обращается в процессе игры. Например есть класс с данными:
public class PersonData
Он сохраняется в List
public class PersonView : MonoBehaviour
Ссылка на PersonData будет добавятся PersonView при открытии сцены в редакторе и после загрузки сцены в игре. Загрузка сцены будет из assetBundle , скачиваемого через интернет, поэтому связывание данных должно быть по id , который будет генерироваться при добавлении объекта PersonView на сцену в редакторе, в методе OnEnable :
[CustomEditor(typeof(PersonView))] public class PersonViewEditor : Editor < void OnEnable() < var pv = this.target as PersonView; if(pv.id == 0) < pv.data = new PersonData(); pv.data = pv.id = System.DateTime.Now.Ticks; EditorUtility.SetDirty(target); >> >
При сохранении сцены, данные из PersonView сохраняются в PersonData . Проблема: при дублировании объекта( Ctrl+d ), id старого объекта копируется в новый, а мне нужно чтобы она создавалась заново. Единственный вариант, который я вижу: это в методе OnEnable() искать дубликаты, и если объект с таким же id присутствует на сцене, генерировать новый id и PersonData :
[CustomEditor(typeof(PersonView))] public class PersonViewEditor : Editor < PersonView pv; void OnEnable() < pv = this.target as PersonView; if(pv.id == 0) < SetNewId(); return; >else < var views = FindObjectsOfType() foreach(var view in views) < if(pv.id == view.id) < SetNewId(); return; >> > > private void SetNewId() < pv.data = new PersonData(); pv.data = pv.id = System.DateTime.Now.Ticks; EditorUtility.SetDirty(target); >>