Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

AssetDatabase.ForceReserializeAssets

Объявление

public static void ForceReserializeAssets();

Параметры

assetPaths Пути к активам, которые должны быть повторно сериализованы. Если опущено, будут повторно сериализованы все активы в проекте..
options Укажите, хотите ли вы повторно сериализовать сами активы, их метафайлы или и то, и другое. Если опущено, по умолчанию используются оба.

Описание

Принудительно загрузить и повторно сериализовать заданные ресурсы, сбрасывая на диск все незавершенные изменения данных.

Когда Unity загружает старые данные из ресурса или файла сцены, данные динамически обновляются в памяти, но не записываются обратно на диск, если только пользователь не сделает что-то, что явно испортит объект (например, изменит его значение). Этот метод позволяет заблаговременно загружать, обновлять и записывать на диск любые активы или файлы сцен в проекте без необходимости вручную загрязнять их.

Обычное поведение Unity имеет ряд преимуществ, особенно для проектов с системами контроля версий, где упреждающее обновление всех ресурсов после перехода на новую версию Unity приведет к созданию огромных списков измененных файлов, которые необходимо зафиксировать. Однако у него также есть недостаток, заключающийся в том, что обновления «смешиваются» с преднамеренными изменениями, поскольку пользователи продолжают работать над проектом. Этот метод позволяет вам быть активным контролируемым образом, решая, какие именно активы вы хотите обновить и когда.

using UnityEditor; using UnityEngine; public class AssetDatabaseExamples : MonoBehaviour { [MenuItem("AssetDatabase/Force Reserialize Assets Example")] static void UpdateGroundMaterials() { for (var i = 0; i < 10; i++) { var matPath = $"Assets/Materials/GroundMaterial{i}.mat"; var mat = (Material)AssetDatabase.LoadMainAssetAtPath(matPath); AssetImporter.GetAtPath(matPath).SetAssetBundleNameAndVariant("GroundBundle", ""); mat.shader = Shader.Find("Standard"); mat.color = Color.white; mat.mainTexture = (Texture)AssetDatabase.LoadMainAssetAtPath($"Assets/Textures/GroundTexture{i}.jpg"); } AssetDatabase.ForceReserializeAssets(); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3