Unity - динамическая замена материала - PullRequest
0 голосов
/ 09 мая 2019

Я разрабатывал мини-RPG с низкополигональными активами. В настоящее время у меня есть рабочая система инвентаря с экипированными предметами игрока (такими как броня и оружие)

В blender я спроектировал сетки, чтобы иметь разные материальные области с надеждой на то, что они смогут реализовать какую-либо систему красителей. Каждое оборудование использует определенное количество общих материалов (первичная кожа, вторичная кожа и т. Д.)

У кого-нибудь есть предложения по реализации этой функции? Оборудование является объектом сценариев. Когда игрок нажимает «Использовать» в инвентаре, он попадает в EquipmentManager.cs, где он создается для игрока в качестве SkinnedMeshRenderer (исходный игровой объект - обычная сетка).

Красители также являются объектами сценариев с базовым Color32, который, как я понял, я мог бы просто изменить "mat.color = dye.color" из DyeManager.cs.

Проблема в том, что не все объекты оборудования используют одинаковые материалы. Поэтому при возврате массива Material [] порядок никогда не будет постоянным. Например, головной убор может иметь 4 материала (основной кожаный, кожаный второстепенный и т. Д.), В то время как головной убор может иметь только два (основной кожаный, специальный основной).

Я в основном просто ищу рекомендации о том, как кто-то может сделать эту работу во время выполнения. Раньше мне удавалось изменить материалы, но я испортил ВСЕ элементы оборудования с помощью .sharedMaterials, поскольку при его экипировке элемент меняется с обычного MeshRenderer на SkinnedMeshRenderer, и компилятор сказал мне, что я должен использовать sharedMaterials.

1 Ответ

0 голосов
/ 09 мая 2019

Вы можете сделать это, изменив скрипт корыта альбедо.Что-то вроде:

m_Renderer.material.SetTexture("_RedArmor", mat_armor);
...