Сохранить данные из игры в редактор? [Дубликат]

Другие плакаты верны: вам нужно перебирать список и копировать в новый список.

Однако ... Если объекты в списке неизменяемы - вам не нужно клонировать их , Если ваш объект имеет сложный граф объектов, они также должны быть неизменными.

Другим преимуществом неизменяемости является то, что они также являются потокобезопасными.

1
задан FotisK 6 May 2016 в 22:58
поделиться

3 ответа

У других кодеров Unity была эта проблема передо мной, и они придумали опрятное решение. Настройка пользовательского интерфейса на другой цвет в режиме воспроизведения «Playmode tint».

Здесь вы можете прочитать подробности (изначально опубликовано 2009, но я проверил, что он все еще работает в последнем Unity 5.3):

http://answers.unity3d.com/questions/9159/best-strategies-for-not-accidently-editing-whilst.html

2
ответ дан yinch 18 August 2018 в 04:10
поделиться
  • 1
    Спасибо, @yinch! Ваша ссылка на дискуссии о единстве дала много хороших решений. Как вы упомянули, изменение стиля playmode tint было, вероятно, самым полезным из всех. Плюс я прочитал там совет о включении максимизации при воспроизведении - таким образом, полностью скрывая панели. – FotisK 8 May 2016 в 01:19

В режиме воспроизведения нет настроек для предотвращения изменений, но есть способы уменьшить вероятность потери изменений в режиме воспроизведения.

1.Edit-> Настройки ... -> Цвета. Теперь, справа, измените Playmode Tint на red. Это напомнит вам, что вы вносите изменения в режим воспроизведения.

2. Нажмите на значок шестеренки каждого компонента, который вы изменяете во время воспроизведения, затем нажмите «Копировать компонент». Когда это делается с помощью playmode, выберите компонент, который вы хотите сохранить. Нажмите значок шестеренки еще раз, и на этот раз нажмите «Вставить компонентные значения».

3. Запустите редактор, который сделает это за вас. Это сложно, но возможно.

Используйте событие, чтобы узнать при входе в режим воспроизведения. Храните все важные важные переменные GameObject, такие как свойства transform / rigidbody в списке.

Подождите, пока остановится событие остановки, а затем спросите себя, какие GameObjects должны перезаписать настройки. Затем перезапишите свойства выбранных GameObjects. Вот что.

Полезные API для этого:

EditorApplication.isPlaying
EditorApplication.isPaused
EditorApplication.isPlayingOrWillChangePlaymode
EditorApplication.playmodeStateChanged += callBackFunc;
EditorApplication.HierarchyWindowItemCallback
EditorApplication.ProjectWindowItemCallback

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

3
ответ дан Programmer 18 August 2018 в 04:10
поделиться
  • 1
    Приятно знать, что они работают над этим! – Danny Herbert 6 May 2016 в 23:17
  • 2
    @ gjttt1 Да, это боль, и они начали работать над этим, получив много жалоб. Они также недавно присоединились к платформе .NET и работают над .NET 6. Слишком много хороших вещей, которые можно найти в будущей версии Unity. – Programmer 6 May 2016 в 23:23
  • 3
    Спасибо @Programmer за прекрасный и подробный ответ! Я не могу & quot; принимать & quot; два ответа (я бы хотел, потому что ваш ответ тоже этого заслуживает), но, по крайней мере, я его выдвигаю! – FotisK 8 May 2016 в 01:25
  • 4
    @FotisK Это нормально. – Programmer 8 May 2016 в 01:30

Вы можете выбрать объекты, которые хотите сохранить в режиме воспроизведения, скопировать их с помощью Ctrl + C, а затем просто вставить их обратно с помощью Ctrl + V после возвращения в режим редактирования. Затем вы можете удалить оригиналы из сцены или скопировать значения из отдельных компонентов, таких как @Programmer.

0
ответ дан SilentSin 18 August 2018 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: