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

Изменение исходных Ассетов с помощью скриптов

Автоматическое создание

Обычно, когда вы хотите внести изменения в какой-либо игровой актив, вы хотите, чтобы это происходило во время выполнения, и вы хотите, чтобы это было временно. Например, если ваш персонаж получает усиление непобедимости, вы можете изменить шейдерпрограмму, которая работает на ГПУ. Подробнее
См. в Словарь
раздела materialАктив, который определяет, как должна отображаться поверхность. Подробнее
См. в Словарь
, чтобы персонаж игрока наглядно продемонстрировал состояние непобедимости. Это действие включает изменение используемого материала. Это изменение не является постоянным, поскольку мы не хотим, чтобы материал имел другой шейдер при выходе из Play Mode.

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

Чтобы временно изменить шейдер материала, мы изменим свойство shader компонента material.

private var invincibleShader = Shader.Find ("Specular"); function StartInvincibility { renderer.material.shader = invincibleShader; }

При использовании этого скрипта и выходе из игрового режима состояние материала будет сброшено до того состояния, которое было до входа Режим воспроизведения изначально. Это происходит потому, что всякий раз, когда осуществляется доступ к renderer.material, материал автоматически создается и экземпляр возвращается. Этот экземпляр одновременно и автоматически применяется к средству визуализации. Таким образом, вы можете вносить любые изменения, какие душе угодно, не опасаясь за их сохранение.

Прямая модификация

ВАЖНОЕ ПРИМЕЧАНИЕ

Представленный ниже метод изменит фактические файлы исходных ресурсов, используемые в Unity. Эти модификации нельзя отменить. Используйте их с осторожностью.

Теперь предположим, что мы не хотим, чтобы материал сбрасывался при выходе из режима воспроизведения. Для этого вы можете использовать renderer.sharedMaterial. Свойство sharedMaterial вернет фактический ресурс, используемый этим модулем визуализации (и, возможно, другими).

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

private var invincibleShader = Shader.Find ("Specular"); function StartInvincibility { renderer.sharedMaterial.shader = invincibleShader; }

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

Применимые члены класса

Описанная выше формула применима не только к материалам. Полный список ресурсов, соответствующих этому соглашению, выглядит следующим образом:

  • Материалы: renderer.material и renderer.sharedMaterial
  • Сетки: meshFilter.meshОсновной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
    См. в Словарь
    и в meshFilter.sharedMesh
  • Physic MaterialsФизический ресурс для настройки эффектов трения и отскока сталкивающихся объектов. Подробнее
    См. в Словарь
    : коллайдерНевидимая форма, используемая для обработки физических столкновений объекта. Коллайдер не обязательно должен быть точно такой же формы, как сетка объекта — грубое приближение часто бывает более эффективным и неразличимым в игровом процессе. Подробнее
    См. в Словарь
    .material и collider.sharedMaterial

Прямое назначение

Если вы объявите общедоступную переменную любого из вышеперечисленных классов: Материал, Сетка или Физический материал и внесете изменения в ресурс, используя эту переменную вместо использования соответствующего члена класса, вы не получите преимущества автоматического создания экземпляра до того, как применяются изменения.

Активы, экземпляры которых не создаются автоматически

Есть два разных объекта, экземпляры которых никогда не создаются автоматически при их изменении.

Любые изменения, внесенные в эти объекты с помощью сценариев, всегда остаются постоянными и необратимыми. Итак, если вы меняете местностьландшафт в своей сцене. Игровой объект Terrain добавляет в вашу сцену большую плоскую плоскость, и вы можете использовать окно Terrain Inspector для создания подробного ландшафта. Подробнее
См. Словарь
пользователя карта высотТекстура в оттенках серого, в которой хранятся данные о высоте объекта. Каждый пиксель хранит разницу высот перпендикулярно лицу, которое представляет пиксель.
См. в Словарь
с помощью сценариев, необходимо учитывать создание экземпляров и назначение ценности самостоятельно. То же самое касается текстур. Если вы измените пикселинаименьшую единицу в компьютерном изображении. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
Смотрите в Словарь
файла текстуры, изменение является постоянным.

Примечания для iOS и Android

Ресурсы Texture2D никогда не создаются автоматически при их изменении в iOSМобильная операционная система Apple. Подробнее
См. в Словарь
и проектах Android. Любые изменения, внесенные в эти активы с помощью сценариев, всегда являются постоянными и никогда не могут быть отменены. Таким образом, если вы измените пиксели файла текстуры, это изменение будет постоянным.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3