Я не знаю, почему рендерер сеток 3d-модели моей машины создавал собственные экземпляры всех материалов, когда я порождаю их, используя prefab. Пожалуйста, проверьте изображение ниже для того же:
Мое окружение моделирует не создание собственных экземпляров материалов, но все модели автомобилей, которые я делаю, когда я инициализируюсь через prefab. Я надеюсь, что вы поняли мою точку зрения.
Здесь я прилагаю изображение для настроек импорта модели автомобиля:
Поэтому я хочу остановить процесс создания новых экземпляров материалов .
После появления модели автомобиля во время выполнения создается собственный экземпляр материала, поэтому я хочу решить эту проблему.
Я создал еще один демонстрационный проект, в котором такого рода ситуации не создаются. В рендере сетки нет нового экземпляра материала.
2 ответа
Наконец, я могу справиться с проблемой самостоятельно.
Как я понимаю и узнаю, если вы измените какое-либо свойство материала, скажем, в соответствии с моим случаем, Color, то он создаст новый его экземпляр, потому что вы изменили что-то во время выполнения по сравнению с его основной версией.
В моем случае, я хочу изменить время работы шасси автомобиля в зависимости от выбора игрока. Так что новые экземпляры материала были созданы во время выполнения, и я потерял доступ к материалу шасси, чтобы изменить цвет.
Мне требуется во время выполнения выбрать материал шасси, чтобы изменить его цвет. Вот код, который я использовал:
GetCarChassisMaterial().color = DataCollection.CAR_COLOR_OPTIONS[colorIndex];
Material GetCarChassisMaterial()
{
Material[] carSharedMats = carChassisMeshRenderers[currentCarIndex].sharedMaterials;
for (int i = 0; i < carSharedMats.Length; i++)
{
if (RemoveInstanceFromName(carSharedMats[i].name).Equals(carsChasisMat[currentCarIndex].name))
return carSharedMats[i];
}
return carsChasisMat[currentCarIndex];
}
// remove "(Instance)" word from runtime created material name
private string RemoveInstanceFromName(string name)
{
return name.Split(new char[] { ' ' })[0];
}
Когда вы получаете доступ к материалу рендерера через код и что-то модифицируете, Unity дублирует ваш материал (экземпляр, который вы видите), чтобы он не изменял все объекты, которые разделяют этот материал. Если вы хотите что-то изменить глобально, либо получите ссылку на материал (не проходя через средство визуализации), либо создайте несколько материалов и назначьте тот, который вы хотите во время выполнения.
Новые вопросы
unity3d
Unity - это кроссплатформенный игровой движок от Unity Technologies.