Другие плакаты верны: вам нужно перебирать список и копировать в новый список.
Однако ... Если объекты в списке неизменяемы - вам не нужно клонировать их , Если ваш объект имеет сложный граф объектов, они также должны быть неизменными.
Другим преимуществом неизменяемости является то, что они также являются потокобезопасными.
У других кодеров Unity была эта проблема передо мной, и они придумали опрятное решение. Настройка пользовательского интерфейса на другой цвет в режиме воспроизведения «Playmode tint».
Здесь вы можете прочитать подробности (изначально опубликовано 2009, но я проверил, что он все еще работает в последнем Unity 5.3):
http://answers.unity3d.com/questions/9159/best-strategies-for-not-accidently-editing-whilst.html
В режиме воспроизведения нет настроек для предотвращения изменений, но есть способы уменьшить вероятность потери изменений в режиме воспроизведения.
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 , функция, которая позволяет сохранять изменения времени воспроизведения в конструкции и скоро будет выпущен, но, как представляется, это единственный способ в это время.
Вы можете выбрать объекты, которые хотите сохранить в режиме воспроизведения, скопировать их с помощью Ctrl + C
, а затем просто вставить их обратно с помощью Ctrl + V
после возвращения в режим редактирования. Затем вы можете удалить оригиналы из сцены или скопировать значения из отдельных компонентов, таких как @Programmer.