Применение материала к нескольким объектам
На самом деле, заголовок не полностью отображает возможности этого скрипта — изменять можно не только материал, а вообще производить над объектами какие-либо манипуляции: изменение параметров, добавление компонентов, и т. д. Нужно лишь немного изменить код.
Суть в том, что когда сцена построена, а вам необходимо применить изменения к 30 объектам (или больше), то это может занять время. Конечно, нужно обязательно все делать через префабы, чтобы такие случаи свести к минимуму, но все же, ситуации бывают разные.
using UnityEngine;
using System;
using UnityEditor;
using UnityEngine.UI;
public class AssignMaterial : ScriptableWizard {
public bool isRecursively = true;
public Material material;
string label = "Select Game Objects";
GameObject[] objects;
void OnWizardUpdate () {
helpString = label;
isValid = (material != null);
}
void OnWizardCreate () {
objects = Selection.gameObjects;
foreach (GameObject go in objects){
changeMaterial(go);
}
}
void changeMaterial (GameObject go) {
if (go.GetComponent<YOUR_COMPONENT> ()) {
go.GetComponent< YOUR_COMPONENT> ().material = material;
}
if (isRecursively) {
for (int i = 0; i < go.transform.childCount; i++) {
changeMaterial(go.transform.GetChild(i).gameObject);
}
}
}
[MenuItem ("Custom/Assign Material", false, 4)]
static void assignMaterial () {
ScriptableWizard.DisplayWizard ("Assign Material", typeof(AssignMaterial), "Assign");
}
}
Создав такой скрипт и положив его в папку Editor вы создадите свой пункт в главном меню Unity. Выбираете Custom → Assign Material и появляется окно применения материала. Выбираете нужный материал, а на сцене объекты к которым его применить и жмете Assign. Готово.
В данном примере, я применял новый материал к компоненту Image.